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/hosts
192.168.100.1 host01
192.168.100.2 host02
Essa configuração é efetuada com o usuário root.
Teste a configuração de rede utilizando os seguintes procedimentos:
-- No host01
$ ping -c 4 host01
PING 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 ms
64 bytes from host01 (192.168.100.1): icmp_seq=2 ttl=64 time=0.093 ms
64 bytes from host01 (192.168.100.1): icmp_seq=3 ttl=64 time=0.093 ms
64 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 3999ms
rtt min/avg/max/mdev = 0.092/0.094/0.101/0.009 ms
-- No host02
$ ping -c 4 host02
PING 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 ms
64 bytes from host02 (192.168.100.2): icmp_seq=2 ttl=64 time=0.092 ms
64 bytes from host02 (192.168.100.2): icmp_seq=3 ttl=64 time=0.091 ms
64 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 3999ms
rtt min/avg/max/mdev = 0.090/0.093/0.102/0.009 ms
Erro 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 host01
ping: unknown host host01
Ou também:
$ ping -c 4 host01
PING host01 (10.60.100.1) 56(84) bytes of data.
From 10.60.100.1 icmp_seq=1 Destination Host Unreachable
From 10.60.100.1 icmp_seq=2 Destination Host Unreachable
From 10.60.100.1 icmp_seq=3 Destination Host Unreachable
From 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 3
Caso 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 start
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 22-DEZ-2009 15:28:20
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Iniciando /oracle/11.2.0/bin/tnslsnr: aguarde...
TNSLSNR for Linux: Version 11.2.0.1.0 - Production
O arquivo de parâmetros do sistema é /oracle/11.2.0/network/admin/listener.ora
Mensagem de log gravada para /oracle/diag/tnslsnr/host01/listener/alert/log.xml
Atendendo 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 LISTENER
Versão TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Data Inicial 22-DEZ-2009 15:28:20
Funcionamento 0 dias 0 hr. 0 min. 0 seg
Nível de Análise off
Segurança OFF
SNMP OFF
Arq. Parâm. Listn. /oracle/11.2.0/network/admin/listener.ora
Arq. Log Listener /oracle/diag/tnslsnr/host01/listener/alert/log.xml
Resumo 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 êxito
Este 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 mount
Instância ORACLE iniciada.
Total System Global Area 196681728 bytes
Fixed Size 1335444 bytes
Variable Size 88084332 bytes
Database Buffers 104857600 bytes
Redo Buffers 2404352 bytes
Banco 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.ctl
LOCATION=/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.dat
10 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.rdo
14 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/prod
O 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/prod
mkdir: created directory `/oracle/flash_recovery_area'
mkdir: created directory `/oracle/flash_recovery_area/prod'
$ mkdir -pv /oracle/admin/prod/adump
mkdir: created directory `/oracle/admin'
mkdir: created directory `/oracle/admin/prod'
mkdir: created directory `/oracle/admin/prod/adump'
$ mkdir -pv /oracle/oradata/prod
mkdir: 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/orapwprod
Neste 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 2009
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
conectado ao banco de dados de destino (nao iniciado)
RMAN> startup nomount
falha na inicializacao: ORA-01078: failure in processing system parameters
LRM-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 spfile
instancia Oracle iniciada
Total da Area Global do Sistema 159019008 bytes
Fixed Size 1335192 bytes
Variable Size 75497576 bytes
Database Buffers 79691776 bytes
Redo Buffers 2494464 bytes
Iniciando 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
$ rman
Gerenciador de Recuperação: Release 11.2.0.1.0 - Production on Qua Dez 29 11:38:31 2009
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
RMAN> connect target sys/PASSWORD@primarydb
conectado ao banco de dados de destino: PROD (DBID=1027552576)
RMAN> connect auxiliary sys/PASSWORD@standbydb
conectado ao banco de dados auxiliar: DUMMY (não montado)
RMAN> duplicate target database
2> for standby
3> from active database
4> dorecover
5> spfile
6> 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/2009
usar o arquivo de controle do banco de dados de destino em vez do catalogo de recuperacao
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=18 tipo de dispositivo=DISK
conteudo 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 Memoria
Iniciando backup em 29/12/2009
canal alocado: ORA_DISK_1
canal ORA_DISK_1: SID=39 tipo de dispositivo=DISK
Finalizado backup em 29/12/2009
instrucao 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 Memoria
instrucao sql: alter system set db_unique_name = ''standbydb'' comment= '''' scope=spfile
instrucao sql: alter system set log_archive_dest_2 = ''service=tns_standby async register valid_for=(online_logfile,primary_role)'' comment= '''' scope=spfile
instrucao sql: alter system set fal_server = ''tns_primary'' comment= '''' scope=spfile
encerramento de instancia Oracle
conectado ao banco de dados auxiliar (nao iniciado)
instancia Oracle iniciada
Total da Area Global do Sistema 196681728 bytes
Fixed Size 1335444 bytes
Variable Size 121638764 bytes
Database Buffers 71303168 bytes
Redo Buffers 2404352 bytes
conteudo 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 Memoria
Iniciando backup em 29/12/2009
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando copia de arquivo de dados
copiando arquivo de controle stand-by
nome do arquivo de saida=/oracle/11.2.0/dbs/snapcf_prod.f tag=TAG20091229T171350 RECID=3 STAMP=706900432
canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:00:07
Finalizado backup em 29/12/2009
Iniciando restore em 29/12/2009
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=19 tipo de dispositivo=DISK
canal ORA_AUX_DISK_1: copia do arquivo de controle copiada
Finalizado restore em 29/12/2009
conteudo do Script de Memoria:
{
sql clone 'alter database mount standby database';
}
executando Script de Memoria
instrucao sql: alter database mount standby database
RMAN-05538: ADVERTÊNCIA: usando implicitamente DB_FILE_NAME_CONVERT
conteudo 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 Memoria
executando comando: SET NEWNAME
arquivo temporario renomeado 1 para /oracle/oradata/prod/temp01.dbf no arquivo de controle
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
Iniciando backup em 29/12/2009
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando copia de arquivo de dados
numero do arquivo=00001 nome=/oracle/oradata/prod/system01.dbf do arquivo de dados de entrada
nome do arquivo de saida=/oracle/oradata/prod/system01.dbf tag=TAG20091229T171438
canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:05:57
canal ORA_DISK_1: iniciando copia de arquivo de dados
numero do arquivo=00002 nome=/oracle/oradata/prod/sysaux01.dbf do arquivo de dados de entrada
nome do arquivo de saida=/oracle/oradata/prod/sysaux01.dbf tag=TAG20091229T171438
canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:02:34
canal ORA_DISK_1: iniciando copia de arquivo de dados
numero do arquivo=00005 nome=/oracle/oradata/prod/example01.dbf do arquivo de dados de entrada
nome do arquivo de saida=/oracle/oradata/prod/example01.dbf tag=TAG20091229T171438
canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:01:17
canal ORA_DISK_1: iniciando copia de arquivo de dados
numero do arquivo=00003 nome=/oracle/oradata/prod/undotbs01.dbf do arquivo de dados de entrada
nome do arquivo de saida=/oracle/oradata/prod/undotbs01.dbf tag=TAG20091229T171438
canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:00:25
canal ORA_DISK_1: iniciando copia de arquivo de dados
numero do arquivo=00004 nome=/oracle/oradata/prod/users01.dbf do arquivo de dados de entrada
nome do arquivo de saida=/oracle/oradata/prod/users01.dbf tag=TAG20091229T171438
canal ORA_DISK_1: copia de arquivo de dados concluida; tempo decorrido: 00:00:07
Finalizado backup em 29/12/2009
instrucao sql: alter system archive log current
conteudo 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 Memoria
Iniciando backup em 29/12/2009
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando copia de log arquivado
thread do log arquivado de entrada=1 sequencia=26 RECID=36 STAMP=706901106
nome do arquivo de saida=/oracle/archives/prod/prod_1_26_706287748.arc RECID=0 STAMP=0
canal ORA_DISK_1: copia de log arquivado concluida, tempo decorrido: 00:00:03
Finalizado backup em 29/12/2009
log arquivado catalogado
nome do arquivo de log arquivado=/oracle/archives/prod/prod_1_26_706287748.arc RECID=1 STAMP=706900996
arquivo de dados 1 alternado para a copia do arquivo de dados
copia do arquivo de dados de entrada RECID=3 STAMP=706900998 file name=/oracle/oradata/prod/system01.dbf
arquivo de dados 2 alternado para a copia do arquivo de dados
copia do arquivo de dados de entrada RECID=4 STAMP=706900998 file name=/oracle/oradata/prod/sysaux01.dbf
arquivo de dados 3 alternado para a copia do arquivo de dados
copia do arquivo de dados de entrada RECID=5 STAMP=706900998 file name=/oracle/oradata/prod/undotbs01.dbf
arquivo de dados 4 alternado para a copia do arquivo de dados
copia do arquivo de dados de entrada RECID=6 STAMP=706900998 file name=/oracle/oradata/prod/users01.dbf
arquivo de dados 5 alternado para a copia do arquivo de dados
copia do arquivo de dados de entrada RECID=7 STAMP=706900998 file name=/oracle/oradata/prod/example01.dbf
conteudo do Script de Memoria:
{
set until scn 849224;
recover
standby
clone database
delete archivelog
;
}
executando Script de Memoria
executando comando: SET until clause
Iniciando recover em 29/12/2009
utilizando o canal ORA_AUX_DISK_1
iniciar recuperacao de midia
o log arquivado para thread 1 com sequencia 26 ja esta no disco como arquivo /oracle/archives/prod/prod_1_26_706287748.arc
nome do arquivo de log arquivado=/oracle/archives/prod/prod_1_26_706287748.arc thread=1 sequencia=26
recuperacao da midia concluida, tempo decorrido: 00:00:08
Finalizado recover em 29/12/2009
Finalizado Duplicate Db em 29/12/2009
RMAN>
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 create
Create a broker configuration
Syntax:
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.
$ dgmgrl
DGMGRL> 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" adicionado
DGMGRL>
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 configuration
Configuracao - broker
Modo de Protecao: MaxPerformance
Bancos de Dados:
primarydb - Banco de dados principal
standbydb - Banco de dados stand-by fisico
Failover de Inicializacao Rapida: DISABLED
Status da Configuracao:
DISABLED
Conforme 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 primarydb
Banco de dados - primarydb
Atribuicao: PRIMARY
Estado Pretendido: TRANSPORT-ON
Instancia(s):
prod
Status do Banco de Dados:
DISABLED
Este 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 primarydb
Banco 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:
DISABLED
Observe 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 standbydb
Banco 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:
DISABLED
Confirme 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 configuration
Ativado.
Habilitar a configuração do Broker é uma tarefa simples.
Após habilitada a configuração é necessário verificar se está tudo correto.
DGMGRL> show configuration
Configuracao - broker
Modo de Protecao: MaxPerformance
Bancos de Dados:
primarydb - Banco de dados principal
standbydb - Banco de dados stand-by físico
Failover de Inicializacao Rapida: DISABLED
Status da Configuracao:
SUCCESS
Nesse 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 primarydb
Banco de dados - primarydb
Atribuicao: PRIMARY
Estado Pretendido: TRANSPORT-ON
Instância(s):
prod
Status do Banco de Dados:
SUCCESS
Verificando a configuração do banco Standby
DGMGRL> show database standbydb
Banco 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):
prod
Status do Banco de Dados:
SUCCESS
Se 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 atualizada
DGMGRL> edit database STANDBYDB set property LogXptMode = 'SYNC';
A propriedade "logxptmode" foi atualizada
Com 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ção
DGMGRL> show configuration
Configuracao - broker
Modo de Protecao: MaxAvailability
Bancos de Dados:
primarydb - Banco de dados principal
standbydb - Banco de dados stand-by fisico
Failover de Inicializacao Rapida: DISABLED
Status da Configuracao:
SUCCESS
Isso 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 2009
NSV0 started with pid=21, OS id=2604
Mon Jan 29 13:27:06 2009
RSM0 started with pid=22, OS id=2608
ALTER 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 required
ALTER SYSTEM SET log_archive_config='dg_config=(standbydb,primarydb)' SCOPE=BOTH;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILE
Attempt to start background Managed Standby Recovery process (prod)
Mon Jan 29 13:27:15 2009
MRP0 started with pid=27, OS id=2610
MRP0: Background Managed Standby Recovery process started (prod)
Mon Jan 29 13:27:15 2009
RFS[1]: Assigned to RFS process 2612
RFS[1]: Identified database type as 'physical standby': Client is LGWR ASYNC pid 3320
Primary database is in MAXIMUM PERFORMANCE mode
RFS[1]: Selected log 4 for thread 1 sequence 27 dbid 1027552576 branch 706287748
Mon Jan 29 13:27:20 2009
Archived 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 706287748
Serial Media Recovery started
Managed Standby Recovery starting Real Time Apply
Waiting 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.arc
Media 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_.log
Mon Jan 29 13:27:22 2009
RFS[2]: Assigned to RFS process 2614
RFS[2]: Identified database type as 'physical standby': Client is ARCH pid 3194
Mon Jan 29 13:27:22 2009
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILE
Mon Jan 29 13:27:27 2009
Archived Log entry 3 added for thread 1 sequence 28 ID 0x3d3f9b40 dest 1:
Mon Jan 29 13:27:27 2009
RFS[1]: Selected log 4 for thread 1 sequence 29 dbid 1027552576 branch 706287748
Mon Jan 29 13:27:29 2009
Media 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_.log
Broker log
2010-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 blocks
2010-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 1
2010-01-04 13:27:13.380 DMON: chief lock convert for metadata resynchronization
2010-01-04 13:27:13.384 INSV: Received message for inter-instance publication
2010-01-04 13:27:13.388 req ID 1.1.949394577, opcode CTL_ENABLE, phase RESYNCH, flags 8005
2010-01-04 13:27:13.391 DMON: status from posting standby instances for RESYNCH = ORA-00000
2010-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 successfully
2010-01-04 13:27:13.531 DMON: ...committing load to memory, Seq.MIV = 0.9
2010-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 with
2010-01-04 13:27:13.534 req ID 1.1.949394577, opcode CTL_ENABLE, phase RESYNCH
2010-01-04 13:27:17.702 DMON: Entered rfm_release_chief_lock() for CTL_ENABLE
2010-01-04 13:27:18.108 DMON: Entered rfm_get_chief_lock() for CTL_ENABLE, reason 0
2010-01-04 13:27:18.108 DMON: chief lock convert for write op CTL_ENABLE
2010-01-04 13:27:18.109 DMON: chief lock convert for enable
2010-01-04 13:27:18.110 DMON: status from rfi_post_instances() for ENABLE = ORA-00000
2010-01-04 13:27:18.111 INSV: Received message for inter-instance publication
2010-01-04 13:27:18.111 req ID 1.1.949394577, opcode CTL_ENABLE, phase BEGIN, flags 5
2010-01-04 13:27:18.113 DMON: Entered rfmeexinst for phase 1
2010-01-04 13:27:18.113 DMON: Instance ID 1 is the broker FSFP HOME instance
2010-01-04 13:27:18.113 DMON: Instance ID 1 is the broker health check master
2010-01-04 13:27:18.114 INSV: Reply received for message with
2010-01-04 13:27:18.115 req ID 1.1.949394577, opcode CTL_ENABLE, phase BEGIN
2010-01-04 13:27:18.116 DMON: Entered rfm_release_chief_lock() for CTL_ENABLE
2010-01-04 13:27:18.126 DMON: Entered rfm_get_chief_lock() for CTL_ENABLE, reason 0
2010-01-04 13:27:18.127 DMON: chief lock convert for write op CTL_ENABLE
2010-01-04 13:27:18.127 DMON: chief lock convert for enable
2010-01-04 13:27:18.128 DMON: status from rfi_post_instances() for ENABLE = ORA-00000
2010-01-04 13:27:18.130 INSV: Received message for inter-instance publication
2010-01-04 13:27:18.130 req ID 1.1.949394577, opcode CTL_ENABLE, phase TEARDOWN, flags 5
2010-01-04 13:27:18.132 DMON: Entered rfmeexinst for phase 2
2010-01-04 13:27:18.137 RSM0: Received Set State Request: rid=0x02011001, sid=4, phid=1, econd=7, sitehndl=0x7fffffff
2010-01-04 13:27:18.144 RSM0: Received Set State Request: rid=0x02031001, sid=1, phid=1, econd=7, sitehndl=0x7fffffff
2010-01-04 13:27:18.147 Redo Apply Resource: SetState ONLINE, phase TEAR-DOWN, External Cond ENABLE
2010-01-04 13:27:18.151 RSM0: Received Set State Request: rid=0x02012001, sid=4, phid=1, econd=7, sitehndl=0x7fffffff
2010-01-04 13:27:18.152 Database Resource[IAM=PHYSICAL]: SetState PHYSICAL-APPLY-ON, phase TEAR-DOWN, External Cond ENABLE, Target Site Handle 0x7fffffff
2010-01-04 13:27:18.152 Database Resource SetState succeeded
2010-01-04 13:27:18.155 INSV: Reply received for message with
2010-01-04 13:27:18.155 req ID 1.1.949394577, opcode CTL_ENABLE, phase TEARDOWN
2010-01-04 13:27:18.158 DMON: Entered rfm_release_chief_lock() for CTL_ENABLE
2010-01-04 13:27:18.187 DMON: Entered rfm_get_chief_lock() for CTL_ENABLE, reason 0
2010-01-04 13:27:18.188 DMON: chief lock convert for write op CTL_ENABLE
2010-01-04 13:27:18.188 DMON: chief lock convert for enable
2010-01-04 13:27:18.190 DMON: status from rfi_post_instances() for ENABLE = ORA-00000
2010-01-04 13:27:18.191 INSV: Received message for inter-instance publication
2010-01-04 13:27:18.191 req ID 1.1.949394577, opcode CTL_ENABLE, phase BUILDUP, flags 5
2010-01-04 13:27:18.192 DMON: Entered rfmeexinst for phase 4
2010-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=0x7fffffff
2010-01-04 13:27:18.262 Database Resource[IAM=PHYSICAL]: SetState PHYSICAL-APPLY-ON, phase BUILD-UP, External Cond ENABLE, Target Site Handle 0x7fffffff
2010-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 successfully
2010-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 successfully
2010-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 successfully
2010-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 successfully
2010-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 successfully
2010-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 successfully
2010-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 successfully
2010-01-04 13:27:18.610 Database Resource SetState succeeded
2010-01-04 13:27:18.614 RSM0: Received Set State Request: rid=0x02031001, sid=1, phid=2, econd=7, sitehndl=0x7fffffff
2010-01-04 13:27:18.615 Redo Apply Resource: SetState ONLINE, phase BUILD-UP, External Cond ENABLE
2010-01-04 13:27:18.619 INSV: Reply received for message with
2010-01-04 13:27:18.620 req ID 1.1.949394577, opcode CTL_ENABLE, phase BUILDUP
2010-01-04 13:27:18.620 DMON: Entered rfm_release_chief_lock() for CTL_ENABLE
2010-01-04 13:27:20.746 DMON: Entered rfm_get_chief_lock() for CTL_ENABLE, reason 0
2010-01-04 13:27:20.747 DMON: chief lock convert for write op CTL_ENABLE
2010-01-04 13:27:20.748 DMON: chief lock convert for enable
2010-01-04 13:27:20.749 INSV: Received message for inter-instance publication
2010-01-04 13:27:20.750 req ID 1.1.949394577, opcode CTL_ENABLE, phase END, flags 5
2010-01-04 13:27:20.751 DMON: status from rfi_post_instances() for ENABLE = ORA-00000
2010-01-04 13:27:20.752 rfm_inst_phase_dispatch 16 END phase processing
2010-01-04 13:27:20.752 INSV: Reply received for message with
2010-01-04 13:27:20.753 req ID 1.1.949394577, opcode CTL_ENABLE, phase END
2010-01-04 13:27:20.756 DMON: Entered rfm_release_chief_lock() for CTL_ENABLE
Observando 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 2010
File #141 added to control file as 'UNNAMED00141' because
the parameter STANDBY_FILE_MANAGEMENT is set to MANUAL
The file should be manually created to continue.
MRP0: Background Media Recovery terminated with error 1274
Errors 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 criado
Managed Standby Recovery not using Real Time Apply
Recovery interrupted!
Recovered data files to a consistent state at change 1950841664
Errors 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 criado
Thu Mar 18 14:16:15 2010
MRP0: Background Media Recovery process shutdown (prod)
Execute o seguinte procedimento, no standby:
$ sqlplus /nolog
SQL> conn / as sysdba
Conectado.
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/UNNAMED004
4 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 2010
alter 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 2010
alter database recover managed standby database using current logfile disconnect from session
Attempt to start background Managed Standby Recovery process (prd1)
Thu Mar 18 14:29:53 2010
MRP0 started with pid=33, OS id=23220
MRP0: 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