Criando um banco de dados Standby

Olá, galerinha!! Como o texto sugere, a seguir irei criar uma base de dados física com replicação ativa mas antes disso irei explicar brevemente (e ponha breve nisso) os tipos de bancos de dados Standby que existem na versão 11g:

  • Physical Standby: este banco é uma réplica física / idêntica ao banco primário, a réplica encontra-se em modo montado;
  • Logical Standby: réplica lógica e em modo aberto para escrita e leitura, sendo assim podem existir dados e estrutura diferente se comparado ao banco primário;
  • Snapshot Standby: similar ao Physical Standby porém o sincronismo entre as bases pode ser quebrado e a réplica pode ficar em modo aberto para escrita e leitura, permitindo alteração na estrutura desta base. Posteriormente, o sincronismo pode ser restabelecido e então a réplica perderá todas as modificações efetuadas desde a quebra do sincronismo.

Pronto, agora colocarei a mão na massa! Primeiramente, irei configurar o listener do servidor onde esta o banco que sera a replica para aceitar conexão em modo restrito, criar (ou copiar do servidor primário) o password file, depois irei colocar o banco em Archivelog Mode e habilitar escritas complementares nos redo logs. Feito isto configurarei um serviço para sincronização dos logs, parâmetros para requisição dos logs, nome único da base de dados e parâmetro de conversão de nomes, que são necessários para criação e sincronização entre a base primaria e a replica.

Ambos os servidores:
# acrescentar entrada do tnsnames.ora conforme abaixo
PRIM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = prim)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prim)
)
)

STBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = stby)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = stby)
)
)

Servidor Primário:
sqlplus / as sysdba
alter system set log_archive_dest_1=’LOCATION=+DG_NAME VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=prim’ scope=spfile;
alter system set log_archive_dest_state_1=’ENABLE’ scope=spfile;
alter system set log_archive_dest_2=’SERVICE=stby SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stby’ scope=spfile;
alter system set log_archive_dest_state_2=’ENABLE’ scope=spfile;
alter system set log_archive_config=’DG_CONFIG=(prim,stby)’ scope=spfile;
alter system set fal_server=stby scope=spfile;
alter system set fal_client=prim scope=spfile;
alter system set log_archive_format=%t_%s_%r.arc scope=spfile;
alter system set standby_file_management=AUTO scope=both;
shut immediate
startup mount
alter database archivelog;
alter database force logging;
alter database open;

Servidor Secundário:
echo ‘db_name=prim’ > /home/oracle/init.ora
orapwd file=$ORACLE_HOME/dbs/orapwstby entries=10 password=oracle
mkdir -p /u01/app/oracle/admin/stby/adump

# editar entrada do listener.ora conforme abaixo
SID_LIST_LISTENER = (
(SID_LIST =
(SID_DESC = (GLOBAL_DBNAME = stby)(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db)(SID_NAME = stby))
)

# Entrar no sqlplus e executar os comandos abaixos
sqlplus / as sysdba
startup nomount pfile=/home/oracle/init.ora
exit

# Clonar a base utilizando o rman conforme abaixo
rman target sys/oracle@prim auxiliary sys/oracle@stby
duplicate target database for standby
from active database
dorecover
spfile
parameter_value_convert (DG_NAME,DG_NEW_NAME,prim,stby,stby,prim)
set db_unique_name=”stby”
set db_file_name_convert=’+DG_NAME’,’+DG_NEW_NAME’
set log_archive_config=’DG_CONFIG=(prim,stby)’
set log_archive_dest_1=’LOCATION=+DG_NEW VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stby’
set log_archive_dest_2=’SERVICE=prim ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=prim’
set fal_server=prim
ser fal_client=stby
nofilenamecheck;

# Recomendo habilitação de flashback nas bases para ativar o fast failover quando configurar o broker
Ambas as bases:
sqlplus / as sysdba
alter system set db_recovery_file_dest_size=SIZE_G scope=both;
alter system set db_recovery_file_dest=’+DG_NAME’ scope=both;
alter database flashback on;

Pronto depois disso, basta checar pelo sqlplus no standby o estado de sincronização dos logs:

SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

Espero ter ajudado!
Abraços!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s