sábado, 28 de dezembro de 2013

Dataguard - Parte 3 - Criando o Dataguard Broker

1. Conceito do DG Broker


O Dataguard Broker é um framework da Oracle que centraliza a monitoração e administração do Ambiente no contexto do Guard, onde a partir de uma instancia podemos ter até 9 standby databases configurados, com as mais diversas possibilidades, open read only, physical standby, logical standby e sem limtite geográfico.

O Broker automatiza diversas tarefas dentro do ambiente de alta disponibilidade e contingenciado que antes eram feitas manualmente como, alteração do tipo de proteção do dataguard, adição de um novo membro no cluster ou dataguard, transporte e aplicação de redo logs, switchover e failover, entre outras funções.

O Broker pode ser administrado através de um aplicativo de linha de comando chamado Dataguard Comand line (DGMGRL) e o Enterprise Manager.

Fonte: Oracle Data Guard Broker Concepts

2. Pre-requisitos


O pre-requisito principal antes de se criar a configuração do Broker é que o Dataguar / Standby Database já exista e a replica do archives estejam funcionando, este foi o passo feito anteriormente, caso ainda não foi executado seguir para Dataguard - Part 2 - Criando o Standby Database

Em linhas gerais, o dataguard broker mantem em um arquivo toda a configuração do Broker, ele é criado a nivel de instancia a partir dos parametros db_broker_fileN, e existe pelo menos um arquivo por instancia. O Parametros dg_broker_start determina se o broker deve ser usado, e os parametros de db_unique_name e db_name estão mais a nivel do Standby Database e já devem ter sidos configurados.

ParametroProducaoStandby
dg_broker_config_file1+DG_DATA/ORCL/dr1mfg.dat'+DG_DATA/ORCL/dr1mfg.dat'
dg_broker_config_file2+DG_DATA/ORCL/dr1mfg.dat'+DG_DATA/ORCL/dr1mfg.dat'
DG_BROKER_STARTTRUETRUE
db_unique_nameorclorclstby
db_nameorclorcl

Em ambos ambientes (Prod e Standby) Executar:

ALTER SYSTEM SET dg_broker_config_file1 = '+DG_DATA/ORCL/dr1mfg.dat' scope=both;

ALTER SYSTEM SET dg_broker_config_file2 = '+DG_FRA/ORCL/dr2mfg.dat' scope=both;

ALTER SYSTEM SET DG_BROKER_START=TRUE scope=both;

3. Criando a configuração


A configuração do Broker pode ser criado por linha de comando através do DGMGRL conectando-se com o sys com a seguir:

[oracle@os-indaia-orcl-prod ~]$ dgmgrl
DGMGRL for Linux: Version 11.2.0.3.0 - Production

Copyright (c) 2000, 2009, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/oracle
Connected.

Para criar a configuração inicial chamada ORCL_DR devemos utilizar o comando create configuration.

DGMGRL> CREATE CONFIGURATION ORCL_DR AS PRIMARY DATABASE IS ORCL CONNECT IDENTIFIER IS ORCL;
Configuration "ORCL_DR" created with primary database "ORCL"

Agora por fim devemos adicionar a instancia de standby com o comando add database:

DGMGRL> ADD DATABASE ORCLSTBY AS CONNECT IDENTIFIER IS ORCLSTBY MAINTAINED AS PHYSICAL; 
Database "orclstby" added

Para verificar a configuração do Broker utilizamos o comando show configuration, note que as duas instancias (Prod e Stby) já fazem parte da  configuração, porém esta configuração ainda não esta habilitada:

DGMGRL> show configuration

Configuration - ORCL_DR

  Protection Mode: MaxPerformance
  Databases:
    ORCL     - Primary database
    orclstby - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
DISABLED


4. Habilitando


Para habilitar a configuração base executar o comando Enable Configuration e o standby já deve iniciar o servico de transporte e aplicação de archives.

DGMGRL> ENABLE CONFIGURATION
Enabled.

DGMGRL> show configuration

Configuration - ORCL_DR

  Protection Mode: MaxPerformance
  Databases:
    ORCL     - Primary database
    orclstby - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS


Próximo Passo: Dataguard - Parte 4 - Criando o TAF (Transparent Application Failover)

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