Pular para o conteúdo

Instalação do Oracle Data Guard 12c – Tutorial completo

Instalação do Oracle Data Guard 12c

Olá amigos, hoje vamos a um desafio bem grande montar um Oracle Data Guard 12c.

Como laboratório vamos estar usando as mídias do Oracle Database 12c e do virtualbox que se encontram nos links abaixo:

Vamos precisar das seguintes mídias para realizar a instalação do ambiente:

Oracle Linux:   Realizar o download das mídias do Oracle Linux 6 Update 5 – 64 Bits.

Instalação do Oracle Data Guard

VirtualBox: Realizar da última versão estável.

Oracle Database 12c Release 1 (12.1.0.1.0):  Realizar da última versão do Oracle 12c para Linux – X86_64.

Jv4b2ck5db76axdxFqRVZXmbGXvERLJW7SuazYTuNt2gqxD55F26GDFN NX5OOotSSB0ArA guR6I ZB7419f7KgnZNKD0iM4aG3rFEKhV433OsqGy6q8HdjMCVy4AholL0puZD96COCVLeS

Bem agora que já fizemos toda parte de download do material para montar este ambiente vamos iniciar as instalações.

Primeiramente vamos criar as maquinas para o ambiente do Data Guard, conforme os procedimentos abaixo.

2stD1T71niqCOBV1QhPNH1UN0djQTWXYz1oIi kGdIHx5 uYCgsscq92dbD2xFFrOQm noRE4Mbbt nWcY2KB0vwTzd1jCBlyYniKSnMsJnworrQrOO6le 7lgnr1FHdN2gNturziMCmFc

Nesta tela definimos o tipo de SO e a versão do mesmo, vamos utilizar o Oracle Linux 6 Update 5 em 64 Bits e vamos nomear este equipamento de DG1.

mL3IlmJH8Xsk1rUavq8Ym9QKXbwM9EECJTPUHG0orsOl4Mms1Ia2 FL9XqX0F5AV4OorMAsm71SzSoWEdK35ZYpYdkC4ayiRMaxuYBjNNE5KK4w V GjYwNAiWbadpFORg4c3nlX2Hs0n2I

Nesta tela vamos definir o tamanho da memória do node neste caso vamos ter 2048 MB.

Nesta tela vamos selecionar a criação do drive que vai receber o sistema operacional do NODE1, selecione a opção “Create a virtual hard drive now”,  e depois clique em NEXT.

lKuhALU5HRdDH2m9piK NPddTUEe0iE846JRMnuzSHtVT1mgtkDPsHgXHs5AQbFkmA

Nesta tela vamos selecionar o tipo de arquivo do disco virtual no caso vamos utilizar o VDI, depois de selecionar clique em NEXT.

8izuaxw6 MfQKsFWwPEc3myQsh7KMOvA FMwKl3Jvsfv vLQcpHDcyec8GAFXJFWeyjJ 9DOJyhZoTJuAkho3Ll9wy5v8jormZQNboRLCf3tyqJBcqdr95oUB2T36BQbZkqezVJmnDhVAbZs

Nesta tela vamos selecionar o tipo de alocação do disco, selecione a opção “Dynamically allocated”, e depois clique em NEXT.

hwTkLnA

Nesta tela vamos definir o tamanho do disco para instalar o SO e os binários do Oracle Database, estamos usando 20 GB.

Após criamos a máquina vamos agora habilitar 1 placa de redes que ser utilizado na rede do Data Guard.

Para chegar na tela a seguir, selecione a máquina que você criou e clique no botão settings do Virtualbox e depois que abrir a janela selecione a opção Network.

B WuHbSC TeQQ2AFII4ZzJZ6BwyTTsSfETcHNrviLdCZsy2PM4ndekgo1QZ2AsMEME4AIeKclv JHtjz4NknxVaM0Y9lEr wi65Ls1xrTH oCGXY0LS1WnZMdklwrnt2kyO3CMih9wRUqS5

Nesta tela vamos definir na primeira placa de rede que a mesma vai funcionar na rede Host-only do virtualbox.

Depois de selecionar a opção clique no OK e vamos instalar o Sistema Operacional Oracle Linux 6. Para isso clique no item Storage e selecione a mídia do Oracle Linux 6.

Cf jxTKcllRw6ypz7qkichH7 jGMC9EAc4 6OI bv1mq3m5kJTs4b7k5tEtrJ6ryQBPjj4zhuNDslTLFg8Ue 5iaUDSZr j2Tuu17xWL5oPiErTFAR fjXF MLO7hitjuJNoDhfAgBmkV2h

Depois de um Start na máquina Virtual DG1 e vamos iniciar a instalação do S.O.

5oWb8DQcN8AxI5lUxIj Hx9GI98tmp QbR9lzHzRgiCLzwo8 RUMMc6MNZvnMBP

Bem nesta tela selecione a opção “Install or Upgrade an existing system”, e depois de um ENTER

A3IwJDWGAwk3qkNuVymQTsELGDQCDIlunT ZybkAehTJqB

Nesta tela selecione a opção SKIP, pois não é necessário a validação da mídia, após selecionado de um ENTER.

Continue com a instalação do Oracle Linux como você faria para um servidor normal. Nas próximas três telas selecionar Language, teclado e dispositivos de armazenamento do tipo básicos.

Confirmar para descartar quaisquer dados.

1.png

Defina “Hostname” para db01dg e pressione “Configure Network”.

Na tela de conexões de rede, selecione “System eth0”, que será usada para a rede pública, e pressione “Edit”

Certifique-se de que “Conectar automaticamente” está marcada. Selecione a aba “Configurações IPv4”; alterar o método para “Manual”; Pressione o botão “Add” e preencha Endereço: 192.168.56.71; Máscara de rede: 255.255.255.0; Gateway: 0.0.0.0.

Pressione o botão “Apply”.

Fechar tela Conexões de rede e vá para a tela de configuração seguinte.

Selecione o fuso horário.

Digite a senha do Root, coloquei como oracle.

f8V 6TRSHgqSN3Dk EVzUfcr 8w4E6uhKOVGNaBfb8bw787R2E1sxSsmE8BUMe LCQwqK08o8wH1c2ct ueNyJV52TgMmfAHD3ycW7AHYdUSPsrZSHkoiJdbKN2tb37qNo gmpJzP0uZJHy

Selecione “Use All Space” para o tipo de preparação do disco e marque a opção “Review and modify partitioning layout”, clique em NEXT.

Clique em NEXT e confirme através de avisos e criar partições.

Manter padrões de tela do carregador de inicialização.

Na tela de instalação do tipo de software, selecione “Database Server” e verifique o botão “Personalizar agora”.

Pressione Next

l9ZJfY xIEjtQNQIb5w94Y66btdX 3 SvYJzsDtivlmoTWX1vIuU3CDLHrC91Hk7VpTbDj1g uCw1JlgqAfNWsAjqy6HWM3fPjqg3HqEJ0YVFrBlVurh

Na tela Personalização selecione “Databases” e desmarque todos os itens.

Selecione “Desktops” e marque “Ferramentas gráficas de administração” “Desktop” e em seguida, pressione Next e aguarde até o final da instalação e depois Reinicie o Sistema Operacional.

Quando ele volta, não haverá mais telas de configuração para lidar com óbvias. Não crie conta ‘Oracle’, isso será feito mais tarde. Você pode ignorar as configurações Kdump.

Parabéns! O Linux foi instalado.

Bem após ter instalado o Linux, abra um terminal no Linux para que possamos dar continuidade as atividades.

