quinta-feira, 26 de dezembro de 2013

Dataguard - Part 2 - Criando o Standby Database

Segue a seguir um pequeno roteiro para montar o banco de standby, o documento se seguido completo é possivel iniciar uma nova instancia de standby, porém a ideia é demonstrar os passos necessários, o metodo pode variar bastante de acordo com o ambiente e o DBA.

1. Pre-requisitos - Preparando a infra-estrutura


1.1 Primary Database

  • Archive log, o banco de dados de produção deve estar obrigatóriamente em modo de archivelog.
SQL> select log_mode from v$database;

LOG_MODE
------------
ARCHIVELOG

  • Force Logging, deve-se habilitar o force logging de acordo com o procedimento a seguir:
SQL> ALTER DATABASE FORCE LOGGING; 
  •  Standby Redologs, este passo é opcional caso estiver configurando um dataguard com protection mode em max performance
alter database add standby logfile '+DG_FRA' size 50m;
  •  Iniciar instancia com spfile, obrigatório para o duplicate.
SQL> show parameter spfile;

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
spfile                     string     /oracle/app/oracle/product/11.
                         2.0.3/db_1/dbs/spfileorcl.ora
  • Password file, deve ser configurado em ambos servidores com a mesma senha
orapwd file=$ORACLE_HOME/dbs/orcl_pwd.ora password=oracle
  • Parametrização, segue os ajustes necessários para configurar o ambiente produtivo
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCLSTBY,ORCL)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles, all_roles)';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=ORCLSTBY NOAFFIRM ASYNC valid_for=(online_logfile,primary_role) db_unique_name=ORCL';
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;
alter system set FAL_SERVER=ORCLSTBY;
alter system set FAL_CLIENT=ORCL;
  • Oracle Network

Listener

ADR_BASE_LISTENER_ORCL = /oracle/app/oracle

SID_LIST_LISTENER_ORCL =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME = orclstdby)
     (ORACLE_HOME = /oracle/app/oracle/product/11.2.0.3/db_1)
     (SID_NAME = orclstdby)
    )
   )

LISTENER_ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = os-indaia-orcl-stb)(PORT = 1523))
  ) 

Tnsnames

ORCLSTDBY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = os-indaia-orcl-stb)(PORT = 1523))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCLSTBY)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = os-indaia-orcl-prod)(PORT = 1523))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

1.2 Standby Database


  • Password File - Quando ser faz um duplicate from active (o qual irei utilizar), é obrigatório que o password file contenha a mesma senha da produção, portanto uma boa pratica é copia-lo, porém deve ser renomeado da seguinte forma: $ORACLE_HOME/dbs/orapw
 [oracle@os-indaia-orcl-prod dbs]$ scp orcl_pwd.ora oracle@os-indaia-orcl-stb:/oracle/app/oracle/product/11.2.0.3/db_1/dbs

[oracle@os-indaia-orcl-stb dbs]$ cp orcl_pwd.ora orapworclstby

  • Parametrização Standby, Criar o arquivo de inicialização (pfile) configurado para standby
DB_NAME=orclstby
DB_UNIQUE_NAME=orcl
DB_BLOCK_SIZE=8192
remote_login_passwordfile=exclusive
sec_case_sensitive_logon=FALSE

  • Diretórios,  como o rman não criar as estruturas de diretórios é necessário fazer isto manualmente.
  • Configurar arquivos de conexão (tnsnames e listener)
 Listener

ADR_BASE_LISTENER_ORCLSTBY = /oracle/app/oracle

SID_LIST_LISTENER_ORCLSTBY =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME = orclstby)
     (ORACLE_HOME = /oracle/app/oracle/product/11.2.0.3/db_1)
     (SID_NAME = orclstby)
    )
   )

LISTENER_ORCLSTBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = os-indaia-orcl-stb)(PORT = 1523))
  )

Já o tnsnames pode ser utilizado o mesmo da instancia de produção

2. Verificar Conectividade


Realizar o teste em ambos os servidores

sqlplus sys/oracle@orcl as sysdba
sqlplus sys/oracle@orclstby as sysdba

3. Realizar o Duplicate do banco de dados


Pode ser feito tanto atraves do rman quanto de um backup manual , porém o recomendado é sempre RMAN. Com o RMAN temos uma variação enorme de como pode ser feito, no 9i temos que criar o controlfile for standby, já no 10 essa necessidade morreu, e no 11g já temos a possibilidade de fazer o duplicate sem um backup, será este o utilizado neste artigo, porém vou divulgar uma lista com exemplo de possiveis outros duplicates.

rman

connect target sys/oracle@orcl
connect auxiliary sys/oracle@orclstby

run {
allocate channel prmy1 type disk;
allocate auxiliary channel stby type disk;

duplicate target database for standby from active database
spfile
  parameter_value_convert 'orcl','orclstby'
  set db_unique_name='orcl'
  set db_file_name_convert='orcl','orclstby'
  set log_file_name_convert='orcl','orclstby'
  set log_archive_max_processes='5'
  set fal_client='orclstby'
  set fal_server='orcl'
  set standby_file_management='AUTO'
  set log_archive_config='dg_config=(orcl,orclstby)'
  set log_archive_dest_2='service=orcl ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=orcl'
;
}

Ao termino uma mensagem similar a esta deve aparecer indicando o termino com sucesso:

sql statement: alter system archive log current

contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=835194950 file name=+DG_DATA/orcl/datafile/system.262.835194755
datafile 2 switched to datafile copy
input datafile copy RECID=2 STAMP=835194951 file name=+DG_DATA/orcl/datafile/sysaux.261.835194859
datafile 3 switched to datafile copy
input datafile copy RECID=3 STAMP=835194951 file name=+DG_DATA/orcl/datafile/undotbs1.260.835194935
datafile 4 switched to datafile copy
input datafile copy RECID=4 STAMP=835194951 file name=+DG_DATA/orcl/datafile/users.259.835194941
datafile 5 switched to datafile copy
input datafile copy RECID=5 STAMP=835194951 file name=+DG_DATA/orcl/datafile/tbs_reorg.263.835194629
Finished Duplicate Db at 26-DEC-13
released channel: prmy1
released channel: stby


4. Iniciar o recover


Antes de iniciar o recover devemos acertar os parametros do standby, pois caso seja feito um failover/switchover o standby tem que ser capaz de atualizar o outro node novamente:

alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCLSTBY,ORCL)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST, valid_for=(all_logfiles, all_roles)';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=ORCLSTBY NOAFFIRM ASYNC valid_for=(online_logfile,primary_role) db_unique_name=ORCL';
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;
alter system set FAL_SERVER=ORCL;
alter system set FAL_CLIENT=ORCLSTBY;
 

Para iniciar o recover no standby basta usar o comando a seguir:

SQL> alter database recover managed standby database disconnect from session;

Database altered.

 Próximo Passo: Dataguard - Parte 3 - Criando o Dataguard Broker

Nenhum comentário: