- Implante uma topologia de recuperação de desastres multinuvem usando o Oracle Database Service for Azure
- Implantar a Topologia
Implantar a Topologia
A cláusula "do serviço" do RMAN permite restaurar e recuperar arquivos do banco de dados principal para um banco de dados stand-by na rede. Você pode usar essa funcionalidade para instanciar um banco de dados stand-by no lugar do comando RMAN DUPLICATE DATABASE
e é mais intuitivo e menos propenso a erros, portanto, uma economia de tempo.
Observação:
Clique em Copiar para salvar o exemplo de comando na área de transferência para colar na linha de comando. Certifique-se de substituir qualquervariables
por valores específicos para sua implementação.
Criar o Banco de Dados Stand-by Usando o RMAN
Use o Oracle Recovery Manager (RMAN) para criar o banco de dados stand-by com base no banco de dados principal ativo. Como alternativa, você pode restaurar com base em um backup do banco de dados principal.
- Conecte-se ao banco de dados e inicie o banco de dados no modo
NOMOUNT
.$ rman target /
startup nomount;
- Restaurar o arquivo de controle stand-by a partir do serviço principal. Neste exemplo, DBUKS_898_LHR é o banco de dados principal:
A saída deve ser semelhante à seguinte:restore standby controlfile from service 'DBUKS_898_LHR';
Starting restore at 04-JUL-23 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:04 output file name=+RECO/DBUKS_R2J_AMS/CONTROLFILE/current.256.1139953721 Finished restore at 04-JUL-23
- Mount the database:
A saída deve ser semelhante à seguinte:alter database mount;
released channel: ORA_DISK_1 Statement processed
- Como raiz na instância do OCI, altere as permissões do diretório Oracle para abrir (
chmod 777
).cd /opt/
ls -ltra
Você deverá ver:drwxr-xr-x 10 root root 4096 Jun 20 03:52 oracle
A entrada:[root@ldbuksdr]# chmod 777 oracle/
ls -ltra
Você deverá ver:drwxrwxrwx 10 root root 4096 Jun 20 03:52 oracle
- Restaure o banco de dados do banco de dados principal (DBUKS_898_LHR):
A saída deve ser semelhante à seguinte:restore database from service ' DBUKS_898_LHR ';
Starting restore at 04-JUL-23 using target database control file instead of recovery catalog allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=162 device type=SBT_TAPE channel ORA_SBT_TAPE_1: Oracle Database Backup Service Library VER=19.0.0.1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00001 to +DATA/DBUKS_898_LHR/DATAFILE/system.261.1139943103 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00003 to +DATA/DBUKS_898_LHR/DATAFILE/sysaux.268.1139943085 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:38 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00004 to +DATA/DBUKS_898_LHR/DATAFILE/undotbs1.260.1139943133 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:04 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00005 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/system.264.1139942759 channel ORA_DISK_1: restore complete, elapsed time: 00:00:49 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00006 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/sysaux.265.1139942759 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:25 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00007 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/undotbs1.266.1139942759 channel ORA_DISK_1: restore complete, elapsed time: 00:00:18 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00008 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/system.273.1139943583 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:04 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00009 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/sysaux.271.1139943599 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:16 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00010 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/undotbs1.270.1139943611 channel ORA_DISK_1: restore complete, elapsed time: 00:00:20 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00011 to +DATA/DBUKS_898_LHR/DATAFILE/users.269.1139943873 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:02 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00012 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/users.274.1139943875 channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:02 Finished restore at 04-JUL-23
exit ;
Validar o Banco de Dados Stand-by
Em seguida, você precisa validar o banco de dados stand-by.
- Exiba o nome e a atribuição do banco de dados. No prompt
SQL>
, digite:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
Você deverá ver uma resposta semelhante a esta:
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE -------------------- ------------------ --------------- ------------------- ------------------------ ---------------------------- YES NO MOUNTED PHYSICAL STANDBY DISABLED MAXIMUM PERFORMANCE
- Exiba o processo de arquivamento, o número do thread de status e o número de sequência do banco de dados:
select sysdate,process,status,thread#,sequence#,block# from v$managed_standby where status!='IDLE';
Você deverá ver uma resposta semelhante a esta:
04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0
Insira:
select distinct process from gv$managed_standby;
Você deverá ver uma resposta semelhante a esta:
PROCESS --------- ARCH DGRD
Adicionar Arquivos de Log Stand-by aos Bancos de Dados Principal e Stand-by
SQL>
para as etapas a seguir.
- Primeiro, adicione os arquivos de log stand-by ao banco de dados principal.
- Informe:
select group#, type, member from v$logfile;
Você verá uma resposta semelhante a esta:
GROUP# TYPE MEMBER ---------- ------- --------------------------------------------------------- 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.259.1139942665 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.258.1139942665 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665
- Informe:
select bytes, group# from v$log;
Você verá uma resposta semelhante a esta:1073741824 1 1073741824 3 1073741824 2
- Insira esta série de comandos:
SQL> alter database add standby logfile thread 1 group 5 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 6 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 7 ('+RECO') size 1073741824;
A resposta para cada um deve ser:Database altered
- Informe:
select group#, type, member from v$logfile;
Você verá uma resposta semelhante a esta:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------- 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.259.1139942665 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.258.1139942665 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665 4 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_4.432.1141789993 5 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_5.431.1141790001 6 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_6.430.1141790011 7 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_7.430.1141790017
- Arquive a lista de logs:
archive log list
- Informe:
- Agora, adicione os arquivos de log stand-by ao banco de dados stand-by.
- Informe:
select group#, type, member from v$logfile;
Você verá uma resposta semelhante a esta:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------ 3 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_3.489.1141280529 2 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_2.488.1141280519 1 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_1.487.1141280511
- Informe:
select bytes, group# from v$log;
Você verá uma resposta semelhante a esta:1073741824 1 1073741824 3 1073741824 2
- Insira esta série de comandos:
alter database add standby logfile thread 1 group 4 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 5 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 6 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 7 ('+RECO') size 1073741824;
A resposta para cada comando deve ser:Database altered
- Informe:
select group#, type, member from v$logfile;
Você verá uma resposta semelhante a esta:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------ 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.489.1141280529 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.488.1141280519 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.487.1141280511 4 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_4.294.1141283919 5 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_5.295.1141283929 6 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_6.296.1141283937 7 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_7.296.1141283938
- Informe:
- Elimine os arquivos de log com o nome exclusivo do banco de dados primário. Dos três arquivos de log, um dos arquivos será o log atual e, portanto, você não poderá eliminá-lo neste momento; esse arquivo será eliminado e recriado posteriormente.
- Informe:
alter database drop logfile group 1;
Você verá uma resposta semelhante a esta:alter database drop logfile group 1 * ERROR at line 1: ORA-01623: log 1 is current log for instance dbuks (thread 1) - cannot drop ORA-00312: online log 1 thread 1: '+RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665'
- Informe:
alter database drop logfile group 2;
alter database drop logfile group 3;
A resposta para cada um deve ser:Database altered
- Informe:
- Recrie os arquivos de log informando os seguintes comandos:
alter database add logfile thread 1 group 2 ('+RECO') size 1073741824;
alter database add logfile thread 1 group 3 ('+RECO') size 1073741824;
A resposta para cada um deve ser:Database altered.
Configurar o Oracle Data Guard Broker
- Verifique o valor dg_broker_start do banco de dados principal e do banco de dados standby. Certifique-se de que esteja definido como True; na linha de comando SQL, digite:
show parameter dg_broker_start;
A saída deve ser semelhante à seguinte:NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ dg_broker_start boolean TRUE
Se o dg_broker_start estiver definido comoFALSE
, defina o parâmetro comoTRUE
antes de passar para as próximas etapas; informe:alter system set dg_broker_start=true;
A saída deve ser semelhante à seguinte:select pname from v$process where pname like 'DMON%';
PNAME ----- DMON
- Verifique os arquivos do Oracle Data Guard do banco de dados principal:
show parameter dg_broker_config_file1;
Se você tiver o Oracle RAC ou o Oracle ASM, poderá alterar a localização do arquivo de configuração; por exemplo:show parameter dg_broker_config_file2;
alter system set dg_broker_config_file1=broker_config_file_location;
alter system set dg_broker_config_file2=broker_config_file_location;
- Registre os bancos de dados principal e standby:Use a interface da linha de comando (DGMGRL) do Oracle Data Guard para registrar o banco de dados principal e adicionar o perfil do banco de dados stand-by à configuração do broker:
- Faça log-in no host principal como sys.
dgmgrl sys/password@net_service_name_for_primary
- Crie uma configuração que use o nome do banco de dados principal.
CREATE CONFIGURATION configuration_name AS PRIMARY DATABASE IS primary_database_name CONNECT IDENTIFIER IS primary_database_name;
A saída deve ser semelhante à seguinte:CREATE CONFIGURATION dbuks_898_lhr_dbuks_r2j_ams AS PRIMARY DATABASE IS dbuks_898_lhr CONNECT IDENTIFIER IS dbuks_898_lhr;
- Adicione o banco de dados stand-by.
Por exemplo:ADD DATABASE standby unique database name AS CONNECT IDENTIFIER IS standby unique database name MAINTAINED AS PHYSICAL;
ADD DATABASE dbuks_r2j_ams AS CONNECT IDENTIFIER IS dbuks_r2j_ams MAINTAINED AS PHYSICAL;
A saída deve ser semelhante à seguinte:Database "dbuks_r2j_ams" added
- Faça log-in no host principal como sys.
- Ative a configuração:
enable configuration;
- Exiba a configuração:
- Informe:
show configuration;
Observação:
Se você receber um AVISO de que não foi possível determinar o atraso de aplicação, faça log-in no banco de dados principal por meio do sqlplus e faça algumas alternâncias de log.Configuration - dbuks_898_lhr_dbuks_r2j_ams Protection Mode: MaxPerformance Members: dbuks_898_lhr - Primary database dbuks_r2j_ams - Physical standby database Fast-Start Failover: Disabled Configuration Status: SUCCESS (status updated 36 seconds ago)
- Exiba a configuração do banco de dados principal (neste exemplo, dbuks_898_lhr):
Você verá uma resposta semelhante a esta:show database dbuks_898_lhr
Database - dbuks_898_lhr Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): dbuks Database Status: SUCCESS
- Exiba a configuração do banco de dados stand-by (neste exemplo, dbuks_r2j_ams):
Você verá uma resposta semelhante a esta:show database dbuks_r2j_ams
Database - dbuks_r2j_ams Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 1 second ago) Apply Lag: 0 seconds (computed 0 seconds ago) Average Apply Rate: 59.00 KByte/s Real Time Query: ON Instance(s): dbuks Database Status: SUCCESS
- Informe:
Confirmar a Replicação
O banco de dados stand-by agora deve começar a aplicar o redo recebido do banco de dados principal.
SQL>
para as etapas a seguir.
- Verifique o processo MRP:
- Informe:
select sysdate, process, status, thread#, sequence#, block# from v$managed_standby where status!='IDLE';
A saída deve ser semelhante à seguinte:SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 RFS RECEIVING 1 417 2413 10-JUL-23 MRP0 APPLYING_LOG 1 417 2412
- Exiba os processos do Data Guard.
A saída deve ser semelhante à seguinte:select distinct process from gv$managed_standby;
PROCESS --------- DGRD RFS MRP0 ARCH
- O banco de dados stand-by agora começou a aplicar os redo logs. Faça algumas alternâncias de log no banco de dados principal e confirme novamente no banco de dados stand-by:
A saída deve ser semelhante à seguinte:select sysdate, process, status, thread#, sequence#, block#from v$managed_standbywhere status!='IDLE';
SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CLOSING 1 253 1 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CLOSING 1 252 1 04-JUL-23 MRP0 APPLYING_LOG 1 254 17 04-JUL-23 RFS RECEIVING 1 254 18
- Arquive a lista de logs no banco de dados principal:
A saída deve ser semelhante à seguinte:archive log list
Insira:Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 415 Next log sequence to archive 417 Current log sequence 417
alter system switch logfile;
Você deverá receber esta resposta:System altered.
Informe:/
Você deverá ver:System altered.
Agora, arquive a lista de logs:
Você deverá receber esta resposta:archive log list
Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 417 Next log sequence to archive 419 Current log sequence 419
- Arquive a lista de logs no banco de dados stand-by; informe:
select sysdate, process, status, thread#, sequence#, block# from v$managed_standby where status!='IDLE';
Você deverá receber esta resposta:
SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CLOSING 1 418 1 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CLOSING 1 417 2048 10-JUL-23 RFS RECEIVING 1 419 59 10-JUL-23 MRP0 APPLYING_LOG 1 419 58
- Informe:
- Ative o Flashback no banco de dados stand-by:
- Informe:
Depois de cada comando, você verá:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel; SQL> alter database flashback on;
Database altered
- Confirme se o flashback de banco de dados está ativado (ativado).
A saída deve ser semelhante à seguinte:select flashback_on from v$database;
FLASHBACK_ON ------------------ YES
- Insira:
Você deverá ver:recover managed standby database using current logfile disconnect from session;
Media recovery complete.
- Informe:
- Exiba os detalhes do banco de dados:
A saída deve ser semelhante à seguinte:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE ---------------------------------------------------------- --------------- ----- ----------------------- ----------------------------- YES YES MOUNTED PHYSICAL STANDBY ENABLED MAXIMUM PERFORMANCE
- Use o utilitário Server Control (srvctl) para interromper o banco de dados stand-by:
A saída deve ser semelhante a esta:srvctl stop database -d db_unique_name
srvctl stop database -d dbuks_r2j_ams
- Use o utilitário Server Control para iniciar o banco de dados stand-by:
A saída deve ser semelhante a esta:srvctl start database -d db_unique_name
srvctl start database -d dbuks_r2j_ams
- Exiba os detalhes do banco de dados:
A saída deve ser semelhante a esta:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE ----------------------------------------------------------------------- -------------------- ----------------------- YES YES READ ONLY WITH APPLY PHYSICAL STANDBY ENABLED MAXIMUM PERFORMANCE
- Agora você pode fornecer mais algumas chaves de arquivo de log do principal e garantir que o redo esteja sendo aplicado ao stand-by.
- Recrie o arquivo de log pendente, que existe com o nome exclusivo principal. Digite estes comandos:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel;
alter database drop logfile group 1;
Após cada comando, você deverá ver:alter database add standby logfile thread 1 group 1 ('+RECO') size 1073741824;
Por fim, insira:Database altered.
Você deverá ver:recover managed standby database using current logfile disconnect from session;
Media recovery complete.