VCwM8FCnps7bS2nAr3bK3F8L1s l9N2TP1hO5kzeTMjpBLcMHllLS7FGok7iI5kMOSJIWUUhw7v1QdiqXTChDTGV2OmoJ7x3 CRG4mvPwUg rFMcD8QXM0hWlVMeXSBAOBqSK1qaItcB49vH

Instalação do Oracle Clusterware – Pré requisitos.

Bem após ter instalado o Linux, abra um terminal no Linux para que possamos dar continuidade as atividades.

Todas as ações nesta seção devem ser executados pelo usuário root e devem ser executadas nos dois nodes.

Instalar pacote “oracle-rdbms-server-12cR1-preinstall”. Este pacote realiza pré-requisitos do kernel incluindo mudança de parâmetros e criação de conta Oracle Linux.

Execute no terminal o comando abaixo:

yum install oracle-rdbms-server-12cR1-preinstall

 Aguarde até o mesmo fazer download da internet deste pacote e realizar a instalação do mesmo.

Vamos agora desabilitar o SELINUX do sistema operacional.

vi /etc/selinux/config

Dentro do arquivo trocar o SELINUX que estiver setado para a opção abaixo.

SELINUX=disabled

Salve o arquivo e saia do mesmo :wq no editor.

Após feito este passo, vamos configurar a parte de network para comunicação das máquinas.

Edite o arquivo hosts localizado no /etc:

vi /etc/hosts

Limpe todas as configurações do arquivo e adicione a seguintes entradas:

192.168.56.71    db01dg        db01dg

192.168.56.72    db02dg        db02dg

Após feito isso salve o arquivo e saia com o comando :wq

Desabilite o Firewall do Linux da seguinte forma:

service iptables stop

service ip6tables stop

chkconfig iptables off

chkconfig ip6tables off

Após feito isso vamos clonar o equipamento para criar o DG2.

Instalando Oracle Database 12C.

Faça o login no “db01dg” como usuário oracle para iniciarmos a instalação do binário do Oracle Database 12c.

$ cd /media/database

$ ./runInstaller

RtLA u13fFDSS3hzxvumcIecl aPYVPLlLSR5qbZ7AV8soG Rm EtxIHHqam4PI JVtmolYk36rtoTEGdUdtiXknBNEGoLhLs35HJKKFoOZg0KyZkCOU14YtD iJssEbh9q1OnD9URRa8YFQ

Desmarque a opção “I wish to receive security update via My Oracle Support” e pressione o botão “Next”.

ZSJG1tEpYZPqnBRYtrlZG8jAweo54Mi6qj7Sagy4SHRNP7FhCvoseF shPy4A34S9OlNCi

Selecione “Skip software updates”, e clique em “NEXT”.

Selecione a opção “Install database software Only”, e clique em “NEXT”.

uOvjnACEJ0fnZVfOi4Gm7wayIRcoh04c1HnTezJ3Dihg5R8QRX3cRk4a4vzJRuVjnYDz95lWQj1k XSaAXsYm8k5ed00mmrHj7Hd 71huLfWiPKHwH

Selecione a opção “Single Instance database installation” e clique em “NEXT”.

Na tela de Languages, clique em Next.

DgtR6lVPMAnZbbMKcZwcAyt3 v5bb4A ECO19jr6YeoEypz8

 Na tela de “Database Edition”, selecione a opção Enterprise Edition e clique em “NEXT”.

GK6lJVMs4L92cNmkhj4wJDPdLAhMdObVImM2F7FmEHYOpSx9jW24EbzA5KNQQzeuIA4iDLtKgcl QEh pZ0KXIJ628YFyUFAQ43 9yfi5zzhzDCFxWk57OvhaJ4F3rxaVu3x6w8Ig 1Jl3o

Na tela de “Installation Location”, recomendamos seguir a sugestão padrão, caso seja necessário altere o caminho, e após isso clique em “NEXT”.

YFkjGy8sn siSMcgHU9Cy kQmWkDGqabHb0RluAjfn2DUra9aJDfv7gCjGiIwbwT30kj36aB xHfY1gxUvSUbMuReN6 R9sL0X93KsvFJAsSP1KaAOkn1k65hNEnMGPP uLAgnjE6iIfI7j

Mantenha os padrões em “Operating Systems Groups” e pressione “Next”. Ignorar aviso na tela seguinte.

bvro0UyERMFKpyqfNYafo7 x ONrWGSnN8N9vOtSRCuC0iLVTCJQFj1D14t0Q7ZH0 dleeVllyjZcpNsMuD6 WfzXOoxp66EXmlOAI2luP8yCRRREDD11M585UL Wqe0AHi46daM3 ohzuUj

No item Prerequisite Checks, na minha instalação passou sem grandes problemas, caso apresente algo a vocês verifiquem os alertas, solucione os problemas antes da instalação.

Após tudo OK clique em Install.

QJC8pNfdKKL8feaVlz72lotkGPjWGGl1TgoFckBdIDDyg7 g5voYrgbRVy0bhK7E9QuxFENzHMIeDBwTHj hRY6p181NJ2h MAd8kAg6yx2H6kQ2FC7GHhrcR07o0WATaoPuQEk8644 1kM

Após o termino da instalação irá apresentar uma tela para execução de um script que deve ser executado.

Após isso vamos fazer a configuração do bash_profile do usuário oracle no DG1.

Edite o arquivo hosts localizado no /home/oracle/:

vi /home/oracle/.bash_profie

Adicione as seguintes configurações:

# Oracle Settings

export TMP=/tmp

export TMPDIR=$TMP  

export ORACLE_HOSTNAME=db01dg

export ORACLE_BASE=/oracle

export ORACLE_HOME=$ORACLE_BASE/12.1.0

export ORACLE_SID=DG1

export ORACLE_TERM=xterm

export PATH=/usr/sbin:$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

Após feito isso salve o arquivo e saia com o comando :wq

Após a clonagem, teremos os seguintes ambientes para os testes de Data Guard:

TIPO

VM

HOSTNAME

IP

SID

PRIMARY

DG1

DB01DG

192.168.56.71

DG1

STANDBY

DG2

DB02DG

192.168.56.72

DG2ST

 Clone equipamento para criação do DG2.

De um shutdown na sua máquina DG1 para que possamos iniciar o clone do ambiente.

No menu do VirtualBox “MACHINE” selecione a opção clone.

yt9pji4KPTRz4lHsdwKBqko6xPbxGlvvMNJkjRCWxylpb1YG86k1pcAtg6mtRytuYAHNHvz8ZkO04vWTMTw6VM7WQbOVybUHPU7Wzd7EyaRLj01iTWBgWkhx5p9 o6aMYep9U WRr V13Ta

Digite “DG2” para o nome da nova máquina.

Certifique-se de que “Reinitialize the MAC address of all network cards” não está marcada.  Em seguida, pressione “Next”:

pOjaIxHFS6FTB3FBBWTHSSTZAPqSuDqcTzxp8265HS042GK0ySY2YACcHblEaT2ntpNt xkdvUbRfQumd92wWaaM8lL5K1QAr ezbm4nH6 UPnpMnjWHwIDlW9zg184sfZpeZRUbvobw9jLn

Mantenha a opção “Full Clone” selecionado e pressione “Clone” para iniciar o clone do ambiente.

Após finalizar o clone com a máquina DG1 ainda em shutdown inicie a máquina DG2 e conecte como ROOT.

Após feito isso vamos configurar alguns itens para que não apresente problemas nas máquinas.

Primeiro vamos alterar o hostname do equipamento conforme instrução abaixo:

vi /etc/sysconfig/network

Quando abrir o arquivo altere o item HOSTNAME que esta configurado com o nome do DG2 para o item abaixo

HOSTNAME=db02dg

Após isso precisamos realizar a edição dos ip´s da placa de rede eth0 da máquina clonada.

l0dimXdTd993ZxscD 7aTcQW7uYw83SQB4jIVX6JX8HkC4Q gIK72BS 1PiobILaXnMQdJsLtAty6qFUiT3imZayJMAc 5sMzV7OXWNPimZRh75dC6bLps8sp rR33vJunQdwRfNfn3O5y2m

Clique com o botão direito no ícone que demonstra 2 computadores para habilitar a edição das conexões de rede

Edite a placa eth0, com o ip conforme imagem.

HN5q gmSyzoKmb lSeJA9DIiOgY mg7qHwtAqTuYg91 oiVl7NZ UgXpk2VxYzht54XQl S0ke7tXYTs4 bZndQ4UA7JJPK8fSbbOwecTUIBOTtalmYNsIn31cEmq7fselFd108rOC KTIuA

Após feito o altere o MAC adresses de cada placa estamos trocando somente o final para 00 de todas as placas.

0Wwr7xMF9x5ccLF9BebeUsI7O7LreQ2zMD16BUMO6UOo854Q6tr8cIXC0Raru9dugR2h0VQrhBMI2vaNgZ0nCFrB JMUeoZkBIlgVbEYqwCJzCr10z3 7A9739GSm2MBA3ka4KbwKujjBFZ

Após isso vamos fazer a configuração do bash_profile do usuário oracle no DG2.

Edite o arquivo hosts localizado no /home/oracle/:

vi /home/oracle/.bash_profie

Adicione as seguintes configurações:

# Oracle Settings

export TMP=/tmp

export TMPDIR=$TMP  

export ORACLE_HOSTNAME=db02dg

export ORACLE_BASE=/oracle

export ORACLE_HOME=$ORACLE_BASE/12.1.0

export ORACLE_SID=DG2ST

export ORACLE_TERM=xterm

export PATH=/usr/sbin:$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

 Após feito isso salve o arquivo e saia com o comando :wq

Após feito isso de um shutdown no equipamento e altere o MAC adresses também no VirtualBox.

m0iw44VdX0tSZhf6w2CeTbeUEN4EabKqtSJePfcFXVCJz 7IOvLb04y7Z2BxXpumlLCyf8hwWVKEQwxdQSdgBJR1A5xEuRHW7LatidbOA1GRESvn8LVOVb2eRIuKuFKtJfXkYNnMxdPs1k 9

Após feito isso vamos iniciar a criação dos database.

Criando Database Oracle 12C.

Faça o login no DG1 como usuário oracle para criação do banco de dados.

$ dbca

1.png

Neste item selecione a opção “Create Database” e clique em NEXT.

1.png

Neste item selecione a opção “Advanced Mode” para que possamos realizar uma instalação customizada e clique em NEXT.

1.png

Neste item selecione a “Template General Purpose or Transaction Processing” como modelo de banco de dados e clique em NEXT.

1.png

Neste item digite o “Global Database Name” e o “SID” neste caso estamos usando DG1, após feito isso clique em NEXT.

1.png

Neste item selecione a opção de “Configure Enterprise Manager(EM) Database Express”, após feito isso clique em NEXT.

1.png

Neste item selecione a opção “Use the Same Administrative Password for All Accounts” para que possamos usar uma única senha lembrando que isso é um laboratório e como boas práticas, devemos sempre ter senhas com complexidade e diferentes para todos os usuários. Após feito isso clique em NEXT.

1.png

Neste item selecione a opção “Select” depois digite LISTENER e digite 1521 no item “PORT”,após feito isso clique em NEXT.

1.png

Neste item selecione a opção “File System” em “Database Files” depois selecione “Use Database File Locations from Template”.

Após feito isso selecione a opção “File System” em “Storage Type do Recovery Related Files” e selecione as opções “Specify Fast Recovery Area” e “Enable Archiving”, após feito isso clique em NEXT.

1.png

Neste item não marque nada e clique em NEXT.

1.png

Neste item como estamos montando um laboratório, deixe as opções já selecionadas e após feito isso clique em NEXT.

1.png

Neste item selecione a opção “Create Dtabase”, após feito isso clique em NEXT.

1.png

Neste item será exibido uma resumo do que você configurou, após fazer a analise clique em FINISH.

1.png

Aguarde o final da instalação e clique em CLOSE.


Criando e configurando Oracle Data Guard 12C.

Após feito toda parte de infraestrutura, vamos iniciar a criação do Data Guard.

No banco dados primário no DG1, vamos habilitar o archivelog mode.

Para você pode checar o modo de arquivamento do se o seu banco, através da seguinte consulta:

SQL> SELECT LOG_MODE FROM V$DATABASE;

LOG_MODE

————

NOARCHIVELOG

Antes de ativar o arquivamento do banco de dados, vamos certificar o status do nosso listener e do próprio banco de dados.

lsnrctl status

[oracle@db01dg ~]$ lsnrctl status

LSNRCTL for Linux: Version 12.1.0.1.0 – Production on 25-SEP-2015 14:33:22

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db01dg)(PORT=1521)))

STATUS of the LISTENER                                                      

————————                                                    

Alias                     LISTENER                                          

Version                   TNSLSNR for Linux: Version 12.1.0.1.0 – Production

Start Date                25-SEP-2015 14:24:53                              

Uptime                    0 days 0 hr. 8 min. 28 sec                        

Trace Level               off                                               

Security                  ON: Local OS Authentication                       

SNMP                      OFF                                               

Listener Parameter File   /oracle/12.1.0/network/admin/listener.ora         

Listener Log File         /oracle/diag/tnslsnr/db01dg/listener/alert/log.xml

Listening Endpoints Summary…                                              

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db01dg)(PORT=1521)))            

 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))                   

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=db01dg)(PORT=5500))(Security=(my_wallet_directory=/oracle/admin/DG1/xdb_wallet))(Presentation=HTTP)(Session=RAW))  

Services Summary…                                                             

Service “DG1” has 1 instance(s).                                                

 Instance “DG1”, status READY, has 1 handler(s) for this service…            

Service “DG1XDB” has 1 instance(s).                                             

 Instance “DG1”, status READY, has 1 handler(s) for this service…     

[oracle@db01dg ~]$ sqlplus / as sysdba

SQL*Plus: Version 12.1.0.1.0 – Production on 25-SEP-2015 14:35:22

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 1853947904 bytes

Fixed Size    2229384 bytes

Variable Size  452987768 bytes

Database Buffers 1392508928 bytes

Redo Buffers    6221824 bytes

Database mounted.

Database opened.

SQL>

Com o database primário iniciado, vamos criar o diretório para onde os archives logs gerados pelo banco será salvo.

SQL> !mkdir -p /oracle/arch

Precisamos agora, definir o formato que será gravado o nosso arquivo de log no disco e a sua localização, temos para isso dois parâmetros: o log_archive_format e log_archive_dest_1.

SQL> alter system set log_archive_format=’orcl_%t_%s_%r.arc’ scope=spfile;

System altered.

SQL> alter system set log_archive_dest_1=’LOCATION=/oracle/arch’ scope=spfile;

System altered.

Com todas as configurações feitas, vamos agora ativar o modo de ARCHIVELOG. Para que isso é necessário baixar e subir a instância do banco Oracle.

SQL> shut immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area 1853947904 bytes

Fixed Size    2229384 bytes

Variable Size  452987768 bytes

Database Buffers 1392508928 bytes

Redo Buffers    6221824 bytes

Database mounted.

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list

Database log mode       Archive Mode

Automatic archival       Enabled

Archive destination       /oracle/arch

Oldest online log sequence     1

Next log sequence to archive   3

Current log sequence        3

Agora precisamos habilitar o modo de FORCE LOGGING no banco de dados Oracle, todas as mudanças que ocorrem no banco de dados são gerados logs, exceto para as tabelas e tablespaces temporários. Isso é fundamental para o Oracle Data Guard, pois assegura que toda transação efetivada (commit) pode ser capturada através dos arquivos de log do Oracle (redo ou archive).

Podemos ativar o modo de FORCE LOGGING da seguinte maneira:

alter database force logging;

select force_logging from v$database;

SQL> select force_logging from v$database;

FOR

YES

Agora precisamos criar os arquivos de STANDBY REDO para o ambiente,  o Oracle Data Guard pode recuperar e aplicar mais dados do Standby Redo Log do que no convencional Redo Log, por isso a criação de SRL se faz necessária quando estamos montando um Oracle Data Guard.

Com a formula seguinte, é possível determinar o número apropriadodos SRL:

(maximum number of logfiles for each thread + 1) * maximum number of threads

Para o nosso caso: (3 + 1) * 1 = 4

É necessário também que o tamanho do SRL seja exatamente igual ao do Redo Log presente no seu banco, que no nosso ambiente é 100M.

Vamos então adicionar os 4 SRL para o database primário:

alter database add standby logfile group 4 ‘/oracle/oradata/DG1/redo_st04.log’ size 100M;

alter database add standby logfile group 5 ‘/oracle/oradata/DG1/redo_st05.log’ size 100M;

alter database add standby logfile group 6 ‘/oracle/oradata/DG1/redo_st06.log’ size 100M;

alter database add standby logfile group 7  ‘/oracle/oradata/DG1/redo_st07.log’ size 100M;

select group#, sequence#, archived, status from v$standby_log;

 GROUP#  SEQUENCE# ARC STATUS

———- ———- — ———-

4    0 YES UNASSIGNED

5    0 YES UNASSIGNED

6    0 YES UNASSIGNED

7    0 YES UNASSIGNED

Agora vamos configurar os parâmetros de inicialização do ambiente no DG1.

Para uma configuração simples de Oracle Data Guard, basicamente precisamos mudar os 8 parâmetros de inicialização abaixo:

alter system set LOG_ARCHIVE_CONFIG=’DG_CONFIG=(DG1,DG2ST)’;

alter system set LOG_ARCHIVE_DEST_1=’LOCATION=/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DG1′;

alter system set LOG_ARCHIVE_DEST_2=’SERVICE=DG2ST LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DG2ST’;

alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;

alter system set FAL_SERVER=DG2ST;

alter system set FAL_CLIENT=DG1;

alter system set DB_FILE_NAME_CONVERT=’/oracle/oradata/DG2ST’,’/oracle/oradata/DG1′ scope=spfile;

alter system set LOG_FILE_NAME_CONVERT=’/oracle/oradata/DG2ST’,’/oracle/oradata/DG1′ scope=spfile;

Segue a explicação de cada um deles:

LOG_ARCHIVE_CONFIG: Habita ou desabilita o comportamento de enviar as mensagens do redo log para o destino. Com a opção DG_CONFIG, podemos definir um range de até 9 destinos, definindo através do DB_UNIQUE_NAME de cada um deles.

LOG_ARCHIVE_DEST_1: Especifica o caminho do primeiro destino de archive do banco de dados. No nosso caso ele será gravado no caminho “/oracle/arch” do servidor do banco primário. A opção VALID_FOR define como será gravado os dados.

LOG_ARCHIVE_DEST_2: Esse parâmetro, defini o segundo destino de archive. Nesse parâmetro que concentra a mágica do Oracle Data Guard, diferente com o que fizemos no primeiro destino (LOG_ARCHIVE_DEST_1), vamos fazer com que o segundo destino de archive do banco primário seja gravado no primeiro destino de archive do banco standby. Veja que é exatamente o que definimos nesse parâmetro, pedidos para o LGWR escrever os dados de log através do serviço chamado “DG2ST” para o banco de dados “DG2ST”

LOG_ARCHIVE_DEST_STATE_1: Com esse parâmetro, apenas definimos que o primeiro destino de archive está habitado. Por enquanto o segundo destino de archive (LOG_ARCHIVE_DEST_STATE_2) que levará os dados de log para o Data Guard, matemos desativado.

FAL_SERVER e FAL_CLIENT: São parâmetros de inicialização usados para o FAL (fetch archive log), ou seja é utilizado para a detecção e resolução dos destinos do Data Guard. Basicamente, o no banco primário o FAL_SERVER será o TNS service name do banco standby e vice-versa.

DB_FILE_NAME_CONVERT: Ele não é mandatório para o Data Guard, na verdade sua função não é nem para o Data Guard, ele é apenas utilizado no momento do recovery. Esse parâmetro como o nome diz converte o nome do datafile e tempfile do primário database para o correspondente caminho no standby database, é utíl muito útil nomomento do recover, pois assim podemos renomear os datafiles facilmente. No nosso caso, vamos converter todos os datafiles que estão no caminho “/oracle/oradata/DG1” no primário database para o novo caminho “/oracle/oradata/DG2ST” no standby database.

LOG_FILE_NAME_CONVERT: O parâmetro LOG_FILE_NAME_CONVERT faz exatamente o que o DB_FILE_NAME_CONVERT faz, porém apenas com redo logs.

Agora vamos fazer o backup do banco de dados no DG1.

Com todas as configurações feitas, precisamos agora realizar um backup do banco primário. O backup será feito através do RMAN no seguinte caminho: “/oracle/backup/”

Siga os passos abaixo:

[oracle@db01dg ~]$ mkdir -p /oracle/backup/

[oracle@db01dg ~]$ rman target /

Recovery Manager: Release 12.1.0.1.0 – Production on Fri Sep 25 14:59:17 2015

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DG1 (DBID=1872722065)

RMAN> run {   

2> allocate channel c1 type disk;

3> allocate channel c2 type disk;                              

4> backup database format ‘/oracle/backup/%d_%s_%p_%U.bkp’;    

5> backup archivelog all format ‘/oracle/backup/ARCH_%d_%s_%p_%U.bkp’;

6> backup current controlfile for standby format ‘/oracle/backup/control_%d_%U.bkp’;

7> }                                                                                

using target database control file instead of recovery catalog

allocated channel: c1                                         

channel c1: SID=47 device type=DISK                           

allocated channel: c2

channel c2: SID=43 device type=DISK

Starting backup at 25-SEP-15

channel c1: starting full datafile backup set

channel c1: specifying datafile(s) in backup set

input datafile file number=00001 name=/oracle/oradata/DG1/system01.dbf

input datafile file number=00006 name=/oracle/oradata/DG1/users01.dbf

channel c1: starting piece 1 at 25-SEP-15                             

channel c2: starting full datafile backup set                         

channel c2: specifying datafile(s) in backup set                      

input datafile file number=00003 name=/oracle/oradata/DG1/sysaux01.dbf

input datafile file number=00004 name=/oracle/oradata/DG1/undotbs01.dbf

channel c2: starting piece 1 at 25-SEP-15                              

channel c1: finished piece 1 at 25-SEP-15                              

