Neste tópico, mostrarei a experiência de criar um Standby com Data Guard Broker utilizando o RMAN na versão 11g. Uma tarefa que foi simplificada com o Broker.
Neste momento não mostrarei os conceitos de Standby e Data Guard Broker, espero que a consulta a esta página venha após pesquisas de como funciona um Standby e de como são efetuados os procedimentos.
Os procedimentos demonstrados foram criados especificamente para este propósito, portanto, podem ser adaptados conforme a necessidade de cada ambiente.
Qualquer dúvida, crítica ou sugestão, entrem em contato: braga.marcos@gmail.com
Bons estudos.
1. PRÉ-REQUISITOS
Os pré-requisitos são necessários para evitar surpresas no desenvolvimento dos procedimentos.
1.1. AMBIENTE
Trabalharemos utilizando o ambiente de hosts e configuração de sistema operacional a seguir
.---. host01 # hostname| | Red Hat EL # versões 4 ou 5| | Oracle 11.2.0.1 # ORACLE_HOME=/oracle/11.2.0| | Instância PROD'---' IP: 192.168.100.1.---. host02 # hostname| | Red Hat EL # versões 4 ou 5| | Oracle 11.2.0.1 # ORACLE_HOME=/oracle/11.2.0| | (Standby)'---' IP: 192.168.100.2
1.2. CONFIGURAÇÃO DE REDE
A configuração de rede deverá conter o IP e o nome dos hosts de ambas as máquinas.
Edite o arquivo /etc/hosts e adicione as seguintes entradas
# /etc/hosts192.168.100.1 host01192.168.100.2 host02Essa configuração é efetuada com o usuário root.
Teste a configuração de rede utilizando os seguintes procedimentos:
-- No host01
$ ping -c 4 host01PING host01 (192.168.100.1) 56(84) bytes of data.64 bytes from host01 (192.168.100.1): icmp_seq=1 ttl=64 time=0.101 ms64 bytes from host01 (192.168.100.1): icmp_seq=2 ttl=64 time=0.093 ms64 bytes from host01 (192.168.100.1): icmp_seq=3 ttl=64 time=0.093 ms64 bytes from host01 (192.168.100.1): icmp_seq=4 ttl=64 time=0.092 ms--- host01 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3999msrtt min/avg/max/mdev = 0.092/0.094/0.101/0.009 ms
-- No host02
$ ping -c 4 host02PING host01 (192.168.100.2) 56(84) bytes of data.64 bytes from host02 (192.168.100.2): icmp_seq=1 ttl=64 time=0.102 ms64 bytes from host02 (192.168.100.2): icmp_seq=2 ttl=64 time=0.092 ms64 bytes from host02 (192.168.100.2): icmp_seq=3 ttl=64 time=0.091 ms64 bytes from host02 (192.168.100.2): icmp_seq=4 ttl=64 time=0.090 ms--- host02 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3999msrtt min/avg/max/mdev = 0.090/0.093/0.102/0.009 msErro Conhecido
Um erro comum na configuração de rede é observado com o comando "ping", quando algo estiver errado, o retorno do comando é parecido com o descrito abaixo:
$ ping -c 4 host01ping: unknown host host01Ou também:
$ ping -c 4 host01PING host01 (10.60.100.1) 56(84) bytes of data.From 10.60.100.1 icmp_seq=1 Destination Host UnreachableFrom 10.60.100.1 icmp_seq=2 Destination Host UnreachableFrom 10.60.100.1 icmp_seq=3 Destination Host UnreachableFrom 10.60.100.1 icmp_seq=4 Destination Host Unreachable--- 10.60.100.1 ping statistics ---4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3003ms, pipe 3Caso ocorra algum dos erros demonstrados acima, refaça a configuração de rede com atenção, verifique a parte física e lógica (se necessário for).
1.3. CONFIGURAÇÃO DO ORACLE NET SERVICE
O Oracle Net Service pode ser configurado editando ou criando os arquivos listener.ora e tnsnames.ora.
Configurando o arquivo $ORACLE_HOME/network/admin/listener.ora
-- No host01
LISTENER = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC) # conexao local (KEY = KEYPROD) # chave ) (ADDRESS = (PROTOCOL = TCP) # protocolo (HOST = host01) # ip (PORT = 1521) # porta ) )SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = primarydb_DGMGRL) (SERVICE_NAME = prod) (SID_NAME = prod) (ORACLE_HOME = /oracle/11.2.0) ) )-- No host02
LISTENER = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC) # conexao local (KEY = KEYPROD) # chave ) (ADDRESS = (PROTOCOL = TCP) # protocolo (HOST = host02) # ip (PORT = 1521) # porta ) )SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = standbydb_DGMGRL) (SERVICE_NAME = prod) (SID_NAME = prod) (ORACLE_HOME = /oracle/11.2.0) ) )Após a configuração do listener inicie os serviços, conforme exemplo:
$ lsnrctl startLSNRCTL for Linux: Version 11.2.0.1.0 - Production on 22-DEZ-2009 15:28:20Copyright (c) 1991, 2009, Oracle. All rights reserved.Iniciando /oracle/11.2.0/bin/tnslsnr: aguarde...TNSLSNR for Linux: Version 11.2.0.1.0 - ProductionO arquivo de parâmetros do sistema é /oracle/11.2.0/network/admin/listener.oraMensagem de log gravada para /oracle/diag/tnslsnr/host01/listener/alert/log.xmlAtendendo em: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=KEYPROD)))Atendendo em: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host01)(PORT=1521)))Estabelecendo conexão com (ADDRESS=(PROTOCOL=IPC)(KEY=KEYPROD))STATUS do LISTENER------------------------Apelido LISTENERVersão TNSLSNR for Linux: Version 11.2.0.1.0 - ProductionData Inicial 22-DEZ-2009 15:28:20Funcionamento 0 dias 0 hr. 0 min. 0 segNível de Análise offSegurança OFFSNMP OFFArq. Parâm. Listn. /oracle/11.2.0/network/admin/listener.oraArq. Log Listener /oracle/diag/tnslsnr/host01/listener/alert/log.xmlResumo de Atendimento... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=KEYPROD))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host01)(PORT=1521)))Resumo de Serviços...O serviço "primarydb_DGMGRL" tem 1 instância(s). Instância "prod", status UNKNOWN, tem 1 handler(s) para este serviço...O comando foi executado com êxitoEste comando deve retornar o mesmo resultado no host02
-- Em ambos os hosts, adicione a seguinte configuração.
Configurando o arquivo $ORACLE_HOME/network/admin/tnsnames.ora
TNS_PRIMARY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = primarydb_DGMGRL) ) )TNS_STANDBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = host02)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = standbydb_DGMGRL) ) )Após configurado os arquivos listener.ora e tnsnames.ora efetue testes de conectividade utilizando tnsping e sqlplus a fim de dirimir dúvidas quanto ao funcionamento do Oracle Net Services.
2. CONFIGURANDO O BANCO DE DADOS PRIMÁRIO
A configuração a seguir é necessária para o funcionamento do standby.
Conectado como usuário SYS no banco primário, efetue os seguintes procedimentos.
Alterando o parâmetro DB_UNIQUE_NAME
SQL> alter system set db_unique_name = 'primarydb' scope = spfile;Sistema alterado.Criando standby redo log file (verificar o tamanho dos redos antes de criar os standby redos)
SQL> alter database add standby logfile ('/oracle/oradata/prod/redostdby01.rdo') size 50m;Banco de dados alterado.SQL> alter database add standby logfile ('/oracle/oradata/prod/redostdby02.rdo') size 50m;Banco de dados alterado.SQL> alter database add standby logfile ('/oracle/oradata/prod/redostdby03.rdo') size 50m;Banco de dados alterado.Inativando o banco
SQL> shutdown immediate;Banco de dados fechado.Banco de dados desmontado.Instância ORACLE desativada.Iniciando o banco em estado MOUNT
SQL> startup mountInstância ORACLE iniciada.Total System Global Area 196681728 bytesFixed Size 1335444 bytesVariable Size 88084332 bytesDatabase Buffers 104857600 bytesRedo Buffers 2404352 bytesBanco de dados montado.Ativando FORCE LOGGING
SQL> alter database force logging;Banco de dados alterado.Ativando modo ARCHIVELOG (caso esteja inativo)
SQL> alter database archivelog;Banco de dados alterado.Ativando FLASHBACK
SQL> alter database flashback on;Banco de dados alterado.Abrindo o banco de dados
SQL> alter database open;Banco de dados alterado.Ativando o BROKER
SQL> alter system set dg_broker_start = true;Sistema alterado.Gerando archives
SQL> alter system switch logfile;Sistema alterado.SQL> alter system switch logfile;Sistema alterado.É vital o estudo de cada processo executado a fim de compreender a aplicabilidade de cada ação.
3. CONHECENDO A ESTRUTURA DO BANCO DE DADOS PRIMÁRIO
Antes de iniciar o processo de criação do Standby é necessário criar toda a estrutura no host02. Essa estrutura física não é criada pelo Oracle.
Utilize os seguintes procedimentos a fim de verificar a estrutura do banco de dados primário.
SQL> select value from v$parameter where value like '%/oracle/%';VALUE--------------------------------------------------------------------------------/oracle/11.2.0/dbs/spfileprod.ora/oracle/oradata/prod/control01.ctl, /oracle/flash_recovery_area/prod/control02.ctlLOCATION=/oracle/archives/prod/oracle/flash_recovery_area/oracle/diag/rdbms/primarydb/prod/trace/oracle/diag/rdbms/primarydb/prod/trace/oracle/diag/rdbms/primarydb/prod/cdump/oracle/admin/prod/adump/oracle/11.2.0/dbs/dr1primarydb.dat/oracle/11.2.0/dbs/dr2primarydb.dat10 linhas selecionadas.SQL> select name from v$controlfile 2 union all 3 select name from v$tempfile 4 union all 5 select name from v$dbfile 6 union all 7 select member from v$logfile;NAME--------------------------------------------------------------------------------/oracle/oradata/prod/control01.ctl/oracle/flash_recovery_area/prod/control02.ctl/oracle/oradata/prod/temp01.dbf/oracle/oradata/prod/users01.dbf/oracle/oradata/prod/undotbs01.dbf/oracle/oradata/prod/sysaux01.dbf/oracle/oradata/prod/system01.dbf/oracle/oradata/prod/example01.dbf/oracle/oradata/prod/redo03.log/oracle/oradata/prod/redo02.log/oracle/oradata/prod/redo01.log/oracle/oradata/prod/redostdby01.rdo/oracle/oradata/prod/redostdby02.rdo/oracle/oradata/prod/redostdby03.rdo14 linhas selecionadas.Através destas queries, observamos que a estrutura física resume-se em:
/oracle/archives/prod/oracle/flash_recovery_area/prod/oracle/admin/prod/adump/oracle/oradata/prodO procedimento utilizado é só um exemplo, outros procedimentos podem ser utilizados, observando o objetivo que é o conhecimento da estrutura física do banco de dados primário.
Utilize o seguinte comando no host02 para criar a estrutura de diretórios (conectado como usuário oracle).
$ mkdir -pv /oracle/flash_recovery_area/prodmkdir: created directory `/oracle/flash_recovery_area'mkdir: created directory `/oracle/flash_recovery_area/prod'$ mkdir -pv /oracle/admin/prod/adumpmkdir: created directory `/oracle/admin'mkdir: created directory `/oracle/admin/prod'mkdir: created directory `/oracle/admin/prod/adump'$ mkdir -pv /oracle/oradata/prodmkdir: created directory `/oracle/oradata'mkdir: created directory `/oracle/oradata/prod'Analise com cuidado a estrutura física, pois há estruturas diferentes para cada banco de dados.
4. COPIANDO O PASSWORD FILE
Efetua-se a cópia do password file (orapwSID) para o destino a fim de facilitarmos a conexão como usuário SYS.
Efetue a cópia utilizando SCP, RSYNC ou qualquer outro meio disponível para copiar os seguintes arquivos
$ scp $ORACLE_HOME/dbs/orapwprod oracle@host02:$ORACLE_HOME/dbs/orapwprodNeste caso, foi utilizado o comando SCP.
5. INICIANDO A INSTÂNCIA STANDBY
A instância deve ser iniciada no host02 para facilitar o processo. Como não existe o arquivo de parâmetros, simplifica iniciar a instância utilizando o RMAN.
Efetue o seguinte procedimento no host02
$ rman target /Gerenciador de Recuperação: Release 11.2.0.1.0 - Production on Qua Dez 23 11:38:50 2009Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.conectado ao banco de dados de destino (nao iniciado)RMAN> startup nomountfalha na inicializacao: ORA-01078: failure in processing system parametersLRM-00109: nao foi possivel abrir o arquivo de parametros '/oracle/11.2.0/dbs/initprod.ora'iniciando instancia Oracle sem arquivo de parametros para recuperacao de spfileinstancia Oracle iniciadaTotal da Area Global do Sistema 159019008 bytesFixed Size 1335192 bytesVariable Size 75497576 bytesDatabase Buffers 79691776 bytesRedo Buffers 2494464 bytesIniciando uma instância sem o arquivo de parâmetros através do RMAN.
6. CRIANDO O STANDBY COM RMAN
Este procedimento foi simplificado na versão 11 com o parâmetro "FROM ACTIVE DATABASE"; este parâmetro dispensa a necessidade de copiar arquivos para o host do standby.
No host02, efetue os seguintes procedimentos
$ rmanGerenciador de Recuperação: Release 11.2.0.1.0 - Production on Qua Dez 29 11:38:31 2009Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.RMAN> connect target sys/PASSWORD@primarydbconectado ao banco de dados de destino: PROD (DBID=1027552576)RMAN> connect auxiliary sys/PASSWORD@standbydbconectado ao banco de dados auxiliar: DUMMY (não montado)RMAN> duplicate target database2> for standby3> from active database4> dorecover5> spfile6> set db_unique_name="standbydb"7> set log_archive_dest_2="service=tns_standby async register valid_for=(online_logfile,primary_role)"8> set fal_server="tns_primary"9> nofilenamecheck;Iniciando Duplicate Db em 29/12/2009usar o arquivo de controle do banco de dados de destino em vez do catalogo de recuperacaocanal alocado: ORA_AUX_DISK_1canal ORA_AUX_DISK_1: SID=18 tipo de dispositivo=DISKconteudo do Script de Memoria:{ backup as copy reuse targetfile '/oracle/11.2.0/dbs/orapwprod' auxiliary format '/oracle/11.2.0/dbs/orapwprod' targetfile '/oracle/11.2.0/dbs/spfileprod.ora' auxiliary format '/oracle/11.2.0/dbs/spfileprod.ora' ; sql clone "alter system set spfile= ''/oracle/11.2.0/dbs/spfileprod.ora''";}executando Script de MemoriaIniciando backup em 29/12/2009canal alocado: ORA_DISK_1canal ORA_DISK_1: SID=39 tipo de dispositivo=DISKFinalizado backup em 29/12/2009instrucao sql: alter system set spfile= ''/oracle/11.2.0/dbs/spfileprod.ora''conteudo do Script de Memoria:{ sql clone "alter system set db_unique_name = ''standbydb'' comment= '''' scope=spfile"; sql clone "alter system set log_archive_dest_2 = ''service=tns_standby async register valid_for=(online_logfile,primary_role)'' comment= '''' scope=spfile"; sql clone "alter system set fal_server = ''tns_primary'' comment= '''' scope=spfile"; shutdown clone immediate; startup clone nomount;}executando Script de Memoriainstrucao sql: alter system set db_unique_name = ''standbydb'' comment= '''' scope=spfileinstrucao sql: alter system set log_archive_dest_2 = ''service=tns_standby async register valid_for=(online_logfile,primary_role)'' comment= '''' scope=spfileinstrucao sql: alter system set fal_server = ''tns_primary'' comment= '''' scope=spfileencerramento de instancia Oracleconectado ao banco de dados auxiliar (nao iniciado)instancia Oracle iniciadaTotal da Area Global do Sistema 196681728 bytesFixed Size 1335444 bytesVariable Size 121638764 bytesDatabase Buffers 71303168 bytesRedo Buffers 2404352 bytesconteudo do Script de Memoria:{ backup as copy current controlfile for standby auxiliary format '/oracle/oradata/prod/control01.ctl'; restore clone controlfile to '/oracle/flash_recovery_area/prod/control02.ctl' from '/oracle/oradata/prod/control01.ctl';}executando Script de MemoriaIniciando backup em 29/12/2009utilizando o canal ORA_DISK_1canal ORA_DISK_1: iniciando copia de arquivo de dadoscopiando arquivo de controle stand-bynome do arquivo de saida=/oracle/11.2.0/dbs/snapcf_prod.f tag=TAG20091229T171350 RECID=3 STAMP=706900432canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:00:07Finalizado backup em 29/12/2009Iniciando restore em 29/12/2009canal alocado: ORA_AUX_DISK_1canal ORA_AUX_DISK_1: SID=19 tipo de dispositivo=DISKcanal ORA_AUX_DISK_1: copia do arquivo de controle copiadaFinalizado restore em 29/12/2009conteudo do Script de Memoria:{ sql clone 'alter database mount standby database';}executando Script de Memoriainstrucao sql: alter database mount standby databaseRMAN-05538: ADVERTÊNCIA: usando implicitamente DB_FILE_NAME_CONVERTconteudo do Script de Memoria:{ set newname for tempfile 1 to "/oracle/oradata/prod/temp01.dbf"; switch clone tempfile all; set newname for datafile 1 to "/oracle/oradata/prod/system01.dbf"; set newname for datafile 2 to "/oracle/oradata/prod/sysaux01.dbf"; set newname for datafile 3 to "/oracle/oradata/prod/undotbs01.dbf"; set newname for datafile 4 to "/oracle/oradata/prod/users01.dbf"; set newname for datafile 5 to "/oracle/oradata/prod/example01.dbf"; backup as copy reuse datafile 1 auxiliary format "/oracle/oradata/prod/system01.dbf" datafile 2 auxiliary format "/oracle/oradata/prod/sysaux01.dbf" datafile 3 auxiliary format "/oracle/oradata/prod/undotbs01.dbf" datafile 4 auxiliary format "/oracle/oradata/prod/users01.dbf" datafile 5 auxiliary format "/oracle/oradata/prod/example01.dbf" ; sql 'alter system archive log current';}executando Script de Memoriaexecutando comando: SET NEWNAMEarquivo temporario renomeado 1 para /oracle/oradata/prod/temp01.dbf no arquivo de controleexecutando comando: SET NEWNAMEexecutando comando: SET NEWNAMEexecutando comando: SET NEWNAMEexecutando comando: SET NEWNAMEexecutando comando: SET NEWNAMEIniciando backup em 29/12/2009utilizando o canal ORA_DISK_1canal ORA_DISK_1: iniciando copia de arquivo de dadosnumero do arquivo=00001 nome=/oracle/oradata/prod/system01.dbf do arquivo de dados de entradanome do arquivo de saida=/oracle/oradata/prod/system01.dbf tag=TAG20091229T171438canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:05:57canal ORA_DISK_1: iniciando copia de arquivo de dadosnumero do arquivo=00002 nome=/oracle/oradata/prod/sysaux01.dbf do arquivo de dados de entradanome do arquivo de saida=/oracle/oradata/prod/sysaux01.dbf tag=TAG20091229T171438canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:02:34canal ORA_DISK_1: iniciando copia de arquivo de dadosnumero do arquivo=00005 nome=/oracle/oradata/prod/example01.dbf do arquivo de dados de entradanome do arquivo de saida=/oracle/oradata/prod/example01.dbf tag=TAG20091229T171438canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:01:17canal ORA_DISK_1: iniciando copia de arquivo de dadosnumero do arquivo=00003 nome=/oracle/oradata/prod/undotbs01.dbf do arquivo de dados de entradanome do arquivo de saida=/oracle/oradata/prod/undotbs01.dbf tag=TAG20091229T171438canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:00:25canal ORA_DISK_1: iniciando copia de arquivo de dadosnumero do arquivo=00004 nome=/oracle/oradata/prod/users01.dbf do arquivo de dados de entradanome do arquivo de saida=/oracle/oradata/prod/users01.dbf tag=TAG20091229T171438canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:00:07Finalizado backup em 29/12/2009instrucao sql: alter system archive log currentconteudo do Script de Memoria:{ backup as copy reuse archivelog like "/oracle/archives/prod/prod_1_26_706287748.arc" auxiliary format "/oracle/archives/prod/prod_1_26_706287748.arc" ; catalog clone archivelog "/oracle/archives/prod/prod_1_26_706287748.arc"; switch clone datafile all;}executando Script de MemoriaIniciando backup em 29/12/2009utilizando o canal ORA_DISK_1canal ORA_DISK_1: iniciando copia de log arquivadothread do log arquivado de entrada=1 sequencia=26 RECID=36 STAMP=706901106nome do arquivo de saida=/oracle/archives/prod/prod_1_26_706287748.arc RECID=0 STAMP=0canal ORA_DISK_1: copia de log arquivado concluida, tempo decorrido: 00:00:03Finalizado backup em 29/12/2009log arquivado catalogadonome do arquivo de log arquivado=/oracle/archives/prod/prod_1_26_706287748.arc RECID=1 STAMP=706900996arquivo de dados 1 alternado para a copia do arquivo de dadoscopia do arquivo de dados de entrada RECID=3 STAMP=706900998 file name=/oracle/oradata/prod/system01.dbfarquivo de dados 2 alternado para a copia do arquivo de dadoscopia do arquivo de dados de entrada RECID=4 STAMP=706900998 file name=/oracle/oradata/prod/sysaux01.dbfarquivo de dados 3 alternado para a copia do arquivo de dadoscopia do arquivo de dados de entrada RECID=5 STAMP=706900998 file name=/oracle/oradata/prod/undotbs01.dbfarquivo de dados 4 alternado para a copia do arquivo de dadoscopia do arquivo de dados de entrada RECID=6 STAMP=706900998 file name=/oracle/oradata/prod/users01.dbfarquivo de dados 5 alternado para a copia do arquivo de dadoscopia do arquivo de dados de entrada RECID=7 STAMP=706900998 file name=/oracle/oradata/prod/example01.dbfconteudo do Script de Memoria:{ set until scn 849224; recover standby clone database delete archivelog ;}executando Script de Memoriaexecutando comando: SET until clauseIniciando recover em 29/12/2009utilizando o canal ORA_AUX_DISK_1iniciar recuperacao de midiao log arquivado para thread 1 com sequencia 26 ja esta no disco como arquivo /oracle/archives/prod/prod_1_26_706287748.arcnome do arquivo de log arquivado=/oracle/archives/prod/prod_1_26_706287748.arc thread=1 sequencia=26recuperacao da midia concluida, tempo decorrido: 00:00:08Finalizado recover em 29/12/2009Finalizado Duplicate Db em 29/12/2009RMAN>Procedimento para criar o standby utilizando RMAN.
7. CONFIGURANDO O DATA GUARD BROKER
Através desta configuração a manutenção de um standby é, muitas vezes, eliminada. O Broker fica responsável por gerenciar o standby em diversas situações.
Antes de iniciar a configuração do Broker é importante informar que a ferramenta utilizada é o DGMGRL, ferramenta utilizada no shell (ou prompt) para gerenciamento do Broker. As configurações efetuadas através dessa ferramenta são possível utilizando o Grid Control ou Enterprise Manager (EM).
Existe muita documentação a respeito da ferramenta, mas é prático utilizarmos o comando HELP, como demonstrado o help do comando CREATE:
DGMGRL> help createCreate a broker configurationSyntax: CREATE CONFIGURATION <configuration name> AS PRIMARY DATABASE IS <database name> CONNECT IDENTIFIER IS <connect identifier>;DGMGRL>Uma vez conhecida a ferramenta, pode-se dar prosseguimento a configuração do Broker.
Efetue o seguinte procedimento no host01, como usuário oracle.
$ dgmgrlDGMGRL> connect /Connected.DGMGRL> create configuration BROKER as primary database is PRIMARYDB connect identifier is TNS_PRIMARY;Configuracao "broker" criada com o banco de dados principal "primarydb"DGMGRL> add database STANDBYDB as connect identifier is TNS_STANDBY;Banco de dados "standbydb" adicionadoDGMGRL>Procedimento para criar a configuração do Broker adicionando um Standby.
Após criada a configuração inicial, utiliza-se o comando SHOW para verificar se a configuração está correta antes de habilitá-la.
DGMGRL> show configurationConfiguracao - brokerModo de Protecao: MaxPerformanceBancos de Dados:primarydb - Banco de dados principalstandbydb - Banco de dados stand-by fisicoFailover de Inicializacao Rapida: DISABLEDStatus da Configuracao:DISABLEDConforme comando acima, o broker está configurado com um banco de dados primário e um standby físico e a situação da configuração é DISABLED.
A configuração está criada, agora é necessário verificar a configuração dos bancos de dados para validarmos este processo.
DGMGRL> show database primarydbBanco de dados - primarydb Atribuicao: PRIMARY Estado Pretendido: TRANSPORT-ON Instancia(s): prodStatus do Banco de Dados:DISABLEDEste comando não mostra muitas informações a respeito da configuração utilizada para conectar ao banco primário.
Consultando detalhes sobre a configuração do banco de dados
DGMGRL> show database verbose primarydbBanco de dados - primarydb Atribuicao: PRIMARY Estado Pretendido: TRANSPORT-ON Instância(s): prod Propriedades: DGConnectIdentifier = 'tns_primary' ObserverConnectIdentifier = '' LogXptMode = 'ASYNC' DelayMins = '0' Binding = 'optional' MaxFailure = '0' MaxConnections = '1' ReopenSecs = '300' NetTimeout = '30' RedoCompression = 'DISABLE' LogShipping = 'ON' PreferredApplyInstance = '' ApplyInstanceTimeout = '0' ApplyParallel = 'AUTO' StandbyFileManagement = 'MANUAL' ArchiveLagTarget = '0' LogArchiveMaxProcesses = '4' LogArchiveMinSucceedDest = '1' DbFileNameConvert = '' LogFileNameConvert = '' FastStartFailoverTarget = '' StatusReport = '(monitor)' InconsistentProperties = '(monitor)' InconsistentLogXptProps = '(monitor)' SendQEntries = '(monitor)' LogXptStatus = '(monitor)' RecvQEntries = '(monitor)' HostName = 'host01' SidName = 'prod' StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=primarydb_DGMGRL)(INSTANCE_NAME=prod)(SERVER=DEDICATED)))' StandbyArchiveLocation = '/oracle/archives/prod' AlternateLocation = '' LogArchiveTrace = '0' LogArchiveFormat = 'prod_%t_%s_%r.arc' TopWaitEvents = '(monitor)'Status do Banco de Dados:DISABLEDObserve com atenção esta configuração, pois nela está todos os parâmetros que serão utilizados para o transporte de dados e modo de proteção do Standby. O estado deste banco é DISABLED.
Em destaque está a propriedade StaticConnectIdentifier, onde está configurado a string de conexão utilizada. Se houver algo errado neste ponto, pode-se editar essa propriedade a fim de prevenir qualquer problema futuro.
Edição de uma Propriedade
Segue um exemplo de edição de uma propriedade (digamos que a porta do listener para o Standby é a 1522 e temos que alterá-la na configuração do Broker).
DGMGRL> edit database PRIMARYDB set property StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host01)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=primarydb_DGMGRL)(INSTANCE_NAME=prod)(SERVER=DEDICATED)))';A propriedade "staticconnectidentifier" foi atualizada
Como demonstrado, é possível editar uma propriedade do banco para corrigir ou parametrizar corretamente a configuração do Broker.
Verificando as propriedades do banco standby
DGMGRL> show database verbose standbydbBanco de dados - standbydb Atribuicao: PHYSICAL STANDBY Estado Pretendido: APPLY-ON Lag de Transporte: (desconhecido) Lag de Aplicacao: (desconhecido) Consulta em Tempo Real: OFF Instancia(s): prod Propriedades: DGConnectIdentifier = 'tns_standby' ObserverConnectIdentifier = '' LogXptMode = 'ASYNC' DelayMins = '0' Binding = 'optional' MaxFailure = '0' MaxConnections = '1' ReopenSecs = '300' NetTimeout = '30' RedoCompression = 'DISABLE' LogShipping = 'ON' PreferredApplyInstance = '' ApplyInstanceTimeout = '0' ApplyParallel = 'AUTO' StandbyFileManagement = 'MANUAL' ArchiveLagTarget = '0' LogArchiveMaxProcesses = '4' LogArchiveMinSucceedDest = '1' DbFileNameConvert = '' LogFileNameConvert = '' FastStartFailoverTarget = '' StatusReport = '(monitor)' InconsistentProperties = '(monitor)' InconsistentLogXptProps = '(monitor)' SendQEntries = '(monitor)' LogXptStatus = '(monitor)' RecvQEntries = '(monitor)' HostName = 'angelica' SidName = 'prd1' StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host02)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=standbydb_DGMGRL)(INSTANCE_NAME=prod)(SERVER=DEDICATED)))' StandbyArchiveLocation = '/oracle/archives/prod' AlternateLocation = '' LogArchiveTrace = '0' LogArchiveFormat = 'prod_%t_%s_%r.arc' TopWaitEvents = '(monitor)'Status do Banco de Dados:DISABLEDConfirme a string de conexão e altere se for necessário.
Ambos os bancos estão com estado DISABLED, o que indica que a configuração ainda não foi habilitada.
Habilitando a configuração do Broker.
DGMGRL> enable configurationAtivado.Habilitar a configuração do Broker é uma tarefa simples.Após habilitada a configuração é necessário verificar se está tudo correto.DGMGRL> show configurationConfiguracao - broker Modo de Protecao: MaxPerformance Bancos de Dados: primarydb - Banco de dados principal standbydb - Banco de dados stand-by físicoFailover de Inicializacao Rapida: DISABLEDStatus da Configuracao:SUCCESSNesse momento a configuração foi habilitada e o estado da configuração é SUCCESS.
Se alguma configuração do banco de dados contiver erros, o estado será DISABLED. Quando isso ocorrer, a configuração deve ser revista e ajustada.
Verificando a configuração do banco primário
DGMGRL> show database primarydbBanco de dados - primarydb Atribuicao: PRIMARY Estado Pretendido: TRANSPORT-ON Instância(s): prodStatus do Banco de Dados:SUCCESSVerificando a configuração do banco Standby
DGMGRL> show database standbydbBanco de dados - standbydb Atribuicao: PHYSICAL STANDBY Estado Pretendido: APPLY-ON Lag de Transporte: 0 segundos Lag de Aplicacao: 0 segundos Consulta em Tempo Real: OFF Instancia(s): prodStatus do Banco de Dados:SUCCESSSe a configuração estiver correta, todos os estados (da configuração e dos bancos de dados) estarão como SUCCESS.
O Standby está ativo e funcionando.
Antes de continuar estude os modos de proteção de um Standby. Uma boa documentação está em
http://download.oracle.com/docs/cd/E11882_01/server.112/e10700/protection.htm
A configuração básica do Broker está criada e funcionando, e o Standby está ativo e atualizando. Observando a configuração verifica-se que o modo de proteção é MaxPerformance, e precisamos alterar o modo de proteção para MaxAvailability.
Observando a configuração do banco de dados dentro do broker, tem-se a propriedade LogXptMode como ASYNC, o que indica que o modo de transferência de dados do banco primário para o Standby é assíncrono. Observe
DGMGRL> show database verbose primarydb... LogXptMode = 'ASYNC'...É necessário ajustar essa configuração para SYNC (transferência síncrona).DGMGRL> edit database PRIMARYDB set property LogXptMode = 'SYNC';A propriedade "logxptmode" foi atualizadaDGMGRL> edit database STANDBYDB set property LogXptMode = 'SYNC';A propriedade "logxptmode" foi atualizadaCom as propriedades ajustadas, habilita-se o modo de proteção desejado.DGMGRL> edit configuration set protection mode as maxavailability;Bem-sucedido.Verificando a nova configuraçãoDGMGRL> show configurationConfiguracao - broker Modo de Protecao: MaxAvailability Bancos de Dados: primarydb - Banco de dados principal standbydb - Banco de dados stand-by fisicoFailover de Inicializacao Rapida: DISABLEDStatus da Configuracao:SUCCESSIsso encerra o procedimento de criação e configuração de um banco Standby utilizando Rman e Broker.
[]s
Braga
8. ALERT LOG do Oracle e do Broker
No momento em que a configuração do Broker é habilitada, vários comandos são executados no banco de dados primário e no banco de dados Standby. Esses comandos são consultados nos arquivos alert log, e no mesmo diretório é criado o arquivo drcSID.log, que é o arquivo de log do Broker. Toda e qualquer alteração e/ou manutenção no Broker pode ser consultada no arquivo de log do Broker.
A título de conhecimento, segue os alerts no momento da habilitação da configuração do Broker, retirados do banco de dados Standby.
Alert Log
Mon Jan 29 13:27:05 2009NSV0 started with pid=21, OS id=2604Mon Jan 29 13:27:06 2009RSM0 started with pid=22, OS id=2608ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH SID='prod';ALTER SYSTEM SET log_archive_format='prod_%t_%s_%r.arc' SCOPE=SPFILE SID='prod';ALTER SYSTEM SET standby_file_management='MANUAL' SCOPE=BOTH SID='*';ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH SID='*';ALTER SYSTEM SET log_archive_max_processes=4 SCOPE=BOTH SID='*';ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH SID='*';ALTER SYSTEM SET fal_server='tns_primary' SCOPE=BOTH;RSM0: DB_UNIQUE_NAME attribute is requiredALTER SYSTEM SET log_archive_config='dg_config=(standbydb,primarydb)' SCOPE=BOTH;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILEAttempt to start background Managed Standby Recovery process (prod)Mon Jan 29 13:27:15 2009MRP0 started with pid=27, OS id=2610MRP0: Background Managed Standby Recovery process started (prod)Mon Jan 29 13:27:15 2009RFS[1]: Assigned to RFS process 2612RFS[1]: Identified database type as 'physical standby': Client is LGWR ASYNC pid 3320Primary database is in MAXIMUM PERFORMANCE modeRFS[1]: Selected log 4 for thread 1 sequence 27 dbid 1027552576 branch 706287748Mon Jan 29 13:27:20 2009Archived Log entry 2 added for thread 1 sequence 27 ID 0x3d3f9b40 dest 1:RFS[1]: Selected log 5 for thread 1 sequence 28 dbid 1027552576 branch 706287748Serial Media Recovery startedManaged Standby Recovery starting Real Time ApplyWaiting for all non-current ORLs to be archived...All non-current ORLs have been archived.Media Recovery Log /oracle/archives/prod/prod_1_27_706287748.arcMedia Recovery Waiting for thread 1 sequence 28 (in transit)Recovery of Online Redo Log: Thread 1 Group 5 Seq 28 Reading mem 0 Mem# 0: /oracle/flash_recovery_area/STANDBYDB/onlinelog/o1_mf_5_5mnotp7h_.logMon Jan 29 13:27:22 2009RFS[2]: Assigned to RFS process 2614RFS[2]: Identified database type as 'physical standby': Client is ARCH pid 3194Mon Jan 29 13:27:22 2009Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILEMon Jan 29 13:27:27 2009Archived Log entry 3 added for thread 1 sequence 28 ID 0x3d3f9b40 dest 1:Mon Jan 29 13:27:27 2009RFS[1]: Selected log 4 for thread 1 sequence 29 dbid 1027552576 branch 706287748Mon Jan 29 13:27:29 2009Media Recovery Waiting for thread 1 sequence 29 (in transit)Recovery of Online Redo Log: Thread 1 Group 4 Seq 29 Reading mem 0 Mem# 0: /oracle/flash_recovery_area/STANDBYDB/onlinelog/o1_mf_4_5mnotm0x_.logBroker log2010-01-04 13:27:13.157 DRCX: Start receiving metadata file: "/oracle/11.2.0/dbs/dr1standbydb.dat"2010-01-04 13:27:13.277 DRCX: Receiving block #1 (containing Seq.MIV = 0.9), 3 blocks2010-01-04 13:27:13.365 DRCX: End receiving metadata file: opcode CTL_ENABLE (1.1.949394577)2010-01-04 13:27:13.374 DMON: Entered rfm_get_chief_lock() for CTL_ENABLE, reason 12010-01-04 13:27:13.380 DMON: chief lock convert for metadata resynchronization2010-01-04 13:27:13.384 INSV: Received message for inter-instance publication2010-01-04 13:27:13.388 req ID 1.1.949394577, opcode CTL_ENABLE, phase RESYNCH, flags 80052010-01-04 13:27:13.391 DMON: status from posting standby instances for RESYNCH = ORA-000002010-01-04 13:27:13.396 DMON: Metadata available (1.1.949394577), loading from "/oracle/11.2.0/dbs/dr1standbydb.dat"2010-01-04 13:27:13.414 DMON Registering service standbydb_DGB with listener(s)2010-01-04 13:27:13.415 Executing SQL [ALTER SYSTEM REGISTER]2010-01-04 13:27:13.422 SQL [ALTER SYSTEM REGISTER] Executed successfully2010-01-04 13:27:13.531 DMON: ...committing load to memory, Seq.MIV = 0.92010-01-04 13:27:13.531 DMON: Checking critical status of this database.2010-01-04 13:27:13.533 INSV: Reply received for message with2010-01-04 13:27:13.534 req ID 1.1.949394577, opcode CTL_ENABLE, phase RESYNCH2010-01-04 13:27:17.702 DMON: Entered rfm_release_chief_lock() for CTL_ENABLE2010-01-04 13:27:18.108 DMON: Entered rfm_get_chief_lock() for CTL_ENABLE, reason 02010-01-04 13:27:18.108 DMON: chief lock convert for write op CTL_ENABLE2010-01-04 13:27:18.109 DMON: chief lock convert for enable2010-01-04 13:27:18.110 DMON: status from rfi_post_instances() for ENABLE = ORA-000002010-01-04 13:27:18.111 INSV: Received message for inter-instance publication2010-01-04 13:27:18.111 req ID 1.1.949394577, opcode CTL_ENABLE, phase BEGIN, flags 52010-01-04 13:27:18.113 DMON: Entered rfmeexinst for phase 12010-01-04 13:27:18.113 DMON: Instance ID 1 is the broker FSFP HOME instance2010-01-04 13:27:18.113 DMON: Instance ID 1 is the broker health check master2010-01-04 13:27:18.114 INSV: Reply received for message with2010-01-04 13:27:18.115 req ID 1.1.949394577, opcode CTL_ENABLE, phase BEGIN2010-01-04 13:27:18.116 DMON: Entered rfm_release_chief_lock() for CTL_ENABLE2010-01-04 13:27:18.126 DMON: Entered rfm_get_chief_lock() for CTL_ENABLE, reason 02010-01-04 13:27:18.127 DMON: chief lock convert for write op CTL_ENABLE2010-01-04 13:27:18.127 DMON: chief lock convert for enable2010-01-04 13:27:18.128 DMON: status from rfi_post_instances() for ENABLE = ORA-000002010-01-04 13:27:18.130 INSV: Received message for inter-instance publication2010-01-04 13:27:18.130 req ID 1.1.949394577, opcode CTL_ENABLE, phase TEARDOWN, flags 52010-01-04 13:27:18.132 DMON: Entered rfmeexinst for phase 22010-01-04 13:27:18.137 RSM0: Received Set State Request: rid=0x02011001, sid=4, phid=1, econd=7, sitehndl=0x7fffffff2010-01-04 13:27:18.144 RSM0: Received Set State Request: rid=0x02031001, sid=1, phid=1, econd=7, sitehndl=0x7fffffff2010-01-04 13:27:18.147 Redo Apply Resource: SetState ONLINE, phase TEAR-DOWN, External Cond ENABLE2010-01-04 13:27:18.151 RSM0: Received Set State Request: rid=0x02012001, sid=4, phid=1, econd=7, sitehndl=0x7fffffff2010-01-04 13:27:18.152 Database Resource[IAM=PHYSICAL]: SetState PHYSICAL-APPLY-ON, phase TEAR-DOWN, External Cond ENABLE, Target Site Handle 0x7fffffff2010-01-04 13:27:18.152 Database Resource SetState succeeded2010-01-04 13:27:18.155 INSV: Reply received for message with2010-01-04 13:27:18.155 req ID 1.1.949394577, opcode CTL_ENABLE, phase TEARDOWN2010-01-04 13:27:18.158 DMON: Entered rfm_release_chief_lock() for CTL_ENABLE2010-01-04 13:27:18.187 DMON: Entered rfm_get_chief_lock() for CTL_ENABLE, reason 02010-01-04 13:27:18.188 DMON: chief lock convert for write op CTL_ENABLE2010-01-04 13:27:18.188 DMON: chief lock convert for enable2010-01-04 13:27:18.190 DMON: status from rfi_post_instances() for ENABLE = ORA-000002010-01-04 13:27:18.191 INSV: Received message for inter-instance publication2010-01-04 13:27:18.191 req ID 1.1.949394577, opcode CTL_ENABLE, phase BUILDUP, flags 52010-01-04 13:27:18.192 DMON: Entered rfmeexinst for phase 42010-01-04 13:27:18.194 IsCritical value is FALSE.2010-01-04 13:27:18.262 RSM0: Received Set State Request: rid=0x02012001, sid=4, phid=2, econd=7, sitehndl=0x7fffffff2010-01-04 13:27:18.262 Database Resource[IAM=PHYSICAL]: SetState PHYSICAL-APPLY-ON, phase BUILD-UP, External Cond ENABLE, Target Site Handle 0x7fffffff2010-01-04 13:27:18.275 Executing SQL [ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH sid='prod']2010-01-04 13:27:18.299 SQL [ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH sid='prod'] Executed successfully2010-01-04 13:27:18.300 Executing SQL [ALTER SYSTEM SET log_archive_format='prod_%t_%s_%r.arc' SCOPE=SPFILE sid='prod']2010-01-04 13:27:18.387 SQL [ALTER SYSTEM SET log_archive_format='prod_%t_%s_%r.arc' SCOPE=SPFILE sid='prod'] Executed successfully2010-01-04 13:27:18.423 Executing SQL [ALTER SYSTEM SET standby_file_management='MANUAL' SCOPE=BOTH sid='*']2010-01-04 13:27:18.445 SQL [ALTER SYSTEM SET standby_file_management='MANUAL' SCOPE=BOTH sid='*'] Executed successfully2010-01-04 13:27:18.461 Executing SQL [ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH sid='*']2010-01-04 13:27:18.478 SQL [ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH sid='*'] Executed successfully2010-01-04 13:27:18.494 Executing SQL [ALTER SYSTEM SET log_archive_max_processes=4 SCOPE=BOTH sid='*']2010-01-04 13:27:18.510 SQL [ALTER SYSTEM SET log_archive_max_processes=4 SCOPE=BOTH sid='*'] Executed successfully2010-01-04 13:27:18.528 Executing SQL [ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH sid='*']2010-01-04 13:27:18.543 SQL [ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH sid='*'] Executed successfully2010-01-04 13:27:18.590 Executing SQL [ALTER SYSTEM SET fal_server='tns_primary']2010-01-04 13:27:18.607 SQL [ALTER SYSTEM SET fal_server='tns_primary'] Executed successfully2010-01-04 13:27:18.610 Database Resource SetState succeeded2010-01-04 13:27:18.614 RSM0: Received Set State Request: rid=0x02031001, sid=1, phid=2, econd=7, sitehndl=0x7fffffff2010-01-04 13:27:18.615 Redo Apply Resource: SetState ONLINE, phase BUILD-UP, External Cond ENABLE2010-01-04 13:27:18.619 INSV: Reply received for message with2010-01-04 13:27:18.620 req ID 1.1.949394577, opcode CTL_ENABLE, phase BUILDUP2010-01-04 13:27:18.620 DMON: Entered rfm_release_chief_lock() for CTL_ENABLE2010-01-04 13:27:20.746 DMON: Entered rfm_get_chief_lock() for CTL_ENABLE, reason 02010-01-04 13:27:20.747 DMON: chief lock convert for write op CTL_ENABLE2010-01-04 13:27:20.748 DMON: chief lock convert for enable2010-01-04 13:27:20.749 INSV: Received message for inter-instance publication2010-01-04 13:27:20.750 req ID 1.1.949394577, opcode CTL_ENABLE, phase END, flags 52010-01-04 13:27:20.751 DMON: status from rfi_post_instances() for ENABLE = ORA-000002010-01-04 13:27:20.752 rfm_inst_phase_dispatch 16 END phase processing2010-01-04 13:27:20.752 INSV: Reply received for message with2010-01-04 13:27:20.753 req ID 1.1.949394577, opcode CTL_ENABLE, phase END2010-01-04 13:27:20.756 DMON: Entered rfm_release_chief_lock() for CTL_ENABLEObservando os comandos efetuados no banco de dados Standby, observa-se todos os comandos que foram executados e se houveram erros nessa configuração.
ERROS
Quando criar uma tablespace em produção e ocorrer o seguinte erro no alert log do standby:
Thu Mar 18 14:16:14 2010File #141 added to control file as 'UNNAMED00141' becausethe parameter STANDBY_FILE_MANAGEMENT is set to MANUALThe file should be manually created to continue.MRP0: Background Media Recovery terminated with error 1274Errors in file /oracle/diag/rdbms/standbydb/prod/trace/prod_pr00_13664.trc:ORA-01274: não é possível adicionar o arquivo de dados '/oracle/oradata/prod/teste.dbf' - o arquivo não pôde ser criadoManaged Standby Recovery not using Real Time ApplyRecovery interrupted!Recovered data files to a consistent state at change 1950841664Errors in file /oracle/diag/rdbms/standbydb/prod/trace/prod_pr00_13664.trc:ORA-01274: não é possível adicionar o arquivo de dados '/oracle/oradata/prod/teste.dbf' - o arquivo não pôde ser criadoThu Mar 18 14:16:15 2010MRP0: Background Media Recovery process shutdown (prod)Execute o seguinte procedimento, no standby:
$ sqlplus /nologSQL> conn / as sysdbaConectado.SQL> select name from v$dbfile;NAME--------------------------------------------------------------------------------/oracle/oradata/prod/system01.dbf/oracle/oradata/prod/sysaux01.dbf/oracle/oradata/prod/undo01.dbf/oracle/11.2.0/dbs/UNNAMED0044 linhas selecionadas.-- Observa-se um datafile diferente utilizando UNNAMED004
Execute:
SQL> alter database create datafile '/oracle/11.2.0/dbs/UNNAMED00141' as '/oracle/oradata/prod/teste.dbf';Banco de dados alterado.SQL> alter database recover managed standby database disconnect from session;Banco de dados alterado.-- Criando o datafile no standby e iniciando o serviço do data guard.
No log do standby, observa-se a seguinte ocorrência:
Thu Mar 18 14:26:20 2010alter database create datafile '/oracle/11.2.0/dbs/UNNAMED00141' as '/oracle/oradata/prod/teste.dbf'Completed: alter database create datafile '/oracle/11.2.0/dbs/UNNAMED00141' as '/oracle/oradata/prod/teste.dbf'Thu Mar 18 14:29:53 2010alter database recover managed standby database using current logfile disconnect from sessionAttempt to start background Managed Standby Recovery process (prd1)Thu Mar 18 14:29:53 2010MRP0 started with pid=33, OS id=23220MRP0: Background Managed Standby Recovery process started (prd1) started logmerger process-- Indicação de que todo o procedimento ocorreu sem problemas.
Marcos Aurélio Braga
OCA - Oracle Database 10g Administrator