Usar o Oracle Data Guard com a CLI do Banco de Dados
Este artigo explica como usar a CLI do banco de dados para configurar o Data Guard com o FSFO (Failover de Inicialização Rápida) no Oracle Cloud Infrastructure. Os tópicos deste artigo explicam como preparar os bancos de dados principal e stand-by e, em seguida, configurar o Data Guard para transmitir dados de redo do banco de dados principal e aplicá-los ao banco de dados stand-by.
A Oracle recomenda que você use a Console em vez da CLI do banco de dados para configurar e trabalhar com o Data Guard no Oracle Cloud Infrastructure.
Observação:
Este artigo pressupõe que você esteja familiarizado com o Data Guard e o FSFO. Para saber mais sobre eles, consulte Usar o Oracle Data Guard em um Sistema de Banco de Dados.
Pré-requisitos
Para executar os procedimentos neste tópico, você precisará das seguintes informações para os bancos de dados principal e stand-by.
- db_name (ou oracle_sid)
- db_unique_name
- diretório do oracle home (ou home do banco de dados)
Localizando as Informações do Banco de Dados
Depois de iniciar os sistemas de banco de dados principal e stand-by e criar os bancos de dados, conforme descrito posteriormente neste tópico, você poderá usar a CLI nesses sistemas para localizar as informações necessárias do banco de dados.
- Estabeleça conexão via SSH com o Sistema de Banco de Dados.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Faça log-in como
opc
e, em seguida,sudo
para o usuárioroot
. Usesudo su -
com um hífen para chamar o perfil do usuário raiz, que definiráPATH
para o diretório dbcli (/opt/oracle/dcs/bin
).sudo su -
- Para localizar db_name (ou oracle_sid) e db_uniqueName, execute o comando
dbcli list-databases -j
.
Saída:dbcli list-databases -j
[ { "id" : "80ad855a-5145-4f8f-a08f-406c5e4684ff", "name" : "dbtst", "dbName" : "dbtst", "databaseUniqueName" : "dbtst_phx1cs", "dbVersion" : "12.1.0.2", "dbHomeId" : "2efe7af7-0b70-4e9b-ba8b-71f11c6fe287", "instanceOnly" : false, . . .
- Para localizar o diretório oracle home (ou o home do banco de dados), execute o comando
dbcli list-dbhomes
. Se houver vários homes de banco de dados no sistema de banco de dados, use aquele que corresponde ao valor "dbHomeId" na saída de comandodbcli list-databases -j
mostrada acima.
Saída:dbcli list-dbhomes
ID Name DB Version Home Location Status ---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ---------- 2efe7af7-0b70-4e9b-ba8b-71f11c6fe287 OraDB12102_home1 12.1.0.2.160719 (23739960, 23144544) /u01/app/oracle/product/12.1.0.2/dbhome_1 Configured 33ae99fe-5413-4392-88da-997f3cd24c0f OraDB11204_home1 11.2.0.4.160719 (23054319, 23054359) /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured
Criar um Sistema de Banco de Dados Principal
Se você ainda não tiver um sistema de banco de dados principal, crie-o conforme descrito em Visão Geral da Criação de um Sistema de Banco de Dados. O sistema de banco de dados incluirá um banco de dados inicial. Você pode criar bancos de dados adicionais usando os Comandos Database disponíveis no sistema de banco de dados.
Criar um Sistema de Banco de Dados Stand-by
Observação:
O banco de dados stand-by deve ter o mesmo db_name que o banco de dados principal, mas deve ter um db_unique_name distinto. Se você usar o mesmo nome para os bancos de dados stand-by e principal, será necessário excluir o banco de dados do sistema de banco de dados stand-by usando o comando dbcli delete-database
antes de executar o comando dbcli create-database
descrito abaixo. A exclusão e criação do banco de dados levará vários minutos para ser concluída. O comando dbcli
deve ser executado como o usuário raiz.
- Crie um sistema de banco de dados stand-by, conforme descrito em Visão Geral da Criação de um Sistema de Banco de Dados, e espere que o sistema de banco de dados conclua o provisionamento e fique disponível.
Você pode criar o sistema de banco de dados stand-by em um domínio de disponibilidade distinto do sistema de banco de dados principal para fins de disponibilidade e recuperação de desastre (isso é altamente recomendado). Você pode criar o sistema de banco de dados stand-by na rede em nuvem do sistema de banco de dados principal para que ambos os sistemas estejam em uma rede única roteável.
- Estabeleça conexão via SSH com o Sistema de Banco de Dados.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Faça log-in como
opc
e, em seguida,sudo
para o usuárioroot
. Usesudo su -
com um hífen para chamar o perfil do usuário raiz, que definiráPATH
para o diretório dbcli (/opt/oracle/dcs/bin
).sudo su -
- O sistema de banco de dados incluirá um banco de dados inicial, mas você precisará criar um banco de dados stand-by usando o comando
dbcli create-database
com o parâmetro--instanceonly
. Esse parâmetro cria somente a estrutura de armazenamento do banco de dados e inicia o banco de dados no modo nomount (nenhum outro arquivo de banco de dados é criado).Ao usar
--instanceonly
, os parâmetros--dbname
e--adminpassword
são obrigatórios e devem corresponder ao dbname e à senha de administrador do banco de dados principal para evitar confusão.O comando de amostra a seguir solicita a senha de administrador e cria uma estrutura de armazenamento para um banco de dados chamado dbname.
dbcli create-database --dbname <same as primary dbname>;--databaseUniqueName <different from primary uniquename>;--instanceonly --adminpassword
Se você estiver usando bancos de dados plugáveis, especifique também o parâmetro
--cdb
.Para obter a sintaxe completa do comando, consulte Comandos Database.
- Aguarde alguns minutos para que o comando
dbcli create-database
crie o banco de dados stand-by.Você pode usar o comando
dbcli list-jobs
para verificar se o job de criação foi executado com sucesso e, em seguida, o comandodbcli list-databases
para verificar se o banco de dados está configurado.
Preparar o Sistema de Banco de Dados Principal
Para preparar o sistema de banco de dados principal, você precisará configurar listeners estáticos, atualizar o tnsnames.ora e configurar algumas definições e parâmetros de banco de dados.
Configurando os Listeners Estáticos
Crie listeners estáticos a serem usados pelo RMAN e pelo Data Guard Broker.
- Estabeleça conexão via SSH com o sistema de banco de dados principal, faça log-in como usuário
opc
ouroot
esudo
para o usuário do sistema operacional do grid.sudo su - grid
- Edite
/u01/app/<version>/grid/network/admin/listener.ora
e adicione o conteúdo a seguir a ele. O primeiro listener estático mostrado aqui é opcional. O segundo listener estáticoDGMGRL
é opcional para bancos de dados da versão 12.1 ou posteriores, mas é necessário para bancos de dados da versão 11.2.SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>_DGMGRL.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) )
- Salve as alterações e reinicie o listener.
srvctl stop listener srvctl start listener
Adicionando Nomes de Serviço de Rede ao tnsnames.ora
Como o usuário oracle, edite $ORACLE_HOME/network/admin/tnsnames.ora
e adicione o nome do serviço de rede do banco de dados stand-by a ele.
<standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<standby db_domain>)
)
)
O exemplo acima pressupõe que a resolução do nome esteja funcionando e que o <standby_server>.<domain>
possa ser resolvido no banco de dados principal. Você também pode usar o endereço IP privado do servidor stand-by se os endereços IP forem roteáveis em uma única VCN (rede virtual na nuvem).
Configurando Parâmetros do Banco de Dados Principal
Dica:
Se os hosts principal e stand-by tiverem diferentes estruturas de diretório, talvez seja preciso definir parâmetros adicionais que não são discutidos aqui, como o parâmetro log_file_name_convert
. Consulte a documentação do RMAN para obter mais informações sobre como criar stand-bys para hosts com diferentes estruturas de diretório.
- Como o usuário oracle, ative o gerenciamento automático de arquivos stand-by.
alter system set standby_file_management=AUTO;
- Identifique os nomes e os locais dos arquivos de configuração do Broker. Os comandos usados para isso dependem do tipo de armazenamento do banco de dados. Se você não tiver certeza do tipo de armazenamento do banco de dados, use os Comandos Database no sistema de banco de dados.
Para armazenamento de dados ACFS, use os comandos a seguir para definir os arquivos de configuração do Broker.
alter system set dg_broker_config_file1='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr1<Primary db_unique_name>.dat'; alter system set dg_broker_config_file2='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr2<Primary db_unique_name>.dat';
Para armazenamento de dados ASM, use os comandos a seguir para definir os arquivos de configuração do Broker.
alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat'; alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat';
- Ative o processo DMON do Broker para o banco de dados.
alter system set dg_broker_start=true;
- Imponha o registro em log do banco de dados para todas as transações do banco de dados.
alter database force logging ;
- Adicione SRLs (Redo Logs Standby), com base nos ORLs (Redo Logs On-line). Em um sistema de banco de dados recém-iniciado, haverá três ORLs de tamanho 1073741824, portanto, crie quatro SRLs do mesmo tamanho.
É possível usar a consulta abaixo para determinar o número e o tamanho (em bytes) dos ORLs.
Saída:select group#, bytes from v$log;
GROUP# BYTES ---------- ---------- 1 1073741824 2 1073741824 3 1073741824
Todos os ORLs devem ter o mesmo tamanho.
Os SRLs devem ter o mesmo tamanho que os ORLs, mas deve haver pelo menos um SRL a mais do que ORLs. No exemplo acima, há três ORL, portanto, são necessários quatro SRLs. Especifique os redo logs atuais mais um e use o mesmo tamanho dos redo logs.
alter database add standby logfile thread 1 size <size>;
Deve haver apenas um membro no grupo SRL (por padrão, um sistema de banco de dados é criado com apenas um membro por grupo de SRL). Para garantir isso, você pode nomear o arquivo com a sintaxe a seguir.
alter database add standby logfile thread 1 group 4 (<logfile name with full path>) size 1073741824, group 5(<logfile name with full path>) size 1073741824 ...
Para configurações do ASM/OMF, o comando acima usa o grupo de discos, em vez de <logfile name with full path>.
alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...
Dica:
ORLs e SRLs devem ser dimensionados para que switches de log não ocorram com mais frequência do que a cada 10 minutos. Isso requer conhecimento do aplicativo e pode precisar ser ajustado após a implantação. Para obter mais informações, consulte Use Standby Redo Logs and Configure Size Appropriately.
- Certifique-se de ter criado o número correto de SRLs.
select group#, bytes from v$standby_log;
- Verifique se o banco de dados está no modo ARCHIVELOG.
archive log list
- Ative o FLASHBACK do banco de dados. O valor mínimo recomendado para db_flashback_retention_target é 120 minutos.
alter database flashback on ; alter system set db_flashback_retention_target=120;
- Execute um único redo log de switch para ativar o arquivamento se o banco de dados for recém-criado. (Pelo menos um log deve ser arquivado antes da execução do comando RMAN duplicate.)
alter system switch logfile;
Preparar o Banco de Dados Stand-by
Antes de preparar o banco de dados stand-by, verifique se o home do banco de dados no standby é da mesma versão que o home do principal. (Se os bancos de dados principal e stand-by tiverem sido criados recentemente com a mesma versão do banco de dados, os homes do banco de dados serão iguais.) Se não for, crie um home do banco de dados que seja da mesma versão. Você pode usar os Comandos Dbhome para verificar as versões e criar um novo home de banco de dados conforme necessário.
Para preparar o sistema de banco de dados stand-by, você precisará configurar listeners estáticos, atualizar tnsnames.ora, configurar a Wallet de TDE, criar um arquivo de senha temporário, verificar a conectividade, executar o RMAN DUPLICATE, ativar o FLASHBACK e criar o serviço de banco de dados.
Configurando os Listeners Estáticos
Crie listeners estáticos a serem usados pelo RMAN e pelo Data Guard Broker.
- Estabeleça conexão via SSH com o sistema de banco de dados stand-by, faça log-in como o usuário
opc
ouroot
esudo
para o usuário do sistema operacional do grid.sudo su - grid
- Anexe o conteúdo a seguir a
/u01/app/<db_version>/grid/network/admin/listener.ora.
O primeiro listener estático mostrado a seguir é obrigatório para o comando RMAN DUPLICATE. O segundo listener estático DGMGRL é opcional para bancos de dados das versões 12.2.0.1 e 12.1.0.2, mas é necessário para o banco de dados versão 11.2.0.4.
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>_DGMGRL.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) )
- Reinicie o listener.
srvctl stop listener srvctl start listener
- Verifique se os listeners estáticos estão disponíveis. A saída de amostra abaixo é para o banco de dados versão 12.1.0.2. Observe que as mensagens
...status UNKNOWN
são esperadas neste ponto.
Saída:lsnrctl status
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-SEP-2016 21:09:25 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 29-SEP-2016 21:09:19 Uptime 0 days 0 hr. 0 min. 5 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/12.1.0.2/grid/network/admin/listener.ora Listener Log File /u01/app/grid/diag/tnslsnr/dg2/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.24)(PORT=1521))) Services Summary... Service "dg2_phx2hx.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... Service "dg2_phx2hx_DGMGRL.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
Adicionando Nomes de Serviço de Rede ao tnsnames.ora
Como o usuário oracle, adicione o nome do serviço de rede do banco de dados stand-by a $ORACLE_HOME/network/admin/tnsnames.ora
. $ORACLE_HOME corresponde ao home do banco de dados em que o banco de dados stand-by está sendo executado.
<Primary db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <primary_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <primary db_unique_name).<primary db_domain>)
)
)
<Standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<db_domain>)
)
)
Copiando as Wallets de TDE para o Sistema Stand-by
scp -i <private key> primary_server:/opt/oracle/dcs/commonstore/wallets/tde/<primary db_unique_name>/* standby_server:/opt/oracle/dcs/commonstore/wallets/tde/<standby db_unique_name>
Definindo a Configuração do Sistema Stand-by
Como o usuário oracle, crie o diretório a seguir para o banco de dados versão 11.2.0.4. Esta etapa é opcional para a versão 12.2.0.1 e a versão 12.1.0.2.
mkdir -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile
Criando o Destino do Arquivo de Auditoria
Como o usuário oracle, crie o seguinte diretório para usar como o destino do arquivo de auditoria.
mkdir -p /u01/app/oracle/admin/<db_name>/adump
Caso contrário, o comando RMAN duplicate usado posteriormente falhará.
Criando um Arquivo de Senha Temporário
Como o usuário oracle, crie um arquivo de senha temporário.
orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid> password=<admin password for primary> entries=5
A senha deve ser igual à senha de administrador do banco de dados principal. Caso contrário, a etapa de duplicação do RMAN
abaixo falhará com: RMAN-05614: Passwords for target and auxiliary connections must be the same when using active duplicate.
Verificando se o Banco de Dados Stand-by está Disponível
- Como o usuário oracle, defina as variáveis de ambiente.
. oraenv
- Substitua
$ORACLE_HOME/dbs/init<standby sid_name>.ora
pelo seguinte conteúdo:db_name=<Primary db_name> db_unique_name=<standby db_unique_name> db_domain=<standby db_domain>
- Remova o spfile do stand-by.
/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora
O banco de dados precisa ser iniciado no modo nomount sem o spfile especificado, mas o arquivo init original contém um parâmetro spfile que evitará que a etapa de duplicação do
RMAN
funcione. - Defina a variável de ambiente
ORACLE_UNQNAME
para apontar para o seuDB_UNIQUE_NAME
.export ORACLE_UNQNAME =db_unique_name
Observação:
Se você não executar esta etapa, a wallet não será aberta e a execução do comandoRMAN DUPLICATE
na etapa subsequente falhará. - O comando
dbcli create-database --instanceonly
usado anteriormente abre o banco de dados stand-by como principal no modo de leitura/gravação; portanto, o banco de dados precisa ser desativado antes de passar para a etapa nomount abaixo.sqlplus / as sysdba shutdown immediate
- Inicie o banco de dados no modo nomount.
startup nomount
Verificando as Conexões do Banco de Dados
Verifique a conexão entre os bancos de dados principal e stand-by.
- Verifique se a porta 1521 do listener está aberta na(s) lista(s) de segurança usada(s) nos sistemas de banco de dados principal e stand-by. Para obter mais informações, consulte Atualizar a Lista de Segurança do Sistema de Banco de Dados.
- No banco de dados principal, estabeleça conexão com o banco de dados stand-by.
sqlplus sys/<password>@<standby net service name> as sysdba
- No banco de dados stand-by, estabeleça conexão com o banco de dados principal.
sqlplus sys/<password>@<primary net service name> as sysdba
Executando o Comando RMAN DUPLICATE
Execute o comando RMAN DUPLICATE como o usuário oracle no sistema de banco de dados stand-by.
Se o banco de dados principal for grande, você poderá alocar canais adicionais para melhorar o desempenho. Para um banco de dados recentemente instalado, um canal geralmente executa a duplicação do banco de dados em alguns minutos.
Verifique se não há erros gerados pelo comando RMAN DUPLICATE. Se ocorrerem erros, reinicie o banco de dados usando o arquivo init.ora
(não o spfile); caso ele seja gerado em $ORACLE_HOME/dbs
como parte do comando RMAN DUPLICATE.
Nos exemplos a seguir, use letras minúsculas para <Standby db_unique_name>, a menos que especificado de outra forma.
Para o layout de armazenamento do ACFS, execute os comandos a seguir.
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run { allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase >/'
set db_unique_name='<Standby db_unique_name>'
set db_create_file_dest='/u02/app/oracle/oradata/<Standby db_unique_name>'
set dg_broker_config_file1='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
Para o layout de armazenamento do ASM, execute os comandos a seguir.
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run {
allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase>/'
set db_unique_name='<Standby db_unique_name>'
set dg_broker_config_file1='+DATA/<Standby db_unique_name>/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='+DATA/<Standby db_unique_name>/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
Ativando o FLASHBACK no Banco de Dados
- Como melhor prática do Data Guard, ative o flashback e defina
db_flashback_retention_target
para pelo menos 120 minutos nos bancos de dados principal e stand-by.alter database flashback on; alter system set db_flashback_retention_target=120;
- Verifique se o banco de dados stand-by foi criado corretamente.
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
Criando um Serviço de Banco de Dados
A Oracle recomenda a criação de um serviço de banco de dados para o banco de dados stand-by usando o srvctl.
Para o layout de armazenamento do ACFS.
- Crie um diretório compartilhado e copie o arquivo spfile nele.
mkdir -pv /u02/app/oracle/oradata/<Standby db_unique_name>/dbs cp $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
- Interrompa e remova o serviço de banco de dados existente.
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- Crie o serviço de banco de dados.
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- Inicie o serviço de banco de dados.
srvctl start database -d <standby db_unique_name>
- Limpe os arquivos em
$ORACLE_HOME/dbs
.rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
- Crie o arquivo
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
para fazer referência ao novo local do arquivo spfile.SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
- Interrompa o banco de dados stand-by e, em seguida, inicie-o usando
srvctl
.srvctl stop database -d <standby db_unique_name> srvctl start database -d <standby db_unique_name>
Para o layout de armazenamento do ASM.
- Considere gerar o arquivo spfile em +DATA.
create pfile='init<standby oracle_sid>.ora' from spfile ; create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
- Interrompa e remova o serviço de banco de dados existente.
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- Crie o serviço de banco de dados.
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- Inicie o serviço de banco de dados.
srvctl start database -d <standby db_unique_name>
- Limpe os arquivos em
$ORACLE_HOME/dbs
.rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
- Crie o arquivo
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
para fazer referência ao novo local do arquivo spfile.SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
- Interrompa o banco de dados e inicie o banco de dados stand-by usando srvctl.
srvctl start database -d <standby db_unique_name>
Configurar o Data Guard
Execute as etapas a seguir para concluir a configuração do Data Guard e ativar o transporte de redo do banco de dados principal e o redo apply no banco de dados stand-by.
- Execute o utilitário de linha de comando
dgmgrl
do sistema de banco de dados principal ou stand-by e estabeleça conexão com o banco de dados principal usando as credenciais sys.connect sys/<sys password>@<primary tns alias>
- Crie a configuração do Data Guard e identifique os bancos de dados principal e stand-by no utilitário de linha de comando
dgmgrl
.create configuration mystby as primary database is <primary db_unique_name> connect identifier is <primary tns alias>; add database <standby db_unique_name> as connect identifier is <standby tns alias> maintained as physical;
- Ative a configuração do Data Guard para o utilitário de linha de comando
dgmgrl
.enable configuration;
- Verifique se a configuração adequada do Data Guard foi feita. Execute o SQL a seguir em ambos os bancos de dados principal e stand-by no prompt SQL.
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
- Verifique se os processos do Data Guard foram iniciados no banco de dados stand-by.
select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
- Verifique a configuração do parâmetro nos bancos de dados principal e stand-by.
show parameter log_archive_dest_ show parameter log_archive_config show parameter fal_server show parameter log_archive_format
- Verifique se a configuração do Data Guard está funcionando no utilitário de linha de comando
dgmgrl
. Especificamente, verifique se a remessa de redo e o redo apply estão funcionando e se o stand-by não tem um gap excessivo em relação ao principal.show configuration verbose show database verbose <standby db_unique_name> show database verbose <primary db_unique_name>
Qualquer discrepância, erro ou advertência deve ser resolvido. Você também pode executar uma transação no banco de dados principal e verificar se ela está visível no banco de dados stand-by.
- Verifique se a configuração do Data Guard está funcionando conforme o esperado, fazendo switchover e failover em ambas as direções. Execute
show configuration
após cada operação e verifique se não há mensagens de erro ou de advertência no utilitário de linha de comandodgmgrl
.Atenção:
Esta etapa é opcional, com base em seu critério. Se por algum motivo a configuração não for válida, o switchover e/ou o failover falhará e poderá ser difícil ou impossível iniciar o banco de dados principal. Pode ser necessária uma recuperação do banco de dados principal, o que afetará a disponibilidade.
switchover to <standby db_unique_name> switchover to <primary db_unique_name> #connect to standby before failover: connect sys/<sys password>@<standby db_unique_name> failover to <standby db_unique_name> reinstate database <primary db_unique_name> #connect to primary before failover: connect sys/<sys password>@<primary db_unique_name> failover to <primary db_unique_name> reinstate database <standby db_unique_name>
Configurar Observer (Opcional)
A melhor prática para alta disponibilidade e durabilidade é executar o principal, o stand-by e o observer em domínios de disponibilidade separados. O observer determina se o failover deve ou não ser feito para um banco de dados stand-by de destino específico. O servidor usado para o observer requer o software Oracle Client Administrator, que inclui o Oracle SQL NET e o Broker. Execute os comandos a seguir no utilitário de linha de comando dgmgrl
.
- Configure nomes de alias TNS para os bancos de dados principal e stand-by, conforme descrito anteriormente, e verifique a conexão com os dois bancos de dados.
- Altere o modo de proteção para maxavailability ou maxperformance (o modo maxprotection não é compatível com FSFO).
Para ativar o maxavailability:
edit database <standby db_unique_name> set property 'logXptMode'='SYNC'; edit database <primary db_unique_name> set property 'logXptMode'='SYNC'; edit configuration set protection mode as maxavailability;
Para ativar o maxperformance:
edit configuration set protection mode as maxperformance; edit database <standby db_unique_name> set property 'logXptMode'='ASYNC'; edit database <primary db_unique_name> set property 'logXptMode'='ASYNC';
Para maxperformance, a propriedade
FastStartFailoverLaglimit
limita a quantidade máxima de perda de dados permitida a 30 segundos por padrão. - As propriedades a seguir também devem ser consideradas. Execute
show configuration verbose
para ver seus valores atuais.- FastStartFailoverPmyShutdown
- FastStartFailoverThreshold
- FastStartFailoverTarget
- FastStartFailoverAutoReinstate
(A execução de
show configuration
resultará no seguinte erro até que o observer seja iniciado:Warning : ORA-16819: fast-start failover observer not started
.) - Ative o failover de inicialização rápida do Broker:
Enable fast_start failover
- Verifique o failover de inicialização rápida e as definições associadas.
show fast_start failover
- Inicie o observer do Broker (ele será executado em primeiro plano, mas também pode ser executado em segundo plano).
start observer
- Verifique se o failover de inicialização rápida está ativado e sem erros ou advertências.
show configuration verbose
- Sempre teste o failover nas duas instruções para garantir que tudo esteja funcionando conforme o esperado. Verifique se o FSFO está sendo executado corretamente, fazendo um cancelamento de shutdown do banco de dados principal.
O observer deve iniciar o failover para o banco de dados stand-by. Se o modo de proteção for definido para maxprotection, poderá ocorrer alguma perda de dados, com base no valor FastStartFailoverLaglimit.