piece handle=/oracle/backup/DG1_1_1_01qi21dp_1_1.bkp tag=TAG20150925T150321 comment=NONE

channel c1: backup set complete, elapsed time: 00:01:55                                 

channel c1: starting full datafile backup set                                           

channel c1: specifying datafile(s) in backup set                                        

channel c2: finished piece 1 at 25-SEP-15                                               

piece handle=/oracle/backup/DG1_2_1_02qi21dq_1_1.bkp tag=TAG20150925T150321 comment=NONE

channel c2: backup set complete, elapsed time: 00:01:55                                 

channel c2: starting full datafile backup set                                           

channel c2: specifying datafile(s) in backup set                                        

including current SPFILE in backup set                                                  

channel c2: starting piece 1 at 25-SEP-15                                               

including current control file in backup set                                            

channel c1: starting piece 1 at 25-SEP-15                                               

channel c2: finished piece 1 at 25-SEP-15                                               

piece handle=/oracle/backup/DG1_4_1_04qi21hd_1_1.bkp tag=TAG20150925T150321 comment=NONE

channel c2: backup set complete, elapsed time: 00:00:01                                 

channel c1: finished piece 1 at 25-SEP-15                                               

piece handle=/oracle/backup/DG1_3_1_03qi21hd_1_1.bkp tag=TAG20150925T150321 comment=NONE

channel c1: backup set complete, elapsed time: 00:00:01                                 

Finished backup at 25-SEP-15                                                            

Starting backup at 25-SEP-15

current log archived        

channel c1: starting archived log backup set

channel c1: specifying archived log(s) in backup set

input archived log thread=1 sequence=2 RECID=1 STAMP=891354582

channel c1: starting piece 1 at 25-SEP-15                     

channel c2: starting archived log backup set                  

channel c2: specifying archived log(s) in backup set

input archived log thread=1 sequence=3 RECID=2 STAMP=891356064

input archived log thread=1 sequence=4 RECID=3 STAMP=891356721

channel c2: starting piece 1 at 25-SEP-15

channel c1: finished piece 1 at 25-SEP-15

piece handle=/oracle/backup/ARCH_DG1_5_1_05qi21hi_1_1.bkp tag=TAG20150925T150522 comment=NONE

channel c1: backup set complete, elapsed time: 00:00:15

channel c2: finished piece 1 at 25-SEP-15

piece handle=/oracle/backup/ARCH_DG1_6_1_06qi21hi_1_1.bkp tag=TAG20150925T150522 comment=NONE

channel c2: backup set complete, elapsed time: 00:00:15

Finished backup at 25-SEP-15

Starting backup at 25-SEP-15

channel c1: starting full datafile backup set

channel c1: specifying datafile(s) in backup set

including standby control file in backup set

channel c1: starting piece 1 at 25-SEP-15

channel c1: finished piece 1 at 25-SEP-15

piece handle=/oracle/backup/control_DG1_07qi21i2_1_1.bkp tag=TAG20150925T150538 comment=NONE

channel c1: backup set complete, elapsed time: 00:00:01

Finished backup at 25-SEP-15

released channel: c1

released channel: c2

RMAN>

Agora devemos criar uma cópia do arquivo de inicialização do nosso banco primário, a cópia deve ser feita no mesmo caminho do backup que acabamos de fazer, isso porque iremos mover toda essa pasta para o servidor do banco DG2

[oracle@db01dg ~]$ sqlplus / as sysdba

SQL*Plus: Version 12.1.0.1.0 – Production on 25-SEP-2015 14:35:22

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

SQL> create pfile=’/oracle/backup/initDG2.ora’ from spfile;

File created.

Agora devemos realizar a cópia do arquivo de senha para o servidor DG2.

cd $ORACLE_HOME/dbs

[oracle@db01dg ~]$ scp orapwDG1 db02dg:/oracle/12.1.0/dbs/orapwDG2

oracle@db02dg password: *******

orapwDG1                                100%   96KB  96.0KB/s   00:00

O Oracle Data Guard é totalmente configurado para ser executado em cima do Oracle NET. Toda sua comunicação com os bancos de DG1 e DG2 é feito através do serviços configurados no TNS.

No nosso caso, assim como foi configurado os parâmetros  acima, precisamos ter os serviços “DG1” e “DG2” em ambas as máquinas.

[oracle@db01dg ~] cd $ORACLE_HOME/network/admin

[oracle@db01dg admin]$ vi tnsnames.ora

Inclua estas entradas no arquivo do TNSNAMES

DG1 =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = db01dg)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = DG1)

   )

 )

DG2ST =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = db02dg)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = DG2ST)

   )

 )

 

Após feito isso salve o arquivo e saia com o comando :wq

Agora vamos realizar um teste de conectividade.

[oracle@db01dg admin]$ tnsping DG1

TNS Ping Utility for Linux: Version 12.1.0.1.0 – Production on 25-SEP-2015 14:33:22

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db01dg)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DG1)))

[oracle@db01dg admin]$ tnsping DG2ST

TNS Ping Utility for Linux: Version 12.1.0.1.0 – Production on 25-SEP-2015 14:33:29

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db02dg)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DG2ST)))

Lembrando que na máquina DG2 o serviço do LISTENER deve estar iniciado.

Agora temos agora o nosso banco primário DG1 todo configurado e pronto para iniciar o standby, precisamos apenas mover o backup e o arquivo de inicialização que estão no nosso servidor primário para o banco standby DG2

[oracle@db01dg admin]$ cd /oracle/backup

[oracle@db01dg backup]$ ls -ltr

total 1383856

-rw-r—–. 1 oracle oinstall 607723520 Sep 25 15:05 DG1_2_1_02qi21dq_1_1.bkp

-rw-r—–. 1 oracle oinstall 685727744 Sep 25 15:05 DG1_1_1_01qi21dp_1_1.bkp

-rw-r—–. 1 oracle oinstall     98304 Sep 25 15:05 DG1_4_1_04qi21hd_1_1.bkp

-rw-r—–. 1 oracle oinstall  10092544 Sep 25 15:05 DG1_3_1_03qi21hd_1_1.bkp

-rw-r—–. 1 oracle oinstall  51418112 Sep 25 15:05 ARCH_DG1_6_1_06qi21hi_1_1.bkp

-rw-r—–. 1 oracle oinstall  51900416 Sep 25 15:05 ARCH_DG1_5_1_05qi21hi_1_1.bkp

-rw-r—–. 1 oracle oinstall  10092544 Sep 25 15:05 control_DG1_07qi21i2_1_1.bkp

-rw-r–r–. 1 oracle oinstall      1379 Sep 25 15:11 initDG2ST.ora

[oracle@db01dg backup]$

Para que a restauração seja mais fácil, sem a necessidade de catalogar os backup, vamos criar o mesmo diretório no servidor DG2.

[oracle@db01dg backup]$ ssh oracle@db02dg mkdir -p /oracle/backup

oracle@db02dg’s password: *****

Com o diretório criado, vamos mover todos os arquivos da pasta /oracle/backup/ para o servidor DG2.

[oracle@db01dg backup]$ scp * db02dg:`pwd`

oracle@db02dg’s password: *******

ARCH_DG1_5_1_05qi21hi_1_1.bkp      100%   49MB  49.5MB/s   00:00

ARCH_DG1_6_1_06qi21hi_1_1.bkp      100%   49MB  49.0MB/s   00:01

control_DG1_07qi21i2_1_1.bkp       100% 9856KB   9.6MB/s   00:00

