Nesse artigo irei explicar um pouco o funcionamento de cada modo de proteção no Data Guard, apesar de ser muito mais comum o modo de MaxPerformance, saber das outras possibilidades também pode ser útil em casos específicos, então bora lá.
Para começar, irei resumir um pouco como funciona cada modo de proteção:
MaxPerformance
- É o modo de proteção default
- Oferece o mais alto nível possível de proteção de dados sem afetar o desempenho do banco de dados primário
- Transações são confirmadas assim que os dados de redo necessários para recuperar essa transação são escritos no online redo log local.
- Os dados de redo do banco primário também são escritos para todos os bancos standby ASSYNC
MaxAvailability
- Esse modo de proteção providencia o maior nível de proteção de dados possível sem comprometer a disponibilidade do banco de dados primário
- Assim, como no modo de proteção máxima, uma transação não é confirmada até que o redo necessário para recuperar essa transação seja escrito no online redo log local e em pelo menos um standby redo log remoto.
- Nesse modo de proteção, o banco de dados primário não é desligado se uma falha impedir que ele escreva seu fluxo de redo em um standby redo log remoto. Em vez disso, o banco de dados opera em modo não sincronizado até que a falha seja corrigida e todas as lacunas nos arquivos de redo log sejam resolvidas.
MaxProtection
- Esse modo de proteção garante que não haja perda de dados caso o banco de dados primário venha a falhar
- Nele os dados de redo necessários para recuperar cada transação devem ser escritos tanto no online redo log local quanto no standby redo log
- Nesse modo, para garantir que não haja perda de dados, o banco de dados primário é desligado se uma falha impedir que ele escreva seu fluxo de redo em pelo menos um standby redo log remoto
Agora, após explicar um pouco dos modos de proteção, vou demonstrar como podem ser feitas as alterações entre eles.
No exemplo abaixo tenho o meu banco primário no modo de Máxima Performance
DGMGRL> show configuration verbose;Configuration - dg Protection Mode: MaxPerformance Members: orcl - Primary database orcldg - Physical standby databaseProperties: FastStartFailoverThreshold = '30' OperationTimeout = '30' TraceLevel = 'USER' FastStartFailoverLagLimit = '30' CommunicationTimeout = '180' ObserverReconnect = '0' FastStartFailoverAutoReinstate = 'TRUE' FastStartFailoverPmyShutdown = 'TRUE' BystandersFollowRoleChange = 'ALL' ObserverOverride = 'FALSE' ExternalDestination1 = '' ExternalDestination2 = '' PrimaryLostWriteAction = 'CONTINUE' ConfigurationWideServiceName = 'orcl_CFG'Fast-Start Failover: DisabledConfiguration Status:SUCCESSDGMGRL>
É importante dizer que eu não posso pular fases durante a alteração do modo de proteção, no caso, se eu tentar mudar de MaxPerformance para MaxProtection ele me retornará um erro pois ele necessitará de passar pelo modo MaxAvailability antes.
DGMGRL> edit configuration set protection mode as maxprotection;Error: ORA-16651: upgrade to maximum protection mode not possibleFailed.DGMGRL>
E para a MaxAvailability caso eu não tenha ao menos um standby com o transporte de redo no modo SYNC ele irá retornar erro também, igual no exemplo abaixo
DGMGRL> edit configuration set protection mode as maxavailability;Error: ORA-16627: operation disallowed since no member would remain to support protection modeFailed.DGMGRL>
Então irei alterar para o modo fastsync (SYNC NO AFFIRM)
DGMGRL> edit database orcldg set property logxptmode = 'fastsync';Property "logxptmode" updatedDGMGRL> show database orcldg logxptmode; LogXptMode = 'fastsync'DGMGRL>
Agora já posso realizar a alteração para MaxAvailability
DGMGRL> edit configuration set protection mode as maxavailability;Succeeded.DGMGRL> show configuration;Configuration - dg Protection Mode: MaxAvailability Members: orcl - Primary database orcldg - Physical standby databaseFast-Start Failover: DisabledConfiguration Status:SUCCESS (status updated 52 seconds ago)DGMGRL>
Porém essa configuração de envio de redo não funcionará para o modo de proteção MaxProtection por exemplo, devido ao envio de redo estar ASSYNC. Para esse modo só é permitido a configuração SYNC + AFFIRM
DGMGRL> edit database orcldg set property logxptmode = 'sync';Property "logxptmode" updatedDGMGRL> show database orcldg logxptmode; LogXptMode = 'sync'DGMGRL> edit configuration set protection mode as maxprotection;Succeeded.DGMGRL> show configuration;Configuration - dg Protection Mode: MaxProtection Members: orcl - Primary database orcldg - Physical standby databaseFast-Start Failover: DisabledConfiguration Status:SUCCESS (status updated 50 seconds ago)DGMGRL>
E por fim, do MaxProtection para o MaxPerformance eu já consigo voltar diretamente
DGMGRL> edit configuration set protection mode as maxperformance;Succeeded.DGMGRL> show configuration;Configuration - dg Protection Mode: MaxPerformance Members: orcl - Primary database orcldg - Physical standby databaseFast-Start Failover: DisabledConfiguration Status:SUCCESS (status updated 22 seconds ago)DGMGRL>