DG1_1_1_01qi21dp_1_1.bkp           100%  654MB  19.2MB/s   00:34

DG1_2_1_02qi21dq_1_1.bkp           100%  580MB  17.1MB/s   00:34

DG1_3_1_03qi21hd_1_1.bkp           100% 9856KB   9.6MB/s   00:01

DG1_4_1_04qi21hd_1_1.bkp           100%   96KB  96.0KB/s   00:00

initDG2ST.ora                      100% 1379     1.4KB/s   00:00

[oracle@db01dg backup]$

Agora que finalizamos toda configuração no DG1 vamos fazer a configuração do DG2 – Standby.

Vamos editar o arquivo initDG2.ora para acrescentarmos alguns parâmetros necessários do Oracle Data Guard.

Para isso, conecte na máquina de standby DG2 e faça as alterações como abaixo, observe que os parâmetros em negrito, são os parâmetros necessários para o Data Guard.

[oracle@db02dg~] $ cd /oracle/backup

[oracle@db02dg backup]$ ls -ltr

total 1383856

-rw-r—–. 1 oracle oinstall 607723520 Sep 25 15:05 DG1_2_1_02qi21dq_1_1.bkp

-rw-r—–. 1 oracle oinstall 685727744 Sep 25 15:05 DG1_1_1_01qi21dp_1_1.bkp

-rw-r—–. 1 oracle oinstall     98304 Sep 25 15:05 DG1_4_1_04qi21hd_1_1.bkp

-rw-r—–. 1 oracle oinstall  10092544 Sep 25 15:05 DG1_3_1_03qi21hd_1_1.bkp

-rw-r—–. 1 oracle oinstall  51418112 Sep 25 15:05 ARCH_DG1_6_1_06qi21hi_1_1.bkp

-rw-r—–. 1 oracle oinstall  51900416 Sep 25 15:05 ARCH_DG1_5_1_05qi21hi_1_1.bkp

-rw-r—–. 1 oracle oinstall  10092544 Sep 25 15:05 control_DG1_07qi21i2_1_1.bkp

-rw-r–r–. 1 oracle oinstall      1379 Sep 25 15:11 initDG2ST.ora

[oracle@db01dg backup]$ vi initstdby.ora

*.audit_file_dest=’/oracle/admin/DG2ST/adump’

*.compatible=’12.1.0.0.0′

*.control_files=’/oracle/oradata/DG2ST/control01.ctl’,’/oracle/oradata/DG2ST/control02.ctl’

*.db_block_size=8192

*.diagnostic_dest=’/oracle’

*.log_archive_format=’orcl_%t_%s_%r.arc’

*.open_cursors=300

*.pga_aggregate_target=616562688

*.sga_target=1849688064

*.undo_tablespace=’UNDOTBS1′

*.db_name=DG1

*.db_unique_name=DG2ST

*.db_file_name_convert=’/oracle/oradata/DG1′,’/oracle/oradata/DG2ST’

*.log_file_name_convert=’/oracle/oradata/DG1′,’/oracle/oradata/DG2ST’

*.log_archive_config=’DG_CONFIG=(DG1,DG2ST)’

*.log_archive_dest_1=’LOCATION=/oracle/archive/DG2ST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DG2ST’

*.log_archive_dest_2=’SERVICE=DG1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DG1′

*.log_archive_dest_state_1=’ENABLE’

*.fal_client=’DG2ST’

*.fal_server=’DG1′

*.remote_login_passwordfile=’EXCLUSIVE’

*.standby_file_management=auto

Assim como fizemos na máquina DG1 (servidor primário), temos que configurar da mesma maneira no servidor DG2 o TNSNAMES.

[oracle@db02dg ~] cd $ORACLE_HOME/network/admin

[oracle@db02dg admin]$ vi tnsnames.ora

Inclua estas entradas no arquivo do TNSNAMES

DG1 =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = db01dg)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = DG1)

   )

 )

DG2ST =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = db02dg)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = DG2ST)

   )

 )

Após feito isso salve o arquivo e saia com o comando :wq

Agora vamos realizar um teste de conectividade.

[oracle@db02dg admin]$ tnsping DG1

TNS Ping Utility for Linux: Version 12.1.0.1.0 – Production on 25-SEP-2015 14:33:22

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db01dg)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DG1)))

[oracle@db02dg admin]$ tnsping DG2ST

TNS Ping Utility for Linux: Version 12.1.0.1.0 – Production on 25-SEP-2015 14:33:29

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db02dg)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DG2ST)))

Lembrando que na máquina DG2 o serviço do LISTENER deve estar iniciado.

Agora para Para iniciar a instância DG2ST, precisamos dos seguintes diretórios criados:

[oracle@db02dg ~]$ mkdir -p /oracle/admin/DG2ST/adump

[oracle@db02dg ~]$ mkdir -p /oracle/oradata/DG2ST/

[oracle@dg02dg ~]$ mkdir -p /oracle/arch

Agora os passos necessários para iniciar a instância DG2ST em estado nomount. Primeiro, vamos criar o spfile através do arquivo pfile “/oracle/backup/initDG2ST.ora”.

[oracle@dg02dg ~]$ echo $ORACLE_SID

D2GST

[oracle@dg02dg ~]$ sqlplus / as sysdba

SQL*Plus: Version 12.1.0.1.0 – Production on 25-SEP-2015 14:35:22

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

SQL> create spfile from pfile=’/oracle/backup/initDG2ST.ora’;

File created.

SQL> startup nomount

ORACLE instance started.

Total System Global Area  1853947904 bytes

Fixed Size     2229384 bytes

Variable Size  452987768 bytes

Database Buffers             1392508928 bytes

Redo Buffers     6221824 bytes

Com todas as configurações acima realizadas, vamos agora a restauração do banco DG1 para o standby DG2ST. A restauração será feita através do comando duplicate do RMAN, para isso precisamos estar conectados em ambos os bancos de dados (DG1 e DG2ST), isso é feito da seguinte maneira:

$ rman target sys/oracle@DG1 auxiliary /

Onde:

target -> Representa o nosso banco de dados destino, que no caso é o banco DG1 (database primário). A conexão será feita com o usuário com o usuário sys e senha oracle através do TNSNAME DG1.

auxiliary -> Representa o banco na máquina que estamos conectado, que no caso é a instância DG2ST, definido pela variável de ambiente ORACLE_SID. A conexão será feita pelo sistema operacional “/”.

Recovery Manager: Release 12.1.0.1.0 – Production on Fri Sep 25 14:59:17 2015

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DG1 (DBID=1872722065)

connected to auxiliary database: DG2ST (not mounted)

RMAN> duplicate target database for standby;

Starting Duplicate Db at 25-SEP-15

using target database control file instead of recovery catalog

allocated channel: ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: SID=111 device type=DISK

contents of Memory Script:

{

  restore clone standby controlfile;

}

executing Memory Script

Starting restore at at 25-SEP-15

using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore

channel ORA_AUX_DISK_1: restoring control file

channel ORA_AUX_DISK_1: reading from backup piece /oracle/backup/control_DG1_07o6ou86_1_1.bkp

channel ORA_AUX_DISK_1: piece handle=/oracle/backup/control_DG1_07o6ou86_1_1.bkp tag=TAG20130410T225358

channel ORA_AUX_DISK_1: restored backup piece 1

channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01

output file name=/oracle/oradata/DG2ST/control01.ctl

output file name=/oracle/oradata/DG2ST/control02.ctl

Finished restore at at 25-SEP-15

contents of Memory Script:

{

  sql clone ‘alter database mount standby database’;

}

executing Memory Script

sql statement: alter database mount standby database

contents of Memory Script:

{

  set newname for tempfile  1 to

“/oracle/oradata/DG2ST /temp01.dbf”;

  switch clone tempfile all;

  set newname for datafile  1 to

“/oracle/oradata/DG2ST /system01.dbf”;

  set newname for datafile  2 to

“/oracle/oradata/DG2ST/sysaux01.dbf”;

  set newname for datafile  3 to

“/oracle/oradata/DG2ST/undotbs01.dbf”;

  set newname for datafile  4 to

“/oracle/oradata/DG2ST/users01.dbf”;

  set newname for datafile  5 to

“/oracle/oradata/DG2ST/example01.dbf”;

  restore

  clone database

  ;

}

executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /oracle/oradata/DG2ST/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 25-SEP-15

using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore

channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set

channel ORA_AUX_DISK_1: restoring datafile 00002 to /oracle/oradata/DG2ST/sysaux01.dbf

channel ORA_AUX_DISK_1: restoring datafile 00003 to /oracle/oradata/DG2ST/undotbs01.dbf

channel ORA_AUX_DISK_1: restoring datafile 00004 to /oracle/oradata/DG2ST/users01.dbf

channel ORA_AUX_DISK_1: reading from backup piece /oracle/backup/DG_1_2_1_02o6ou56_1_1.bkp

channel ORA_AUX_DISK_1: piece handle=/oracle/backup/DG1_2_1_02o6ou56_1_1.bkp tag=TAG20130410T225222

channel ORA_AUX_DISK_1: restored backup piece 1

channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:25

channel ORA_AUX_DISK_1: starting datafile backup set restore

channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set

channel ORA_AUX_DISK_1: restoring datafile 00001 to /oracle/oradata/DG2ST/system01.dbf

channel ORA_AUX_DISK_1: restoring datafile 00005 to /oracle/oradata/DG2ST/example01.dbf

channel ORA_AUX_DISK_1: reading from backup piece /oracle/backup/DG1_1_1_01o6ou56_1_1.bkp

channel ORA_AUX_DISK_1: piece handle=/oracle/backup/DG1_1_1_01o6ou56_1_1.bkp tag=TAG20130410T225222

channel ORA_AUX_DISK_1: restored backup piece 1

channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:55

Finished restore at 25-SEP-15

contents of Memory Script:

{

  switch clone datafile all;

}

executing Memory Script

datafile 1 switched to datafile copy

input datafile copy RECID=2 STAMP=812419999 file name=/oracle/oradata/DG2ST/system01.dbf

datafile 2 switched to datafile copy

input datafile copy RECID=3 STAMP=812419999 file name=/oracle/oradata/DG2ST/sysaux01.dbf

datafile 3 switched to datafile copy

input datafile copy RECID=4 STAMP=812419999 file name=/oracle/oradata/DG2ST/undotbs01.dbf

datafile 4 switched to datafile copy

input datafile copy RECID=5 STAMP=812419999 file name=/oracle/oradata/DG2ST/users01.dbf

datafile 5 switched to datafile copy

input datafile copy RECID=6 STAMP=812419999 file name=/oracle/oradata/DG2ST/example01.dbf

Finished Duplicate Db at 25-SEP-15

RMAN>

Restore finalizado com sucesso.

Vamos realmente conferir se o banco DG2ST restaurado está no modo STANDBY:

SQL> select name, db_unique_name, database_role from v$database;

NAME  DB_UNIQUE_NAME  DATABASE_ROLE

——— —————————— —————-

DG1  DG2ST  PHYSICAL STANDBY

Show, nosso banco DG2ST está definido como PHYSICAL STANDBY.

Agora com a restauração completa do banco de dados DG2ST, temos agora que informar ao database primário (DG1) para começar a enviar os logs das alterações feitas para o banco DG2ST.

Isso é feito conforme o parâmetro log_archive_dest_state_2.

Agora, através desse segundo destino de archive habilitado, todas as alterações feitas no DG1 será automaticamente enviada para o banco DG2ST (database standby).

Com os logs sendo encaminhado no banco DG2ST, vamos informar ao Oracle Data Guard para que o banco DG2ST comece a trabalhar com esses logs que estão sendo encaminhado do banco DG1.

Ao executar os comandos abaixo, estamos solicitando para que o Data Guard inicie os processos background para que  automaticamente sejam restaurados os logs.

SQL> show parameter instance_name

NAME     TYPE VALUE

———————————— ———– ——————————

instance_name     string stdby

SQL> alter database recover managed standby database disconnect;

Database altered.

SQL>

Agora que fizemos isso, temos o nosso Data Guard pronto e habilitado.

Agora para finalizar vamos verificar o sincronismo do Data Guard está funcionando. Para isso, temos que checar se o destino de log 1 está na mesma sequência do destino de log 2, ou seja, cada sequência gerada no destino 1 (destino do banco DG1l) deverá gerar a mesma sequência no destino 2 (destino do banco DG2ST), garantindo assim que ambas estão sincronizadas.

Essa forma de monitorar, funciona apenas para o tipo do Data Guard que estamos criando, o tipo ASYNC. Existe a forma SYNC, que muda a forma de como monitorar também, mais isso fica para um próximo artigo, por enquanto basta saber que o Data Guard ASYNC deve gerar a mesma sequência no destino 1 como no destino 2.

Vamos verificar através da view v$archived_log, conforme query abaixo:

Deve ser rodado está query no DG1.

SQL>  select

 2  thread#,

 3  dest_id,

 4  sequence#,

 5  first_time,

 6  next_time

 7  from v$archived_log

 8  where resetlogs_change# = (select resetlogs_change# from v$database)

 9* order by thread#, sequence#, dest_id;

  THREAD#    DEST_ID  SEQUENCE# FIRST_TIME          NEXT_TIME

———- ———- ———- ——————- ——————-

        1          1          4 25-09-2015 21:51:01 25-09-2015 22:01:25

        1          1          5 25-09-2015 22:01:25 25-09-2015 22:53:49

        1          2          5 25-09-2015 22:01:25 25-09-2015 22:53:49

        1          1          6 25-09-2015 22:53:49 25-09-2015 23:58:46

        1          2          6 25-09-2015 22:53:49 25-09-2015 23:58:46

        1          1          7 25-09-2015 23:58:46 25-09-2015 00:02:31

        1          2          7 25-09-2015 23:58:46 25-09-2015 00:02:31

        1          1          8 25-09-2015 00:02:31 25-09-2015 00:07:34

        1          2          8 25-09-2015 00:02:31 25-09-2015 00:07:34

        1          1          9 25-09-2015 00:07:34 25-09-2015 00:25:01

        1          2          9 25-09-2015 00:07:34 25-09-2015 00:25:01

        1          1         10 25-09-2015 00:25:01 25-09-2015 00:25:02

        1          2         10 25-09-2015 00:25:01 25-09-2015 00:25:02

        1          1         11 25-09-2015 00:25:02 25-09-2015 00:12:03

        1          2         11 25-09-2015 00:25:02 25-09-2015 00:12:03

        1          1         12 25-09-2015 00:12:03 25-09-2015 00:15:46

        1          2         12 25-09-2015 00:12:03 25-09-2015 00:15:46

Observe que a partir da sequência 5, o Oracle está gerando a mesma sequência tanto no destino 1 como no destino 2. Isso se repete até o sequência 12, que é a última sequência gerada para o banco DG1.

Para validar a sincronização, podemos forçar a geração de uma nova sequência, execute o comando abaixo.

SQL> alter system switch logfile;

Agora após feito isso, checamos novamente com a consulta acima, para verificar se a sequência 13 foi gerada no destino 1 e destino 2.

SQL>  select

 2  thread#,

 3  dest_id,

 4  sequence#,

 5  first_time,

 6  next_time

 7  from v$archived_log

 8  where resetlogs_change# = (select resetlogs_change# from v$database)

 9* order by thread#, sequence#, dest_id;

  THREAD#    DEST_ID  SEQUENCE# FIRST_TIME          NEXT_TIME

———- ———- ———- ——————- ——————-

        1          1          4 25-09-2015 21:51:01 25-09-2015 22:01:25

        1          1          5 25-09-2015 22:01:25 25-09-2015 22:53:49

        1          2          5 25-09-2015 22:01:25 25-09-2015 22:53:49

        1          1          6 25-09-2015 22:53:49 25-09-2015 23:58:46

        1          2          6 25-09-2015 22:53:49 25-09-2015 23:58:46

        1          1          7 25-09-2015 23:58:46 25-09-2015 00:02:31

        1          2          7 25-09-2015 23:58:46 25-09-2015 00:02:31

        1          1          8 25-09-2015 00:02:31 25-09-2015 00:07:34

        1          2          8 25-09-2015 00:02:31 25-09-2015 00:07:34

        1          1          9 25-09-2015 00:07:34 25-09-2015 00:25:01

        1          2          9 25-09-2015 00:07:34 25-09-2015 00:25:01

        1          1         10 25-09-2015 00:25:01 25-09-2015 00:25:02

        1          2         10 25-09-2015 00:25:01 25-09-2015 00:25:02

        1          1         11 25-09-2015 00:25:02 25-09-2015 00:12:03

        1          2         11 25-09-2015 00:25:02 25-09-2015 00:12:03

        1          1         12 25-09-2015 00:12:03 25-09-2015 00:15:46

        1          2         12 25-09-2015 00:12:03 25-09-2015 00:15:46

        1          1         13 25-09-2015 00:15:46 25-09-2015 00:17:30

        1          2         13 25-09-2015 00:15:46 25-09-2015 00:17:30

Olhe e veja a sequência 13 foi gerada em ambos os destino.

Agora repita o comando do switch do redo e veja como ficou a sequência 14:

SQL>  select

 2  thread#,

 3  dest_id,

 4  sequence#,

 5  first_time,

 6  next_time

 7  from v$archived_log

 8  where resetlogs_change# = (select resetlogs_change# from v$database)

 9* order by thread#, sequence#, dest_id;

  THREAD#    DEST_ID  SEQUENCE# FIRST_TIME          NEXT_TIME

———- ———- ———- ——————- ——————-

        1          1          4 25-09-2015 21:51:01 25-09-2015 22:01:25

        1          1          5 25-09-2015 22:01:25 25-09-2015 22:53:49

        1          2          5 25-09-2015 22:01:25 25-09-2015 22:53:49

        1          1          6 25-09-2015 22:53:49 25-09-2015 23:58:46

        1          2          6 25-09-2015 22:53:49 25-09-2015 23:58:46

        1          1          7 25-09-2015 23:58:46 25-09-2015 00:02:31

        1          2          7 25-09-2015 23:58:46 25-09-2015 00:02:31

        1          1          8 25-09-2015 00:02:31 25-09-2015 00:07:34

        1          2          8 25-09-2015 00:02:31 25-09-2015 00:07:34

        1          1          9 25-09-2015 00:07:34 25-09-2015 00:25:01

        1          2          9 25-09-2015 00:07:34 25-09-2015 00:25:01

        1          1         10 25-09-2015 00:25:01 25-09-2015 00:25:02

        1          2         10 25-09-2015 00:25:01 25-09-2015 00:25:02

        1          1         11 25-09-2015 00:25:02 25-09-2015 00:12:03

        1          2         11 25-09-2015 00:25:02 25-09-2015 00:12:03

        1          1         12 25-09-2015 00:12:03 25-09-2015 00:15:46

        1          2         12 25-09-2015 00:12:03 25-09-2015 00:15:46

        1          1         13 25-09-2015 00:15:46 25-09-2015 00:17:30

        1          2         13 25-09-2015 00:15:46 25-09-2015 00:17:30

        1          1         14 25-09-2015 00:17:30 25-09-2015 00:23:50

        1          2         14 25-09-2015 00:17:30 25-09-2015 00:23:50

Uma outra de analisar e verificar a sincronia do seu Data Guard é através do arquivo de log do seu banco de dados, veja no banco DG1 a seguinte mensagem:

LNS: Standby redo logfile selected for thread 1 sequence 14 for destination LOG_ARCHIVE_DEST_2

Isso confirma que o processo LNS do banco DG1, capturou a sequência 14 da tread 1 e enviou para o destino LOG_ARCHIVE_DEST_2.

De um more no alert.log, para verificar a transação

Thu Sep 25 00:17:30 2015

Thread 1 advanced to log sequence 14 (LGWR switch)

 Current log# 2 seq# 14 mem# 0: /oracle/oradata/DG1/redo02.log

Thu Sep 25 00:17:30 2015

Archived Log entry 20 added for thread 1 sequence 13 ID 0x4f860f89 dest 1:

Thu Sep 25 00:17:30 2015

LNS: Standby redo logfile selected for thread 1 sequence 14 for destination LOG_ARCHIVE_DEST_

Com o envio da sequência 14, confirmada pelo alert.log do banco DG1, temos no alert.log do DG2ST que o processo RFS capturou a sequência 14 aplicou com sucesso no banco DG2ST.

Thu Sep 25 00:17:58 2015

RFS[4]: Selected log 5 for thread 1 sequence 14 dbid 1334188681 branch 806407947

Thu Sep 25 00:17:58 2015

Archived Log entry 9 added for thread 1 sequence 14 ID 0x4f860f89 dest 1:

Thu Sep 25 00:17:58 2015

Media Recovery Log /oracle/arch/DG1_1_14_806407947.arc

Media Recovery Waiting for thread 1 sequence 15

Conclusões

Bem amigos vimos a criação de um laboratório para Oracle Data Guard 12c, está é uma das formas de trabalhar com o Data Guard, se vocês quiserem apreender mais recomendo estudar as outras formas de configurar o Data Guard, como por exemplo a SYNC, Snapshot Data Guard e Active Data Guard.

É muito importante também aprender os outros tipos de proteção (Maximum Availability. Maximum Performance e Maximum Protection) entender o que o Redo Transport Services pode ajudar na melhoria do seu Data Guard, assim como aprender a administrar melhor o seu Data Guard.

Até a próxima !

André Luiz Dutra Ontalba

André Luiz Dutra Ontalba

André Luiz Dutra Ontalba é um Oracle ACE member, formado em Ciências da Computação, é especialista em Banco de Dados Oracle com sólidos conhecimentos em Engineered Systems, Performance & Tuning, RAC, Oracle Cloud e Oracle ERP's System; Trabalha com Oracle há 17 anos, certificado OCP Oracle 11/12g/Cloud e conta com mais de 27 outras certificações em produtos da Oracle. Atualmente trabalha como Senior Database Architect na Sogeti Luxembourg uma empresa da Capgemini Group. André é fundador do Grupo de Usuários Oracle de Luxemburgo (LUXOUG). Articulista para o OTN, GPO (Grupo de Usuários Oracle Brasil) e LUXOUG. Twitter @aontalba / blog www.dbadutra.com

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress