{"id":149,"date":"2014-04-17T20:35:22","date_gmt":"2014-04-17T23:35:22","guid":{"rendered":"http:\/\/www.fernandosimon.com\/blog\/?p=149"},"modified":"2015-01-25T23:32:27","modified_gmt":"2015-01-26T02:32:27","slug":"oracle-e-maa-artigo-i","status":"publish","type":"post","link":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/","title":{"rendered":"Oracle e MAA &#8211; Artigo I"},"content":{"rendered":"<p style=\"text-align: justify;\">Este artigo \u00e9 o primeiro de uma s\u00e9rie sobre Maximum Availability Architecture (MAA), com os passos, dicas e afins para configurar e manter um ambiente deste porte. No final da s\u00e9rie teremos um ambiente com Oracle RAC tanto no primary quanto no standby. Ambos sincronizados com Data Guard (DG) rodando em alta disponibilidade.<\/p>\n<p style=\"text-align: justify;\">N\u00e3o \u00e9 a inten\u00e7\u00e3o aqui mostrar com configurar um ambiente RAC, j\u00e1 partirei de um ambiente com o RAC instalado e um banco rodando. Utilizarei o Oracle 11GR2 vers\u00e3o 11.2.0.3, j\u00e1 que a inten\u00e7\u00e3o tamb\u00e9m \u00e9 mostrar como atualizar um ambiente em DG. Al\u00e9m disso, tentarei cobrir alguns pontos como \u201creal-time apply\u201d e cria\u00e7\u00e3o do banco standby usando Media Management Layer (MML).<\/p>\n<p style=\"text-align: justify;\">Tentarei ser o mais did\u00e1tico e claro poss\u00edvel e caso tenha alguma d\u00favida, pergunte. Todos os comandos que executei estar\u00e3o no artigo. Infelizmente este primeiro artigo ser\u00e1 extenso (muito) e cheio de detalhes t\u00e9cnicos, n\u00e3o tem como montar um ambiente assim de forma r\u00e1pida e sem os diversos detalhes envolvidos. Infelizmente n\u00e3o existe um guia r\u00e1pido de 10 passos para MAA com RAC, isso n\u00e3o existe. Voc\u00ea ver\u00e1 aqui um guia detalhado do in\u00edcio ao fim sobre como configurar MAA com RAC em ambos os lados.<\/p>\n<p style=\"text-align: justify;\">Provavelmente alguns passos utilizados aqui para a configura\u00e7\u00e3o do ambiente podem ser mais simples na pr\u00e1tica. Espero no final cobrir boa parte de um ambiente DG e MAA: switchover, failover, reisntate, broker, observer e afins.<\/p>\n<p style=\"text-align: justify;\">Uma configura\u00e7\u00e3o como esta seria a aplicada em um ambiente Exadata que necessita de alta disponibilidade. Voc\u00ea teria que configurar MAA com DG entre dois Exadatas, como \u00e9 RAC seria um DG sobre RAC.<\/p>\n<p style=\"text-align: justify;\"><strong>PRIMEIRO ARTIGO<\/strong><\/p>\n<p style=\"text-align: justify;\">Neste primeiro artigo iremos configurar um ambiente DG em dois sites, somente o banco ser\u00e1 replicado. Neste artigo n\u00e3o iremos ver a configura\u00e7\u00e3o do Broker nem failover, switchover e reinstate; isso ficar\u00e1 para pr\u00f3ximos artigos.<\/p>\n<p style=\"text-align: justify;\"><!--more Continue lendo...--><\/p>\n<p style=\"text-align: justify;\"><strong>AMBIENTE<\/strong><\/p>\n<p style=\"text-align: justify;\">A primeira coisa a ser feita em qualquer ambiente MAA \u00e9 entender o ambiente que estamos trabalhando. Aqui, j\u00e1 partimos de um ambiente que chamamos inicialmente de <strong>primary <\/strong>com Oracle RAC 11.2.0.3 sobre 2 n\u00f3s. No ASM temos dois diskgroups DATA e FRA para hospedar o banco de dados. Tamb\u00e9m temos um banco de dados chamado <strong>\u201cmaa\u201d<\/strong>. Como dito acima, a inten\u00e7\u00e3o aqui n\u00e3o \u00e9 mostrar a instala\u00e7\u00e3o de um RAC, existem \u00f3timos artigos na internet sobre como fazer isso.<\/p>\n<p style=\"text-align: justify;\">A imagem abaixo ilustra o ambiente, no servidor voc\u00ea pode descobrir isso atrav\u00e9s do comando \u201ccrsctl stat res \u2013t\u201d:<\/p>\n<p><a href=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-148 size-full\" src=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png\" alt=\"Ambiente-Primary\" width=\"362\" height=\"300\" srcset=\"https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png 362w, https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary-300x248.png 300w\" sizes=\"auto, (max-width: 362px) 100vw, 362px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">O segundo ambiente chamarei de <strong>standby <\/strong>onde temos um RAC instalado, mas sem nenhum banco de dados criado, somente o Grid Infrastricture est\u00e1 instalado e uma inst\u00e2ncia ASM est\u00e1 criada. O banco de dados ser\u00e1 criado aqui atrav\u00e9s da configura\u00e7\u00e3o do DG. A imagem abaixo demonstra este ambiente.<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Standby.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-147 size-full\" src=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Standby.png\" alt=\"Ambiente-Standby\" width=\"352\" height=\"286\" srcset=\"https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Standby.png 352w, https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Standby-300x243.png 300w\" sizes=\"auto, (max-width: 352px) 100vw, 352px\" \/><\/a>Aqui temos uma mudan\u00e7a interessante, no ambiente standby n\u00e3o temos o diskgroup DATA e sim o DG01. Essa \u00e9 uma mudan\u00e7a intencional, deixei assim para que fosse poss\u00edvel explicar alguns detalhes na configura\u00e7\u00e3o do DG. Preferencialmente tenha os mesmos diskgroups em ambos os lados, primary e standby. Isso n\u00e3o ser\u00e1 um problema, vamos ver a frente como contornar.<\/p>\n<p style=\"text-align: justify;\"><strong>ARCHIVES, FLASHBACK E LOGMODE<\/strong><\/p>\n<p style=\"text-align: justify;\">De forma bem resumida DG utiliza archivelogs para sincronizar o primary com o standby, enviando todo e qualquer archive gerado no primary para o standby. Para isso, precisamos que a base esteja em modo ARCHIVELOG. Basta verificar e configurar caso n\u00e3o esteja. Observe nos passos abaixo:<\/p>\n<pre>SQL&gt; SELECT instance_name FROM gv$instance;\r\n\r\nINSTANCE_NAME\r\n----------------\r\nmaa1\r\nmaa2\r\n\r\nSQL&gt; SELECT log_mode, flashback_on FROM v$database;\r\n\r\nLOG_MODE     FLASHBACK_ON\r\n------------ ------------------\r\nNOARCHIVELOG NO\r\n\r\nSQL&gt; ARCHIVE LOG LIST;\r\nDatabase log mode              No Archive Mode\r\nAutomatic archival             Disabled\r\nArchive destination            USE_DB_RECOVERY_FILE_DEST\r\nOldest online log sequence     13\r\nCurrent log sequence           14\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Como visto acima a base n\u00e3o est\u00e1 em modo archivelog e nem est\u00e1 com o flashback habilitado. Habilitar flashback \u00e9 fundamental, ele permite recuperar o banco de dados (fazer o reinstate) do primary em caso de failover de maneira muito (mas muito) mais r\u00e1pida. Isso ser\u00e1 t\u00f3pico de um pr\u00f3ximo artigo, mas no failover a troca entre os papeis entre primary e standby \u00e9 feita de maneira abrupta. Se voc\u00ea tiver habilitado flashback as suas noites ser\u00e3o mais tranquilas e as horas extras menores.<\/p>\n<p style=\"text-align: justify;\">Para configurar tudo corretamente, verifique o par\u00e2metro de destino dos archives e o tamanho que ele pode usar. Dependendo da sua base de dados e da carga sobre ela, recomendo aumentar um pouco o limite da <em>db_recovery_file_dest_size<\/em>. Voc\u00ea at\u00e9 pode configurar outro caminho para o destino dos archives, mas recomendo deixar tudo gerenciado pelo mesmo par\u00e2metro e apontando para o <em>db_recovery_file_dest<\/em>. Caso queira ajustar algo, utilize:<\/p>\n<pre>ALTER SYSTEM SET db_recovery_file_dest='+FRA' SCOPE=SPFILE SID='*';\r\nALTER SYSTEM SET db_recovery_file_dest_size=4096M  SCOPE=SPFILE SID='*'; \r\n<\/pre>\n<p style=\"text-align: justify;\">Com tudo configurado, basta fazer um restart do banco e habilitar flashback e archivelog. Como estamos em um RAC, acostume-se com seus comandos:<\/p>\n<pre>[oracle@rac11pri01 ~]$ srvctl stop database -d maa -o immediate\r\n[oracle@rac11pri01 ~]$ \r\n[oracle@rac11pri01 ~]$ srvctl start instance -d maa -i maa1 -o mount\r\n[oracle@rac11pri01 ~]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 11.2.0.3.0 Production on Sat Mar 29 12:15:01 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\n\r\nConnected to:\r\nOracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production\r\nWith the Partitioning, Real Application Clusters and Automatic Storage Management options\r\n\r\nSQL&gt; ALTER DATABASE ARCHIVELOG;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE FLASHBACK ON;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE OPEN;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; exit\r\nDisconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production\r\nWith the Partitioning, Real Application Clusters and Automatic Storage Management options\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ srvctl start instance -d maa -i maa2\r\n[oracle@rac11pri01 ~]$ srvctl status database -d maa\r\nInstance maa1 is running on node rac11pri01\r\nInstance maa2 is running on node rac11pri02\r\n[oracle@rac11pri01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Como disse, o pilar b\u00e1sico do DG s\u00e3o os archiveslogs, mas infelizmente muitas vezes temos tabelas em modo NOLOGGING. Acredito que voc\u00ea j\u00e1 percebeu que isso pode n\u00e3o ser ideal em um DG, mas temos uma forma de corrigir isso com o \u201cFORCE LOGGING\u201d. Habilitando o \u201cFORCE LOGGING\u201d far\u00e1 o banco de dados a gerar sempre archivelogs mesmo que a sua tabela esteja em NOLOGGING.<\/p>\n<p style=\"text-align: justify;\">Dependendo o modo como voc\u00ea configura o seu DG existe a possibilidade de n\u00e3o usar o \u201cFORCE LOGGING\u201d. Basicamente uma informa\u00e7\u00e3o sobre a transa\u00e7\u00e3o \u00e9 escrita no redo mesmo a opera\u00e7\u00e3o sendo NOLOGGING, somente o seu archive n\u00e3o \u00e9 gerado. N\u00e3o uso assim e n\u00e3o recomendo deixar sem force logging. Configurar o FORCE LOGGING n\u00e3o custa nada e voc\u00ea ir\u00e1 agradecer no futuro.<\/p>\n<p style=\"text-align: justify;\">A configura\u00e7\u00e3o \u00e9 simples, observe abaixo:<\/p>\n<pre>SQL&gt; SELECT log_mode, flashback_on, force_logging FROM v$database;\r\n\r\nLOG_MODE     FLASHBACK_ON       FOR\r\n------------ ------------------ ---\r\nARCHIVELOG   YES                NO\r\n\r\nSQL&gt; ALTER DATABASE FORCE LOGGING;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; SELECT log_mode, flashback_on, force_logging FROM v$database;\r\n\r\nLOG_MODE     FLASHBACK_ON       FOR\r\n------------ ------------------ ---\r\nARCHIVELOG   YES                YES\r\n\r\nSQL&gt;\r\n<\/pre>\n<p><strong>PREPARANDO PFILE E SPFILE<\/strong><\/p>\n<p style=\"text-align: justify;\">Agora vamos come\u00e7ar a configurar o primary para o DG, deixando todos os par\u00e2metros corretamente definidos (at\u00e9 para passos e artigos futuros). Como vamos trabalhar com os par\u00e2metros eu recomendo come\u00e7ar com o um backup do spfile, nunca se sabe n\u00e3o \u00e9.<\/p>\n<pre>SQL&gt; CREATE PFILE = '\/tmp\/pfile-primary-bkp.ora' FROM spfile;\r\n\r\nFile created.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p><strong>DB_NAME e DB_UNIQUE_NAME<\/strong><\/p>\n<p style=\"text-align: justify;\">Estes dois par\u00e2metros s\u00e3o fundamentais em um ambiente DG. S\u00e3o eles que v\u00e3o definir o nome da base de dados e das inst\u00e2ncias standby. O primeiro par\u00e2metro \u00e9 o <strong>db_name<\/strong>, respons\u00e1vel por dar nome ao banco de dados. O valor definido aqui ser\u00e1 o mesmo utilizando tanto no primary quanto no standby.<\/p>\n<pre>SQL&gt; SHOW PARAMETER db_name\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\ndb_name                              string      maa\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">O pr\u00f3ximo par\u00e2metro <em>db_unique_name<\/em> \u00e9 utilizado para identificar qual o banco que voc\u00ea est\u00e1, primary ou standby. O valor deste par\u00e2metro ficar\u00e1 diferente entre o primary e o standy (ao contr\u00e1rio do db_name). No primary n\u00f3s n\u00e3o modificamos o seu valor, deixamos ele no valor default.<\/p>\n<p style=\"text-align: justify;\">Al\u00e9m disso, a sua defini\u00e7\u00e3o \u00e9 utilizada em outros par\u00e2metros e configura\u00e7\u00f5es do DG, como por exemplo no redo transportation. Em alguns casos (como no 10G) era poss\u00edvel ter o mesmo valor em ambos os lados, com a vers\u00e3o 11 se isso estiver ocorrendo primary e standby n\u00e3o se comunicam. Essas informa\u00e7\u00f5es voc\u00ea pode ver neste documento (<a href=\"http:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41134.pdf\" target=\"_blank\">Oracle Data Guard Concepts and Administration<\/a>).<\/p>\n<p style=\"text-align: justify;\">Um detalhe importante, o valor do db_unique_name quando n\u00e3o est\u00e1 configurado (fixo no spfile) deriva do db_name. Assim, \u00e9 fundamental garantir que ele esteja definido no spfile da primary. Veja abaixo:<\/p>\n<pre>SQL&gt; SHOW PARAMETER db_unique_name\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\ndb_unique_name                       string      maa\r\nSQL&gt;\r\nSQL&gt;  ALTER SYSTEM SET db_unique_name='maa' SCOPE = spfile SID = '*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>LOG_ARCHIVE_CONFIG<\/strong><\/p>\n<p style=\"text-align: justify;\">Este par\u00e2metro \u00e9 utilizado para definir quem participa do DG, quais as bases que ir\u00e3o trocar os archives. Se voc\u00ea tiver mais de um standby voc\u00ea definir\u00e1 todos eles aqui, se voc\u00ea adicionar mais um standby no futuro ter\u00e1 que modificar este par\u00e2metro.<\/p>\n<p style=\"text-align: justify;\">A configura\u00e7\u00e3o deste par\u00e2metro \u00e9 simples, basta definir como no exemplo abaixo onde temos os dois bancos. Os valores aceitos para este par\u00e2metro s\u00e3o os definidos no par\u00e2metro db_unique_name. Desta forma, observe que j\u00e1 definimos como ficar\u00e1 para o nome para o standby (maastb):<\/p>\n<pre>SQL&gt; SHOW PARAMETER log_archive_config\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nlog_archive_config                   string\r\nSQL&gt;\r\nSQL&gt; ALTER SYSTEM SET log_archive_config='DG_CONFIG=(maa,maastb)' SCOPE = spfile SID = '*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>LOG_ARCHIVE_DEST_XX<\/strong><\/p>\n<p style=\"text-align: justify;\">Antes de alterarmos estes par\u00e2metros precisamos entender algumas informa\u00e7\u00f5es importantes do DG. Com as defini\u00e7\u00f5es que podem ser especificadas nestes par\u00e2metros definimos como o DG ir\u00e1 sincronizar os archives logs, quem ser\u00e1 respons\u00e1vel por fazer isso e quando fazer isso.<\/p>\n<p style=\"text-align: justify;\">A primeira defini\u00e7\u00e3o importante a ser entendida \u00e9 como os archives s\u00e3o sincronizados, a forma como redo \u00e9 transportado (o que chamamos de <strong><em>redo transportation<\/em><\/strong>):<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>SYNC<\/strong>: No modo s\u00edncrono o redo transporation entre o primary e o standy acontece de forma s\u00edncrona, isso quer dizer que uma transa\u00e7\u00e3o no primary somente retorna ao usu\u00e1rio se o standby recebeu ela. Consequentemente isso pode trazer alguns \u201cproblemas\u201d se a sua rede n\u00e3o tiver o throughput necess\u00e1rio para conseguir transportar as informa\u00e7\u00f5es. Imagine que a lat\u00eancia de sua rede ser\u00e1 somada ao tempo de qualquer commit do usu\u00e1rio.<\/li>\n<li><strong>ASYNC<\/strong>: Neste modo o redo do primary n\u00e3o \u00e9 transportado com sincronia, isso quer dizer que o commit do usu\u00e1rio n\u00e3o depende do envio da sua transa\u00e7\u00e3o ao standby. Fica mais r\u00e1pido, mas menos seguro.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Al\u00e9m da forma s\u00edncrona ou n\u00e3o do envio do redo tamb\u00e9m \u00e9 necess\u00e1rio especificar uma \u201cgarantia\u201d de recebimento por parte do standby. Assim temos duas op\u00e7\u00f5es:<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>AFFIRM<\/strong>: garante que o standby recebeu e escreveu o redo no seu grupo de redo (standby redo log \u2013 explicarei mais a frente).<\/li>\n<li><strong>NOAFFIRM<\/strong>: o primary n\u00e3o espera o ACK do standby sobre a escrita completa do redo enviado. Assim o standby responde o ACK antes de garantir a escrita em seu grupo de redo.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Depois de escolher a sincronia entre as bases \u00e9 necess\u00e1rio delimitar para o que o log_archive_dest ser\u00e1 v\u00e1lido. Esta defini\u00e7\u00e3o \u00e9 feita atrav\u00e9s do atributo <strong>VALID_FOR<\/strong> que \u00e9 dividido em duas partes:<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>REDO_LOG_TYPE<\/strong>:\n<ul>\n<li><strong>ONLINE_LOGFILE<\/strong>: com este par\u00e2metro definido no VALID_FOR o LOG_ARCHIVE_DEST somente ser\u00e1 utilizado quando estiver arquivando os redolog onlines.<\/li>\n<li><strong>STANDBY_LOGFILE<\/strong>: o destino somente ser\u00e1 v\u00e1lido para standby redologs (explicarei eles mais a frente).<\/li>\n<\/ul>\n<ul>\n<li><strong>ALL_LOGFILES<\/strong>: o destino ser\u00e1 utilizado independente do tipo de onlinelog. Como disse anteriormente, se utilizar um \u00fanico local pode ficar mais simples a ger\u00eancia.<\/li>\n<\/ul>\n<\/li>\n<li><strong>DATABASE_ROLE<\/strong>:\n<ul>\n<ul>\n<li><strong>PRIMARY_ROLE<\/strong>: o destino somente ser\u00e1 utilizando quando o banco estiver atuando como primary.<\/li>\n<li><strong>STANDBY_ROLE<\/strong>: ativo somente quando estiver atuando como standby.<\/li>\n<li><strong>ALL_ROLES<\/strong>: para ambos os casos acima.<\/li>\n<\/ul>\n<\/ul>\n<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Com estas defini\u00e7\u00f5es podemos montar o log_archive_dest corretamente, vou tomar como base o exemplo abaixo:<\/p>\n<pre>SQL&gt; SHOW PARAMETER log_archive_dest_1\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nlog_archive_dest_1                   string\r\n...\r\n...\r\nSQL&gt; ALTER SYSTEM SET log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=maa' SCOPE=spfile SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Vamos analisar em partes o que foi definido acima para deixar tudo claro:<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>LOCATION<\/strong>: definido que o destino dos archives ser\u00e1 o que estiver definido no par\u00e2metro DB_RECOVER_FILE_DEST.<\/li>\n<li><strong>ALL_LOGFILES<\/strong>: isso quer dizer que este destino ser\u00e1 utilizado independente do tipo de onlinelog gerado.<\/li>\n<li><strong>ALL_ROLES<\/strong>: integrado com o par\u00e2metro acima, o destino ser\u00e1 utilizado independente da role do banco.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Com as defini\u00e7\u00f5es acima temos que o LOG_ARCHIVE_DEST_1 ser\u00e1 utilizado quando qualquer archive for gerado neste banco de dados, independe da role (primary ou standby) e do tipo de onlinelog (redo ou standby). Basicamente defini o armazenamento local. Claro que voc\u00ea pode definir configura\u00e7\u00f5es mais espec\u00edficas, por exemplo, ter um local especifico para standby logs e redo logs. Voc\u00ea pode querer fazer isso para aliviar a carga sobre os discos por exemplo. Da forma como definido acima, tudo estar\u00e1 armazenando na <em>flash_recovery_area<\/em>.<\/p>\n<p style=\"text-align: justify;\">Como voc\u00ea deve ter percebido, n\u00e3o foi definido nenhum local ou banco remoto para enviar os archives, somente definimos o que fazer localmente. Para especificar o que e como enviar para o standby adicionamos mais um destino, observe o exemplo abaixo:<\/p>\n<pre>SQL&gt; ALTER SYSTEM SET log_archive_dest_2='SERVICE=maastb SYNC AFFIRM LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=maastb' SCOPE=spfile SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Novamente verificamos os detalhes:<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>SERVICE<\/strong>: define que o destino ser\u00e1 um servi\u00e7o TNS, o que estiver definido aqui tem que ser igual ao que est\u00e1 no tnsnames.ora. Como estamos em RAC, o TNS deve ser o mesmo para ambas as inst\u00e2ncias.<\/li>\n<li><strong>SYNC<\/strong>: aqui, o logwriter somente retornar\u00e1 a transa\u00e7\u00e3o ao usu\u00e1rio se o standby a receber;<\/li>\n<li><strong>AFFIRM<\/strong>: al\u00e9m do logwriter esperar o standby receber, ele ir\u00e1 esperar at\u00e9 que o standby informar que escrever com sucesso em seu standby logs<\/li>\n<li><strong>LGWR<\/strong>: este par\u00e2metro era utilizado para diferenciar quem era respons\u00e1vel por enviar os dados ao standby. Deixo aqui para uma garantia que ser\u00e1 o logwriter.<\/li>\n<li><strong>ONLINE_LOGFILES<\/strong>: este destino ser\u00e1 utilizado somente quando estiver arquivando os redolog, voc\u00ea n\u00e3o e n\u00e3o tem motivo para enviar os standby logs.<\/li>\n<li><strong>PRIMARY_ROLE<\/strong>: novamente, o destino somente ser\u00e1 utilizado quando estiver atuando como primary.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Com a defini\u00e7\u00e3o acima garantimos o envio s\u00edncrono dos dados entre o primary e o standby. Tamb\u00e9m garantido o recebimento e aplica\u00e7\u00e3o dos mesmos pelo standby.<\/p>\n<p style=\"text-align: justify;\">Antes de prosseguirmos, eu acredito que seja importante desligar temporariamente (ser\u00e1 ligado s\u00f3 no fim do processo) o log_archive_dest que aponta para o standby. Caso voc\u00ea tenha alguma inst\u00e2ncia reiniciada voc\u00ea n\u00e3o ver\u00e1 erro por erro de envio ao destino acima definido.<\/p>\n<pre>SQL&gt; ALTER SYSTEM SET log_archive_dest_state_2=DEFER SCOPE=spfile SID='*';\r\nSystem altered.\r\n\r\nSQL\r\n<\/pre>\n<p style=\"text-align: justify;\">Se voc\u00ea quiser, defina um acr\u00f4nimo para seus archives, quando usamos OFA, o seu nome pode ficar confuso para quem ainda n\u00e3o tem dom\u00ednio:<\/p>\n<pre>SQL&gt; ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=spfile SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt; \r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>DB_FILE_NAME_CONVERT, LOG_FILE_NAME_CONVERT e STANDBY_FILE_MANAGEMENT<\/strong><\/p>\n<p style=\"text-align: justify;\">Os dois primeiros par\u00e2metros s\u00e3o importantes em ambientes primary e standby que diferem em sua estrutura de diret\u00f3rios para datafiles\/logfiles. Alguns passos acima voc\u00ea observou que intencionalmente o standby tem uma estrutura de diskgroups diferentes do primary. Esta diferen\u00e7a ser\u00e1 corrigida aqui.<\/p>\n<p style=\"text-align: justify;\">Ambos os par\u00e2metros recebem conjunto (pares) de informa\u00e7\u00f5es, basicamente voc\u00ea informa o caminho de origem e qual o caminho que o substituir\u00e1. Isso \u00e9 importante, pois ao criarmos um novo datafile no primary ele ser\u00e1 criado corretamente no standby. Na documenta\u00e7\u00e3o da Oracle, existe a informa\u00e7\u00e3o de que ele \u00e9 considerado\/avaliado em pares, o primeiro \u00e9 substitu\u00eddo pelo segundo e assim sucessivamente (eles at\u00e9 comentam em express\u00f5es regulares para an\u00e1lise). Veja as defini\u00e7\u00f5es abaixo:<\/p>\n<pre>SQL&gt; ALTER SYSTEM SET db_file_name_convert='+DG01\/maastb','+DATA\/maa','+FRA\/maastb','+FRA\/maa' SCOPE=SPFILE SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Observe que aqui, caso o banco receba alguma informa\u00e7\u00e3o quanto a cria\u00e7\u00e3o de um datafile o caminho ser\u00e1 substitu\u00eddo de \u2018+DG01\/maastb\u2019 para \u2018+DATA\/maa\u2019. Note que estamos definindo isso para a base atual que ser\u00e1 a primary, mas j\u00e1 estamos preparando ela para caso ela vire standby os par\u00e2metros j\u00e1 estejam corretos.<\/p>\n<p style=\"text-align: justify;\">Fazemos a mesma coisa para os logfiles:<\/p>\n<pre>SQL&gt; ALTER SYSTEM SET log_file_name_convert='+DG01\/maastb','+DATA\/maa','+FRA\/maastb','+FRA\/maa' SCOPE=spfile SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">O par\u00e2metro standby_file_management garante uma seguran\u00e7a maior no gerenciamento dos dados. Definido ele como AUTO garantimos que todo e qualquer arquivo criado ou deletado no primary ser\u00e1 automaticamente replicado no standby. O detalhe \u00e9 que ele vem desabilitado por padr\u00e3o.<\/p>\n<pre>SQL&gt; SHOW PARAMETER standby_file_management;\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nstandby_file_management              string      MANUAL\r\nSQL&gt; ALTER SYSTEM SET standby_file_management=AUTO SCOPE=SPFILE SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>FAL_SERVER<\/strong><\/p>\n<p style=\"text-align: justify;\">Este par\u00e2metro define onde que a inst\u00e2ncia ir\u00e1 buscar os archives caso ocorra algum gap de recebimento. Pense no seguinte caso, voc\u00ea precisa fazer uma manuten\u00e7\u00e3o no seu ambiente RAC standby e desliga ele por dois dias, na volta ele ter\u00e1 que buscar os archives em algum lugar (geralmente a primary), esse \u00e9 o par\u00e2metro que define isso. O valor deste par\u00e2metro deve ser igual ao que est\u00e1 no TNS, em RAC garanta que exista no TNS de ambas as inst\u00e2ncias:<\/p>\n<pre>SQL&gt; ALTER SYSTEM SET fal_server=maastb SCOPE=spfile SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Com isso, terminamos a prepara\u00e7\u00e3o do spfile da primary, agora vamos preparar o spfile da base standby.<\/p>\n<p style=\"text-align: justify;\"><strong>TNSNAMES<\/strong><\/p>\n<p style=\"text-align: justify;\">Antes de continuarmos temos que editar o TNSNAMES de todas as inst\u00e2ncias do RAC para criar entradas para o standby. Lembre de todos os par\u00e2metros que definimos previamente e que apontam para o TNS, ele deve casar com os valores que definimos nos par\u00e2metros anteriores. O TNS atual (de uma inst\u00e2ncia do primary):<\/p>\n<pre>[oracle@rac11pri01 ~]$ cat \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# tnsnames.ora Network Configuration File: \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# Generated by Oracle configuration tools.\r\n\r\nMAA =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maa)\r\n    )\r\n  )\r\n\r\n[oracle@rac11pri01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Vamos editar ele e adicionar a entrada para o standby (observe que foi adicionado o MAASTB):<\/p>\n<pre>[oracle@rac11pri01 ~]$ cat \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# tnsnames.ora Network Configuration File: \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# Generated by Oracle configuration tools.\r\n\r\nMAA =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maa)\r\n    )\r\n  )\r\n\r\n[oracle@rac11pri01 ~]$\r\nVamos editar ele e adicionar a entrada para o standby (observe que foi adicionado o MAASTB):\r\n[oracle@rac11pri01 ~]$ vi \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ cat \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# tnsnames.ora Network Configuration File: \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# Generated by Oracle configuration tools.\r\n\r\nMAA =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maa)\r\n    )\r\n  )\r\n\r\nMAASTB =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maastb)\r\n    )\r\n  )\r\n\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ tnsping maastb\r\n\r\nTNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 30-MAR-2014 10:05:36\r\n\r\nCopyright (c) 1997, 2011, Oracle.  All rights reserved.\r\n\r\nUsed parameter files:\r\n\r\n\r\nUsed TNSNAMES adapter to resolve the alias\r\nAttempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb-scan.tjsc.jus.br)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = maastb)))\r\nOK (10 msec)\r\n[oracle@rac11pri01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Como TNS foi editado em \u00fanico n\u00f3 para economizar tempo voc\u00ea copia ele (atrav\u00e9s do scp mesmo) entre todos os n\u00f3s do primary e para todos os n\u00f3s do standby:<\/p>\n<pre>[oracle@rac11pri01 ~]$ scp \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora rac11pri02:\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\ntnsnames.ora                                                                                                                                                                                               100%  534     0.5KB\/s   00:00\r\n[oracle@rac11pri01 ~]$ scp \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora rac11stb01:\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\noracle@rac11stb01's password:\r\ntnsnames.ora                                                                                                                                                                                               100%  534     0.5KB\/s   00:00\r\n[oracle@rac11pri01 ~]$ scp \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora rac11stb02:\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\noracle@rac11stb02's password:\r\ntnsnames.ora                                                                                                                                                                                               100%  534     0.5KB\/s   00:00\r\n[oracle@rac11pri01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>PREPARANDO STANDBY, SPFILE e DIRET\u00d3RIOS<\/strong><\/p>\n<p style=\"text-align: justify;\">Depois do SPFILE da primary e do TNS configurado podemos come\u00e7ar os ajustes do spfile da stanby. Tomamos como base o spfile da primary fazendo uma c\u00f3pia e enviando ela para o RAC standby:<\/p>\n<pre>SQL&gt; CREATE PFILE = '\/tmp\/pfile-primary.ora' FROM spfile;\r\n\r\nFile created.\r\n\r\nSQL&gt; exit\r\nDisconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production\r\nWith the Partitioning, Real Application Clusters and Automatic Storage Management options\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ scp \/tmp\/pfile-primary.ora oracle@rac11stb01:\/tmp\/pfile-primary-standby.ora\r\noracle@rac11stb01's password:\r\npfile-primary.ora                                                                                                                                                                                          100% 1854     1.8KB\/s   00:00\r\n[oracle@rac11pri01 ~]$ \r\n<\/pre>\n<p style=\"text-align: justify;\">Depois de copiado vamos editar os par\u00e2metros abaixo no spfile que foi copiado para o standby:<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>audit_file_dest<\/strong>: local novo, precisamos ajustar para o nome correto.<\/li>\n<li><strong>control_files<\/strong>: mesmo motivo do acima. Observe que foi alterado para +DG01 ao inv\u00e9s de +DATA<\/li>\n<li><strong>db_create_file_dest<\/strong>: voltamos ao mesmo ponto, a estrutura de diskgroups \u00e9 diferente do primary.<\/li>\n<li><strong>db_file_name_convert<\/strong>: aqui invertemos as duplas definidas, lembre-se que estamos no standby<\/li>\n<li><strong>db_unique_name<\/strong>: lembre da defini\u00e7\u00e3o de t\u00f3picos anteriores, no standby este par\u00e2metro recebe um valor distinto do primary.<\/li>\n<li><strong>fal_server<\/strong>: o standby recorre ao primary.<\/li>\n<li><strong>log_archive_dest_1<\/strong>: uma simples mudan\u00e7a, o que estava \u201cMAA\u201d vira \u201cMAASTB\u201d<\/li>\n<li><strong>log_archive_dest_2<\/strong>: o contr\u00e1rio do anterior, o que era \u201cMAASTB\u201d vira \u201cMAA\u201d<\/li>\n<li><strong>log_file_name_convert<\/strong>: mesmo caso do db_file_name_convert, invertemos os valores.<\/li>\n<li><strong>remote_listener<\/strong>: ele deve apontar para o servidor que hospeda o standby.<\/li>\n<li><strong>maaX.*<\/strong>: todos os par\u00e2metros que referenciavam inst\u00e2ncias espec\u00edficas do primary foram substitu\u00eddas para as equivalentes do standby (seguindo o definido pelo db_unique_name).<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Observe como ficou o pfile editado:<\/p>\n<pre>[oracle@rac11stb01 ~]$ vi \/tmp\/pfile-primary-standby.ora\r\n[oracle@rac11stb01 ~]$ \r\n[oracle@rac11stb01 ~]$ cat \/tmp\/pfile-primary-standby.ora\r\n*.audit_file_dest='\/u01\/app\/oracle\/admin\/maastb\/adump'\r\n*.audit_trail='db'\r\n*.cluster_database=true\r\n*.compatible='11.2.0.0.0'\r\n*.control_files='+DG01\/maastb\/controlfile\/current.273.843488553','+FRA\/maastb\/controlfile\/current.256.843488553'\r\n*.db_block_size=8192\r\n*.db_create_file_dest='+DG01'\r\n*.db_domain=''\r\n*.db_file_name_convert='+DATA\/maa','+DG01\/maastb','+FRA\/maa','+FRA\/maastb'\r\n*.db_name='maa'\r\n*.db_recovery_file_dest='+FRA'\r\n*.db_recovery_file_dest_size=10737418240\r\n*.db_unique_name='maastb'\r\n*.diagnostic_dest='\/u01\/app\/oracle'\r\n*.fal_server='MAA'\r\nmaastb1.instance_number=1\r\nmaastb2.instance_number=2\r\n*.log_archive_config='DG_CONFIG=(maa,maastb)'\r\n*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=maastb'\r\n*.log_archive_dest_2='SERVICE=maa SYNC AFFIRM LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=maa'\r\n*.log_archive_dest_state_2='DEFER'\r\n*.log_archive_format='arch_%t_%s_%r.arc'\r\n*.log_file_name_convert='+DATA\/maa','+DG01\/maastb','+FRA\/maa','+FRA\/maastb'\r\n*.open_cursors=300\r\n*.pga_aggregate_target=268435456\r\n*.processes=150\r\n*.remote_listener='rac11stb-scan.tjsc.jus.br:1521'\r\n*.remote_login_passwordfile='exclusive'\r\n*.sga_target=1073741824\r\n*.standby_file_management='AUTO'\r\nmaastb2.thread=2\r\nmaastb1.thread=1\r\nmaastb1.undo_tablespace='UNDOTBS1'\r\nmaastb2.undo_tablespace='UNDOTBS2'\r\n[oracle@rac11stb01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Para terminar a configura\u00e7\u00e3o do standby precisamos ajustar dois detalhes: adump e pasword file. S\u00e3o dois passos simples, no primeiro s\u00e3o criados os diret\u00f3rios no standby e no segundo o arquivo de senhas do primary \u00e9 copiado para o standby (precisa ser o mesmo em todos os n\u00f3s):<\/p>\n<pre>No standby\r\n[oracle@rac11stb01 ~]$ mkdir -p \/u01\/app\/oracle\/admin\/maastb\/adump\r\n[oracle@rac11stb01 ~]$\r\nNo primary\r\n[oracle@rac11pri01 ~]$ cd $ORACLE_HOME\/dbs\r\n[oracle@rac11pri01 dbs]$ scp \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/orapwmaa1 oracle@rac11stb01:\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/orapwmaastb1\r\noracle@rac11stb01's password:\r\norapwmaa1                                                                                                                                                                                                  100% 1536     1.5KB\/s   00:00\r\n[oracle@rac11pri01 dbs]$ scp \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/orapwmaa1 oracle@rac11stb02:\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/orapwmaastb2\r\noracle@rac11stb02's password:\r\norapwmaa1                                                                                                                                                                                                  100% 1536     1.5KB\/s   00:00\r\n[oracle@rac11pri01 dbs]$\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>BACKUP, RESTORE E CLONE<\/strong><\/p>\n<p style=\"text-align: justify;\">Aqui vamos entrar em um ponto que necessita aten\u00e7\u00e3o e pode variar de caso a caso. Neste artigo tentarei cobrir 3 m\u00e9todos de clone. O primeiro \u00e9 atrav\u00e9s de backup e restore do banco de dados utilizando backup copiado (backupsets) do primary para o standby. O segundo modo \u00e9 atrav\u00e9s de clone com ACTIVE DATABASE. O terceiro \u00e9 um exemplo resumido de um clone com MML.<\/p>\n<p style=\"text-align: justify;\"><strong>Clone com backup local<\/strong><\/p>\n<p style=\"text-align: justify;\">O primeiro exemplo de clone \u00e9 criando o standby utilizando um backup do primary. Este backup \u00e9 copiado ao standby para que seja poss\u00edvel acess\u00e1-lo localmente a partir do standby. Isso as vezes fica complicado devido ao tamanho da base de dados, uma base de 2TB necessita que voc\u00ea tenha este espa\u00e7o dispon\u00edvel no filesystem do sistema operacional do standby. A t\u00edtulo de exemplo, vamos seguir com este exemplo.<\/p>\n<p style=\"text-align: justify;\">O primeiro passo \u00e9 ir na primary e realizar um backup full da base de dados. Repare que n\u00e3o ser\u00e1 feito backup do controlfile. O backup do controlfile tem uma fun\u00e7\u00e3o (e comandos espec\u00edficos e eu prefiro fazer ele separado).<\/p>\n<p style=\"text-align: justify;\">Observe abaixo os comandos executados (a sa\u00edda foi reduzida para ficar menor e caber no artigo)<\/p>\n<pre>Comando executado:\r\n    RUN {\r\n        BACKUP FULL FORMAT '\/tmp\/bkpf-data-D-%d-DBID-%I-T-%T-NB-%s.bkp' DATABASE TAG 'BKP-FULL';\r\n        SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';\r\n        BACKUP FORMAT '\/tmp\/bkpf-arch-D-%d-DBID-%I-T-%T-NB-%s.bkp' ARCHIVELOG ALL TAG 'BKP-FULL-ARCH';\r\n        BACKUP FORMAT '\/tmp\/bkp-spf-D-%d-DBID-%I-T-%T-NB-%s.bkp' SPFILE TAG 'BKP-FULL-SPFILE';\r\n    }\r\n    \r\n[oracle@rac11pri01 ~]$ rman target \/\r\n\r\nRecovery Manager: Release 11.2.0.3.0 - Production on Sun Mar 30 13:09:17 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\nconnected to target database: MAA (DBID=722024964)\r\n\r\nRMAN&gt;  RUN {\r\n2&gt;     BACKUP FULL FORMAT '\/tmp\/bkpf-data-D-%d-DBID-%I-T-%T-NB-%s.bkp' DATABASE TAG 'BKP-FULL';\r\n3&gt;     SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';\r\n4&gt;     BACKUP FORMAT '\/tmp\/bkpf-arch-D-%d-DBID-%I-T-%T-NB-%s.bkp' ARCHIVELOG ALL TAG 'BKP-FULL-ARCH';\r\n5&gt;     BACKUP FORMAT '\/tmp\/bkp-spf-D-%d-DBID-%I-T-%T-NB-%s.bkp' SPFILE TAG 'BKP-FULL-SPFILE';\r\n6&gt; }\r\n\r\nStarting backup at 30-MAR-14\r\nusing target database control file instead of recovery catalog\r\nallocated channel: ORA_DISK_1\r\nchannel ORA_DISK_1: SID=32 instance=maa1 device type=DISK\r\nchannel ORA_DISK_1: starting full datafile backup set\r\nchannel ORA_DISK_1: specifying datafile(s) in backup set\r\ninput datafile file number=00001 name=+DATA\/maa\/datafile\/system.270.843488557\r\ninput datafile file number=00002 name=+DATA\/maa\/datafile\/sysaux.269.843488563\r\n...\r\n...\r\n...\r\nchannel ORA_DISK_1: starting piece 1 at 30-MAR-14\r\nchannel ORA_DISK_1: finished piece 1 at 30-MAR-14\r\npiece handle=\/tmp\/bkp-spf-D-MAA-DBID-722024964-T-20140330-NB-4.bkp tag=BKP-FULL-SPFILE comment=NONE\r\nchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01\r\nFinished backup at 30-MAR-14\r\n\r\nRMAN&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Como disse e observado acima n\u00e3o temos backup do controlfile e ele \u00e9 fundamental para a cria\u00e7\u00e3o do standby. Observe que ele \u00e9 espec\u00edfico para criar o standby, <em>FOR STANDBY<\/em>.<\/p>\n<p style=\"text-align: justify;\">Eu prefiro fazer ele separado e para disco local. Se voc\u00ea estivesse usando MML, voc\u00ea poderia enviar seu backup para a fita e o controlfile ficaria local. \u00c9 uma prefer\u00eancia minha, se voc\u00ea quiser enviar tudo para a MML ou executar tudo no passo anterior, sem problema.<\/p>\n<pre>RUN {\r\n    BACKUP FORMAT '\/tmp\/bkp-ctf-D-%d-DBID-%I-T-%T-NB-%s.bkp' CURRENT CONTROLFILE FOR STANDBY TAG 'BKP-FULL-CONTROL';\r\n}\r\n\r\nRMAN&gt; RUN {\r\n    BACKUP FORMAT '\/tmp\/bkp-ctf-D-%d-DBID-%I-T-%T-NB-%s.bkp' CURRENT CONTROLFILE FOR STANDBY TAG 'BKP-FULL-CONTROL';\r\n}2&gt; 3&gt;\r\n\r\nStarting backup at 30\/03\/2014 13:14:12\r\nusing channel ORA_DISK_1\r\nchannel ORA_DISK_1: starting full datafile backup set\r\nchannel ORA_DISK_1: specifying datafile(s) in backup set\r\nincluding standby control file in backup set\r\nchannel ORA_DISK_1: starting piece 1 at 30\/03\/2014 13:14:13\r\nchannel ORA_DISK_1: finished piece 1 at 30\/03\/2014 13:14:14\r\npiece handle=\/tmp\/bkp-ctf-D-MAA-DBID-722024964-T-20140330-NB-6.bkp tag=BKP-FULL-CONTROL comment=NONE\r\nchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01\r\nFinished backup at 30\/03\/2014 13:14:14\r\n\r\nRMAN&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Com os backups em m\u00e3o, vamos copiar eles para o standby.<\/p>\n<pre>[oracle@rac11pri01 ~]$ scp \/tmp\/bkp* oracle@rac11stb01:\/tmp\/\r\noracle@rac11stb01's password:\r\nbkp-ctf-D-MAA-DBID-722024964-T-20140330-NB-6.bkp                                                                                                                                                           100%   18MB   8.8MB\/s   00:02\r\nbkpf-arch-D-MAA-DBID-722024964-T-20140330-NB-3.bkp                                                                                                                                                         100%  144MB  12.0MB\/s   00:12\r\nbkpf-data-D-MAA-DBID-722024964-T-20140330-NB-1.bkp                                                                                                                                                         100%  299MB  11.5MB\/s   00:26\r\nbkpf-data-D-MAA-DBID-722024964-T-20140330-NB-2.bkp                                                                                                                                                         100%   18MB   8.9MB\/s   00:02\r\nbkp-spf-D-MAA-DBID-722024964-T-20140330-NB-4.bkp                                                                                                                                                           100%   96KB  96.0KB\/s   00:00\r\n[oracle@rac11pri01 ~]$    \r\n<\/pre>\n<p style=\"text-align: justify;\">Com o backup copiado para o standby \u00e9 poss\u00edvel iniciar o banco. Iniciamos o standby em modo nomount com o pfile que editamos previamente e iniciamos o clone. Subindo o banco em NOMOUNT com o pfile editado:<\/p>\n<pre>SQL&gt; STARTUP PFILE='\/tmp\/pfile-primary-standby.ora' NOMOUNT;\r\nORACLE instance started.\r\n\r\nTotal System Global Area 1068937216 bytes\r\nFixed Size                  2235208 bytes\r\nVariable Size             339739832 bytes\r\nDatabase Buffers          721420288 bytes\r\nRedo Buffers                5541888 bytes\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Como \u00e9 a primeira vez que estamos iniciando a inst\u00e2ncia do standby \u00e9 interessante observar o alertlog para ver se todos os par\u00e2metros foram aceitos corretamente. Verifique os par\u00e2metros que modificamos previamente neste PFILE:<\/p>\n<pre>[oracle@rac11stb01 ~]$ tail -1000f \/u01\/app\/oracle\/diag\/rdbms\/maastb\/maastb1\/trace\/alert_maastb1.log\r\nSun Mar 30 13:19:03 2014\r\nStarting ORACLE instance (normal)\r\n...\r\n...        \r\nUsing parameter settings in client-side pfile \/tmp\/pfile-primary-standby.ora on machine rac11stb01.tjsc.jus.br\r\nSystem parameters with non-default values:\r\n  processes                = 150\r\n  sga_target               = 1G\r\n  control_files            = \"+DG01\/maastb\/controlfile\/current.273.843488553\"\r\n  control_files            = \"+FRA\/maastb\/controlfile\/current.256.843488553\"\r\n  db_file_name_convert     = \"+DATA\/maa\"\r\n  db_file_name_convert     = \"+DG01\/maastb\"\r\n  db_file_name_convert     = \"+FRA\/maa\"\r\n  db_file_name_convert     = \"+FRA\/maastb\"\r\n  log_file_name_convert    = \"+DATA\/maa\"\r\n  log_file_name_convert    = \"+DG01\/maastb\"\r\n  log_file_name_convert    = \"+FRA\/maa\"\r\n  log_file_name_convert    = \"+FRA\/maastb\"\r\n  db_block_size            = 8192\r\n  compatible               = \"11.2.0.0.0\"\r\n  log_archive_dest_1       = \"LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=maastb\"\r\n  log_archive_dest_2       = \"SERVICE=maa SYNC AFFIRM LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=maa\"\r\n  log_archive_dest_state_2 = \"DEFER\"\r\n  fal_server               = \"MAA\"\r\n  log_archive_config       = \"DG_CONFIG=(maa,maastb)\"\r\n  log_archive_format       = \"arch_%t_%s_%r.arc\"\r\n  cluster_database         = TRUE\r\n  db_create_file_dest      = \"+DG01\"\r\n  db_recovery_file_dest    = \"+FRA\"\r\n  db_recovery_file_dest_size= 10G\r\n  standby_file_management  = \"AUTO\"\r\n  thread                   = 1\r\n  undo_tablespace          = \"UNDOTBS1\"\r\n  instance_number          = 1\r\n  remote_login_passwordfile= \"EXCLUSIVE\"\r\n  db_domain                = \"\"\r\n  remote_listener          = \"rac11stb-scan.tjsc.jus.br:1521\"\r\n  audit_file_dest          = \"\/u01\/app\/oracle\/admin\/maastb\/adump\"\r\n  audit_trail              = \"DB\"\r\n  db_name                  = \"maa\"\r\n  db_unique_name           = \"maastb\"\r\n  open_cursors             = 300\r\n  pga_aggregate_target     = 256M\r\n  diagnostic_dest          = \"\/u01\/app\/oracle\"\r\nCluster communication is configured to use the following interface(s) for this instance\r\n  169.254.172.112\r\ncluster interconnect IPC version:Oracle UDP\/IP (generic)\r\n...\r\n...\r\nList of instances:\r\n 1 (myinst: 1)\r\n Global Resource Directory frozen\r\n* allocate domain 0, invalid = TRUE\r\n Communication channels reestablished\r\n...\r\n...\r\n<\/pre>\n<p style=\"text-align: justify;\">Como tudo \u201csubiu\u201d com sucesso, vamos clonar o banco. Observe a forma de conex\u00e3o ao RMAN e que os arquivos est\u00e3o locais no n\u00f3 desta inst\u00e2ncia.<\/p>\n<p style=\"text-align: justify;\">Quanto a conex\u00e3o um detalhe importante no RAC. Se voc\u00ea especificar no \u201c<em>auxiliary<\/em>\u201d, por exemplo \u201csys@maastb\u201d, poderia ter um problema com o listener. O problema reside no fato de que n\u00e3o tem como especificar em que n\u00f3 a conex\u00e3o ser\u00e1 feita, se tiver sorte ser\u00e1 no mesmo n\u00f3 que voc\u00ea est\u00e1. Assim, voc\u00ea pode deixar vazio que a conex\u00e3o ser\u00e1 no n\u00f3 local.<\/p>\n<p style=\"text-align: justify;\">Ap\u00f3s a conex\u00e3o feita \u00e9 poss\u00edvel clonar o banco para o standby a partir do backup que est\u00e1 armazenado localmente.<\/p>\n<pre>[oracle@rac11stb01 tmp]$ rman target sys@maa auxiliary sys\r\n\r\nRecovery Manager: Release 11.2.0.3.0 - Production on Sun Mar 30 13:39:01 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\ntarget database Password:\r\nconnected to target database: MAA (DBID=722024964)\r\nauxiliary database Password:\r\nconnected to auxiliary database: MAA (not mounted)\r\n\r\nRMAN&gt; RUN {\r\n    ALLOCATE AUXILIARY CHANNEL d1 DEVICE TYPE DISK FORMAT = '\/tmp\/bkp-ctf-D-%d-DBID-%I-T-%T-NB-%s.bkp';\r\n    DUPLICATE TARGET DATABASE FOR STANDBY NOFILENAMECHECK;\r\n}2&gt; 3&gt; 4&gt;\r\n\r\nusing target database control file instead of recovery catalog\r\nallocated channel: d1\r\nchannel d1: SID=18 instance=maastb1 device type=DISK\r\n\r\nStarting Duplicate Db at 30-MAR-14\r\n\r\ncontents of Memory Script:\r\n{\r\n   restore clone standby controlfile;\r\n}\r\nexecuting Memory Script\r\n\r\nStarting restore at 30-MAR-14\r\n\r\nchannel d1: starting datafile backup set restore\r\nchannel d1: restoring control file\r\nchannel d1: reading from backup piece \/tmp\/bkp-ctf-D-MAA-DBID-722024964-T-20140330-NB-6.bkp\r\nchannel d1: piece handle=\/tmp\/bkp-ctf-D-MAA-DBID-722024964-T-20140330-NB-6.bkp tag=BKP-FULL-CONTROL\r\nchannel d1: restored backup piece 1\r\nchannel d1: restore complete, elapsed time: 00:00:06\r\noutput file name=+DG01\/maastb\/controlfile\/current.265.843594121\r\noutput file name=+FRA\/maastb\/controlfile\/current.260.843594123\r\nFinished restore at 30-MAR-14\r\n\r\ncontents of Memory Script:\r\n{\r\n   sql clone 'alter database mount standby database';\r\n}\r\nexecuting Memory Script\r\n\r\nsql statement: alter database mount standby database\r\nRMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only.\r\n\r\ncontents of Memory Script:\r\n{\r\n   set newname for tempfile  1 to\r\n \"+dg01\";\r\n   switch clone tempfile all;\r\n   set newname for datafile  1 to\r\n \"+dg01\";\r\n   set newname for datafile  2 to\r\n \"+dg01\";\r\n   set newname for datafile  3 to\r\n \"+dg01\";\r\n   set newname for datafile  4 to\r\n \"+dg01\";\r\n   set newname for datafile  5 to\r\n \"+dg01\";\r\n   restore\r\n   clone database\r\n   ;\r\n}\r\nexecuting Memory Script\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nrenamed tempfile 1 to +dg01 in control file\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nStarting restore at 30-MAR-14\r\n\r\nchannel d1: starting datafile backup set restore\r\nchannel d1: specifying datafile(s) to restore from backup set\r\nchannel d1: restoring datafile 00001 to +dg01\r\nchannel d1: restoring datafile 00002 to +dg01\r\nchannel d1: restoring datafile 00003 to +dg01\r\nchannel d1: restoring datafile 00004 to +dg01\r\nchannel d1: restoring datafile 00005 to +dg01\r\nchannel d1: reading from backup piece \/tmp\/bkpf-data-D-MAA-DBID-722024964-T-20140330-NB-1.bkp\r\nchannel d1: piece handle=\/tmp\/bkpf-data-D-MAA-DBID-722024964-T-20140330-NB-1.bkp tag=BKP-FULL\r\nchannel d1: restored backup piece 1\r\nchannel d1: restore complete, elapsed time: 00:01:25\r\nFinished restore at 30-MAR-14\r\n\r\ncontents of Memory Script:\r\n{\r\n   switch clone datafile all;\r\n}\r\nexecuting Memory Script\r\n\r\ndatafile 1 switched to datafile copy\r\ninput datafile copy RECID=6 STAMP=843572620 file name=+DG01\/maastb\/datafile\/system.257.843594135\r\ndatafile 2 switched to datafile copy\r\ninput datafile copy RECID=7 STAMP=843572620 file name=+DG01\/maastb\/datafile\/sysaux.256.843594135\r\ndatafile 3 switched to datafile copy\r\ninput datafile copy RECID=8 STAMP=843572620 file name=+DG01\/maastb\/datafile\/undotbs1.262.843594137\r\ndatafile 4 switched to datafile copy\r\ninput datafile copy RECID=9 STAMP=843572620 file name=+DG01\/maastb\/datafile\/undotbs2.263.843594137\r\ndatafile 5 switched to datafile copy\r\ninput datafile copy RECID=10 STAMP=843572620 file name=+DG01\/maastb\/datafile\/users.264.843594137\r\nFinished Duplicate Db at 30-MAR-14\r\nreleased channel: d1\r\n\r\nRMAN&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Acredito que a sa\u00edda acima seja auto explicativa mas fazendo uma an\u00e1lise detalhada obervamos que os arquivos foram convertidos corretamente em seus destinos. +DATA do primary virou +DG01 no standby (ignore o warning que ele deu, o par\u00e2metro est\u00e1 correto).<\/p>\n<p style=\"text-align: justify;\">Se voc\u00ea for ao ASM do standby ver\u00e1 que tudo est\u00e1 no seu devido lugar:<\/p>\n<pre>[oracle@rac11stb01 tmp]$ export ORACLE_SID=+ASM1\r\n[oracle@rac11stb01 tmp]$ export ORACLE_HOME=\/u01\/app\/grid\/11.2.0.3\r\n[oracle@rac11stb01 tmp]$ asmcmd\r\nASMCMD&gt; ls\r\nDG01\/\r\nFRA\/\r\nSYS01\/\r\nASMCMD&gt; ls DG01\r\nMAASTB\/\r\nASMCMD&gt; ls FRA\r\nMAASTB\/\r\nASMCMD&gt; ls DG01\/MAASTB\/\r\nCONTROLFILE\/\r\nDATAFILE\/\r\nONLINELOG\/\r\nASMCMD&gt; ls FRA\/MAASTB\/\r\nCONTROLFILE\/\r\nONLINELOG\/\r\nASMCMD&gt;\r\nASMCMD&gt; exit\r\n[oracle@rac11stb01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>Clone com ACTIVE DATABASE<\/strong><\/p>\n<p style=\"text-align: justify;\">No clone realizado atrav\u00e9s do ACTIVE DATABASE voc\u00ea vai clonar o banco primary para o standby sem realizar qualquer backup. Voc\u00ea se conecta no banco primary e \u201cmanda\u201d ele clonar um standby. Explicarei mais detalhes no decorrer dos pr\u00f3ximos passos, o clone utilizando este m\u00e9todo \u00e9 mais complicado do que o anterior.<\/p>\n<p style=\"text-align: justify;\">Diferentemente do m\u00e9todo anterior, voc\u00ea precisa conectar no banco auxiliar utilizando tnsnames. Caso contr\u00e1rio, voc\u00ea ver\u00e1 o erro abaixo ao tentar clonar o banco:<\/p>\n<pre>[oracle@rac11stb01 ~]$ rman target sys@maa auxiliary sys\r\n\r\nRecovery Manager: Release 11.2.0.3.0 - Production on Sun Mar 30 14:47:40 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\ntarget database Password:\r\nconnected to target database: MAA (DBID=722024964)\r\nauxiliary database Password:\r\nconnected to auxiliary database: MAA (not mounted)\r\n\r\nRMAN&gt; DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;\r\n\r\nStarting Duplicate Db at 30\/03\/2014 14:48:15\r\nRMAN-00571: ===========================================================\r\nRMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============\r\nRMAN-00571: ===========================================================\r\nRMAN-03002: failure of Duplicate Db command at 03\/30\/2014 14:48:16\r\nRMAN-05501: aborting duplication of target database\r\nRMAN-06217: not connected to auxiliary database with a net service name\r\n\r\nRMAN&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Assim, o primeiro passo \u00e9 criar um m\u00e9todo de conectar diretamente na inst\u00e2ncia. Como estamos em um ambiente RAC fica um pouco mais complicado, voc\u00ea pode ter problemas de conex\u00e3o caso seja redirecionada para o n\u00f3 errado. Basicamente registramos manualmente a inst\u00e2ncia.<\/p>\n<p style=\"text-align: justify;\">Particularmente eu prefiro criar manualmente um listener em um \u00fanico n\u00f3 e direcionar as conex\u00f5es do standby para ele. Este pode n\u00e3o ser o melhor m\u00e9todo, mas me sinto confort\u00e1vel com ele.<\/p>\n<p style=\"text-align: justify;\">Para isso temos que criar um listener espec\u00edfico no standby para o clone em uma outra porta <strong>(observe o numero da porta, o hostname, GLOBAL_DBNAME e SID_NAME)<\/strong>:<\/p>\n<pre>[oracle@rac11stb01 ~]$ vi \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n[oracle@rac11stb01 ~]$ cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora                           \r\nLISTENER_CLONE =\r\n       (DESCRIPTION_LIST =\r\n          (DESCRIPTION =\r\n             (ADDRESS_LIST =\r\n                (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb01-vip)(PORT = 1522)\r\n                   (IP = FIRST)\r\n                )\r\n             )\r\n             (ADDRESS_LIST =\r\n                (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb01)(PORT = 1522)\r\n                   (IP = FIRST)\r\n                )\r\n             )\r\n             (ADDRESS_LIST =\r\n                (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))\r\n             )\r\n          )\r\n        )\r\n\r\n    SID_LIST_LISTENER_CLONE =\r\n     (SID_LIST =\r\n       (SID_DESC =\r\n         (GLOBAL_DBNAME = maastb)\r\n         (ORACLE_HOME = \/u01\/app\/oracle\/product\/11.2.0.3\/db_1)\r\n         (SID_NAME = maastb1)\r\n       )\r\n    )    \r\n<\/pre>\n<p style=\"text-align: justify;\">Al\u00e9m disso, vamos ajustar o TNS do n\u00f3 standby em estamos conectados para apontar para o hostname e porta correta do listener. Neste caso, <strong>mudamos de 1521 para 1522<\/strong> e para o rac11stb01.<\/p>\n<pre>[oracle@rac11stb01 ~]$ vi \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n[oracle@rac11stb01 ~]$ cat \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\nMAA =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maa)\r\n    )\r\n  )\r\n\r\nMAASTB =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb01.tjsc.jus.br)(PORT = 1522))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maastb)\r\n    )\r\n  )\r\n\r\n[oracle@rac11stb01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Depois de disso, podemos subir o novo listener e testar o tns (observe que a inst\u00e2ncia j\u00e1 fica registrada no listener \u2013 \u00e9 isso que queremos):<\/p>\n<pre>[oracle@rac11stb01 ~]$ export ORACLE_HOME=\/u01\/app\/grid\/11.2.0.3\r\n[oracle@rac11stb01 ~]$ \/u01\/app\/grid\/11.2.0.3\/bin\/lsnrctl start LISTENER_CLONE\r\n\r\nLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 30-MAR-2014 16:24:46\r\n\r\nCopyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\nStarting \/u01\/app\/grid\/11.2.0.3\/bin\/tnslsnr: please wait...\r\n\r\nTNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\nSystem parameter file is \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\nLog messages written to \/u01\/app\/oracle\/diag\/tnslsnr\/rac11stb01\/listener_clone\/alert\/log.xml\r\nListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.52)(PORT=1522)))\r\nListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.48)(PORT=1522)))\r\nListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))\r\n\r\nConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac11stb01-vip)(PORT=1522)(IP=FIRST)))\r\nSTATUS of the LISTENER\r\n------------------------\r\nAlias                     LISTENER_CLONE\r\nVersion                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\nStart Date                30-MAR-2014 16:24:46\r\nUptime                    0 days 0 hr. 0 min. 0 sec\r\nTrace Level               off\r\nSecurity                  ON: Local OS Authentication\r\nSNMP                      OFF\r\nListener Parameter File   \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\nListener Log File         \/u01\/app\/oracle\/diag\/tnslsnr\/rac11stb01\/listener_clone\/alert\/log.xml\r\nListening Endpoints Summary...\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.52)(PORT=1522)))\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.48)(PORT=1522)))\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))\r\nServices Summary...\r\nService \"tjdgstb\" has 1 instance(s).\r\n  Instance \"maastb1\", status UNKNOWN, has 1 handler(s) for this service...\r\nThe command completed successfully\r\n[oracle@rac11stb01 ~]$\r\n[oracle@rac11stb01 ~]$ export ORACLE_HOME=\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\r\n[oracle@rac11stb01 ~]$ tnsping maastb\r\n\r\nTNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 30-MAR-2014 16:27:09\r\n\r\nCopyright (c) 1997, 2011, Oracle.  All rights reserved.\r\n\r\nUsed parameter files:\r\n\r\n\r\nUsed TNSNAMES adapter to resolve the alias\r\nAttempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb01.tjsc.jus.br)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = maastb)))\r\nOK (0 msec)\r\n[oracle@rac11stb01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Como mudamos o listener e sua porta temporariamente precisamos que isso esteja refletido no pfile que iremos usar para subir a inst\u00e2ncia. Basta editar o pfile para apontar o par\u00e2metro \u201cremote_lister\u201dpara o endere\u00e7o correto (observe como era e como ficou o par\u00e2metro):<\/p>\n<pre>[oracle@rac11stb01 ~]$ cat \/tmp\/pfile-primary-standby.ora |grep remote_listener\r\n*.remote_listener='rac11stb-scan.tjsc.jus.br:1521'\r\n[oracle@rac11stb01 ~]$                     \r\n[oracle@rac11stb01 ~]$ vi \/tmp\/pfile-primary-standby.ora\r\n[oracle@rac11stb01 ~]$                             \r\n[oracle@rac11stb01 ~]$ cat \/tmp\/pfile-primary-standby.ora |grep remote_listener\r\n*.remote_listener='rac11stb01.tjsc.jus.br:1522'\r\n[oracle@rac11stb01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Devido a forma como o clone \u00e9 feito, a origem dos dados (mesmo que voc\u00ea inicie o procedimento da standby) ser\u00e1 do primary para o standby. Desta forma, o TNS do primary deve apontar para os endere\u00e7os configurados nos passos acima para o standby. Fa\u00e7a isso somente em uma inst\u00e2ncia da primary (na que voc\u00ea vai chamar o RMAN), modifique a porta da entrada para a 1522.<\/p>\n<p style=\"text-align: justify;\">Depois desta configura\u00e7\u00e3o inicial, basta iniciar a inst\u00e2ncia o standby em modo nomount para iniciar o clone. Al\u00e9m disso, podemos testar o PFILE criado e modificado previamente quanto a falhas.<\/p>\n<pre>SQL&gt; STARTUP PFILE='\/tmp\/pfile-primary-standby.ora' NOMOUNT;\r\nORACLE instance started.\r\n\r\nTotal System Global Area 1068937216 bytes\r\nFixed Size                  2235208 bytes\r\nVariable Size             343934136 bytes\r\nDatabase Buffers          717225984 bytes\r\nRedo Buffers                5541888 bytes\r\nSQL&gt; exit\r\nDisconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production\r\nWith the Partitioning, Real Application Clusters and Real Application Testing options\r\n[oracle@rac11stb01 ~]$  \r\n<\/pre>\n<p style=\"text-align: justify;\">\u00a0Depois disso podemos conectar atrav\u00e9s do RMAN e realizar o clone do banco de dados. Observe na sa\u00edda do comando que basicamente ele realiza um backup e um restore do banco de dados. Obviamente que isso tem uma carga consider\u00e1vel e pode demorar tamb\u00e9m.<\/p>\n<p style=\"text-align: justify;\">Se voc\u00ea comparar com o m\u00e9todo anterior a carga \u00e9 a mesma, mas aqui (caso o seu banco seja grande) poder\u00e1 acabar concorrendo com a sua carga de trabalho do dia a dia (voc\u00ea faz backup no meio do hor\u00e1rio de pico?). Outro detalhe, a origem da conex\u00e3o \u00e9 da primary e n\u00e3o \u00e9 especificada no comando do rman (observe a op\u00e7\u00e3o target).<\/p>\n<pre>[oracle@rac11pri01 ~]$ rman target sys auxiliary sys@maastb\r\n\r\nRecovery Manager: Release 11.2.0.3.0 - Production on Sun Mar 30 17:17:00 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\ntarget database Password:\r\nconnected to target database: MAA (DBID=722024964)\r\nauxiliary database Password:\r\nconnected to auxiliary database: MAA (not mounted)\r\n\r\nRMAN&gt; DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;\r\n\r\nStarting Duplicate Db at 30\/03\/2014 17:17:10\r\nusing target database control file instead of recovery catalog\r\nallocated channel: ORA_AUX_DISK_1\r\nchannel ORA_AUX_DISK_1: SID=19 instance=maastb1 device type=DISK\r\n\r\ncontents of Memory Script:\r\n{\r\n   backup as copy reuse\r\n   targetfile  '\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/orapwmaa1' auxiliary format\r\n '\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/orapwmaastb1'   ;\r\n}\r\nexecuting Memory Script\r\n\r\nStarting backup at 30\/03\/2014 17:17:11\r\nallocated channel: ORA_DISK_1\r\nchannel ORA_DISK_1: SID=157 instance=maa1 device type=DISK\r\nFinished backup at 30\/03\/2014 17:17:12\r\n\r\ncontents of Memory Script:\r\n{\r\n   backup as copy current controlfile for standby auxiliary format  '+DG01\/maastb\/controlfile\/current.265.843606857';\r\n   restore clone controlfile to  '+FRA\/maastb\/controlfile\/current.260.843606857' from\r\n '+DG01\/maastb\/controlfile\/current.265.843606857';\r\n   sql clone \"create spfile from memory\";\r\n   shutdown clone immediate;\r\n   startup clone nomount;\r\n   sql clone \"alter system set  control_files =\r\n  ''+DG01\/maastb\/controlfile\/current.265.843606857'', ''+FRA\/maastb\/controlfile\/current.260.843606857'' comment=\r\n ''Set by RMAN'' scope=spfile\";\r\n   shutdown clone immediate;\r\n   startup clone nomount;\r\n}\r\nexecuting Memory Script\r\n\r\nStarting backup at 30\/03\/2014 17:17:14\r\nusing channel ORA_DISK_1\r\nchannel ORA_DISK_1: starting datafile copy\r\ncopying standby control file\r\noutput file name=\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/snapcf_maa1.f tag=TAG20140330T171714 RECID=1 STAMP=843585435\r\nchannel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07\r\nFinished backup at 30\/03\/2014 17:17:21\r\n\r\nStarting restore at 30\/03\/2014 17:17:22\r\nusing channel ORA_AUX_DISK_1\r\n\r\nchannel ORA_AUX_DISK_1: copied control file copy\r\nFinished restore at 30\/03\/2014 17:17:26\r\n\r\nsql statement: create spfile from memory\r\n\r\nOracle instance shut down\r\n\r\nconnected to auxiliary database (not started)\r\nOracle instance started\r\n\r\nTotal System Global Area    1068937216 bytes\r\n\r\nFixed Size                     2235208 bytes\r\nVariable Size                348128440 bytes\r\nDatabase Buffers             713031680 bytes\r\nRedo Buffers                   5541888 bytes\r\n\r\nsql statement: alter system set  control_files =   ''+DG01\/maastb\/controlfile\/current.265.843606857'', ''+FRA\/maastb\/controlfile\/current.260.843606857'' comment= ''Set by RMAN'' scope=spfile\r\n\r\nOracle instance shut down\r\n\r\nconnected to auxiliary database (not started)\r\nOracle instance started\r\n\r\nTotal System Global Area    1068937216 bytes\r\n\r\nFixed Size                     2235208 bytes\r\nVariable Size                348128440 bytes\r\nDatabase Buffers             713031680 bytes\r\nRedo Buffers                   5541888 bytes\r\n\r\ncontents of Memory Script:\r\n{\r\n   sql clone 'alter database mount standby database';\r\n}\r\nexecuting Memory Script\r\n\r\nsql statement: alter database mount standby database\r\nRMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only.\r\n\r\ncontents of Memory Script:\r\n{\r\n   set newname for tempfile  1 to\r\n \"+dg01\";\r\n   switch clone tempfile all;\r\n   set newname for datafile  1 to\r\n \"+dg01\";\r\n   set newname for datafile  2 to\r\n \"+dg01\";\r\n   set newname for datafile  3 to\r\n \"+dg01\";\r\n   set newname for datafile  4 to\r\n \"+dg01\";\r\n   set newname for datafile  5 to\r\n \"+dg01\";\r\n   backup as copy reuse\r\n   datafile  1 auxiliary format\r\n \"+dg01\"   datafile\r\n 2 auxiliary format\r\n \"+dg01\"   datafile\r\n 3 auxiliary format\r\n \"+dg01\"   datafile\r\n 4 auxiliary format\r\n \"+dg01\"   datafile\r\n 5 auxiliary format\r\n \"+dg01\"   ;\r\n   sql 'alter system archive log current';\r\n}\r\nexecuting Memory Script\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nrenamed tempfile 1 to +dg01 in control file\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nStarting backup at 30\/03\/2014 17:18:11\r\nusing channel ORA_DISK_1\r\nchannel ORA_DISK_1: starting datafile copy\r\ninput datafile file number=00001 name=+DATA\/maa\/datafile\/system.270.843488557\r\noutput file name=+DG01\/maastb\/datafile\/system.264.843606915 tag=TAG20140330T171811\r\nchannel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:05\r\nchannel ORA_DISK_1: starting datafile copy\r\ninput datafile file number=00002 name=+DATA\/maa\/datafile\/sysaux.269.843488563\r\noutput file name=+DG01\/maastb\/datafile\/sysaux.263.843606981 tag=TAG20140330T171811\r\nchannel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:55\r\nchannel ORA_DISK_1: starting datafile copy\r\ninput datafile file number=00003 name=+DATA\/maa\/datafile\/undotbs1.268.843488567\r\noutput file name=+DG01\/maastb\/datafile\/undotbs1.262.843607035 tag=TAG20140330T171811\r\nchannel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25\r\nchannel ORA_DISK_1: starting datafile copy\r\ninput datafile file number=00004 name=+DATA\/maa\/datafile\/undotbs2.265.843488579\r\noutput file name=+DG01\/maastb\/datafile\/undotbs2.256.843607061 tag=TAG20140330T171811\r\nchannel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25\r\nchannel ORA_DISK_1: starting datafile copy\r\ninput datafile file number=00005 name=+DATA\/maa\/datafile\/users.258.843488581\r\noutput file name=+DG01\/maastb\/datafile\/users.257.843607085 tag=TAG20140330T171811\r\nchannel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03\r\nFinished backup at 30\/03\/2014 17:21:05\r\n\r\nsql statement: alter system archive log current\r\n\r\ncontents of Memory Script:\r\n{\r\n   backup as copy reuse\r\n   archivelog like  \"+FRA\/maa\/archivelog\/2014_03_30\/thread_2_seq_4.292.843592197\" auxiliary format\r\n \"+FRA\"   archivelog like\r\n \"+FRA\/maa\/archivelog\/2014_03_30\/thread_1_seq_18.537.843607269\" auxiliary format\r\n \"+FRA\"   archivelog like\r\n \"+FRA\/maa\/archivelog\/2014_03_30\/thread_2_seq_5.508.843607269\" auxiliary format\r\n \"+FRA\"   ;\r\n   catalog clone start with  \"+FRA\";\r\n   switch clone datafile all;\r\n}\r\nexecuting Memory Script\r\n\r\nStarting backup at 30\/03\/2014 17:21:11\r\nusing channel ORA_DISK_1\r\nchannel ORA_DISK_1: starting archived log copy\r\ninput archived log thread=2 sequence=4 RECID=8 STAMP=843592197\r\noutput file name=+FRA\/maastb\/archivelog\/2014_03_30\/thread_2_seq_4.571.843607095 RECID=0 STAMP=0\r\nchannel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:01\r\nchannel ORA_DISK_1: starting archived log copy\r\ninput archived log thread=1 sequence=18 RECID=9 STAMP=843607269\r\noutput file name=+FRA\/maastb\/archivelog\/2014_03_30\/thread_1_seq_18.574.843607095 RECID=0 STAMP=0\r\nchannel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:03\r\nchannel ORA_DISK_1: starting archived log copy\r\ninput archived log thread=2 sequence=5 RECID=10 STAMP=843607270\r\noutput file name=+FRA\/maastb\/archivelog\/2014_03_30\/thread_2_seq_5.257.843607099 RECID=0 STAMP=0\r\nchannel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:03\r\nFinished backup at 30\/03\/2014 17:21:18\r\n\r\nsearching for all files that match the pattern +FRA\r\n\r\nList of Files Unknown to the Database\r\n=====================================\r\nFile Name: +fra\/MAASTB\/ARCHIVELOG\/2014_03_30\/thread_2_seq_4.571.843607095\r\nFile Name: +fra\/MAASTB\/ARCHIVELOG\/2014_03_30\/thread_1_seq_18.574.843607095\r\nFile Name: +fra\/MAASTB\/ARCHIVELOG\/2014_03_30\/thread_2_seq_5.257.843607099\r\ncataloging files...\r\ncataloging done\r\n\r\nList of Cataloged Files\r\n=======================\r\nFile Name: +fra\/MAASTB\/ARCHIVELOG\/2014_03_30\/thread_2_seq_4.571.843607095\r\nFile Name: +fra\/MAASTB\/ARCHIVELOG\/2014_03_30\/thread_1_seq_18.574.843607095\r\nFile Name: +fra\/MAASTB\/ARCHIVELOG\/2014_03_30\/thread_2_seq_5.257.843607099\r\n\r\ndatafile 1 switched to datafile copy\r\ninput datafile copy RECID=1 STAMP=843585503 file name=+DG01\/maastb\/datafile\/system.264.843606915\r\ndatafile 2 switched to datafile copy\r\ninput datafile copy RECID=2 STAMP=843585503 file name=+DG01\/maastb\/datafile\/sysaux.263.843606981\r\ndatafile 3 switched to datafile copy\r\ninput datafile copy RECID=3 STAMP=843585503 file name=+DG01\/maastb\/datafile\/undotbs1.262.843607035\r\ndatafile 4 switched to datafile copy\r\ninput datafile copy RECID=4 STAMP=843585503 file name=+DG01\/maastb\/datafile\/undotbs2.256.843607061\r\ndatafile 5 switched to datafile copy\r\ninput datafile copy RECID=5 STAMP=843585503 file name=+DG01\/maastb\/datafile\/users.257.843607085\r\n\r\ncontents of Memory Script:\r\n{\r\n   set until scn  435603;\r\n   recover\r\n   standby\r\n   clone database\r\n    delete archivelog\r\n   ;\r\n}\r\nexecuting Memory Script\r\n\r\nexecuting command: SET until clause\r\n\r\nStarting recover at 30\/03\/2014 17:21:21\r\nallocated channel: ORA_AUX_DISK_1\r\nchannel ORA_AUX_DISK_1: SID=145 instance=maastb1 device type=DISK\r\n\r\nstarting media recovery\r\n\r\narchived log for thread 1 with sequence 18 is already on disk as file +FRA\/maastb\/archivelog\/2014_03_30\/thread_1_seq_18.574.843607095\r\narchived log for thread 2 with sequence 5 is already on disk as file +FRA\/maastb\/archivelog\/2014_03_30\/thread_2_seq_5.257.843607099\r\narchived log file name=+FRA\/maastb\/archivelog\/2014_03_30\/thread_1_seq_18.574.843607095 thread=1 sequence=18\r\narchived log file name=+FRA\/maastb\/archivelog\/2014_03_30\/thread_2_seq_5.257.843607099 thread=2 sequence=5\r\nmedia recovery complete, elapsed time: 00:00:01\r\nFinished recover at 30\/03\/2014 17:21:25\r\nFinished Duplicate Db at 30\/03\/2014 17:21:48\r\n\r\nRMAN&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Vamos analisar a sa\u00edda dos comandos acima, ele come\u00e7a com um backup do password file do primary para o standby. Depois temos um script executado na standby com:<\/p>\n<ul style=\"text-align: justify;\">\n<li>Backup do controlfile da primary (backup para standby).<\/li>\n<li>Clone do spfile da standby.<\/li>\n<li>Restart da inst\u00e2ncia (por isso o clone anterior).<\/li>\n<li>Corre\u00e7\u00e3o dos controlfiles na standby;<\/li>\n<li>Novo restart da standby.<\/li>\n<li>Por fim, clone da primary para a standby;<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Durante o backup e restore o input \u00e9 +DATA e o destino \u00e9 +DG01. Isso quer dizer que ele seguiu como base o que foi definido no pfile que fez o startup da standby (voc\u00ea tamb\u00e9m pode verificar isso no alert da standby).<\/p>\n<p style=\"text-align: justify;\">Observe a quantidade de vezes que ocorreu shutdown e startup na standby, para que isso ocorra com sucesso voc\u00ea precisa de um registro direto no listener. Est\u00e1 ai o motivo para criarmos o listener e registrarmos manualmente a inst\u00e2ncia nele.<\/p>\n<p style=\"text-align: justify;\">Depois do clone concluir com sucesso \u00e9 hora de colocar ordem na casa, corrigir os tnsnames e remover listener criado. No lado do primary (em ambos os n\u00f3s) corrija os tns para apontar para o endere\u00e7o correto (observe a defini\u00e7\u00e3o \u201cMAASTB\u201d):<\/p>\n<pre>[oracle@rac11pri01 ~]$ cat \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# tnsnames.ora Network Configuration File: \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# Generated by Oracle configuration tools.\r\n\r\nMAA =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maa)\r\n    )\r\n  )\r\n\r\nMAASTB =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb01.tjsc.jus.br)(PORT = 1522))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maastb)\r\n    )\r\n  )\r\n\r\n[oracle@rac11pri01 ~]$ vi \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n[oracle@rac11pri01 ~]$ cat \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# tnsnames.ora Network Configuration File: \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n# Generated by Oracle configuration tools.\r\n\r\nMAA =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maa)\r\n    )\r\n  )\r\n\r\nMAASTB =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maastb)\r\n    )\r\n  )\r\n\r\n[oracle@rac11pri01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Arrume o par\u00e2metro remote_listener do pfile da standby:<\/p>\n<pre>[oracle@rac11stb01 ~]$ cat \/tmp\/pfile-primary-standby.ora |grep remote_listener\r\n*.remote_listener='rac11stb01.tjsc.jus.br:1522'\r\n[oracle@rac11stb01 ~]$ vi \/tmp\/pfile-primary-standby.ora\r\n[oracle@rac11stb01 ~]$ cat \/tmp\/pfile-primary-standby.ora |grep remote_listener\r\n*.remote_listener='rac11stb-scan.tjsc.jus.br:1521'\r\n[oracle@rac11stb01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Removendo o listener utilizado no clone da standby:<\/p>\n<pre>[oracle@rac11stb01 ~]$ export ORACLE_HOME=\/u01\/app\/grid\/11.2.0.3\r\n[oracle@rac11stb01 ~]$ lsnrctl stop LISTENER_CLONE\r\n\r\nLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 30-MAR-2014 18:32:26\r\n\r\nCopyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\nConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac11stb01-vip)(PORT=1522)(IP=FIRST)))\r\nThe command completed successfully\r\n[oracle@rac11stb01 ~]$\r\n[oracle@rac11stb01 ~]$\r\n[oracle@rac11stb01 ~]$ cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\nLISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent\r\nLISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))                # line added by Agent\r\nLISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))                # line added by Agent\r\nLISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent\r\nENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent\r\nENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent\r\nENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent\r\nENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent\r\n\r\n\r\nLISTENER_CLONE =\r\n   (DESCRIPTION_LIST =\r\n      (DESCRIPTION =\r\n         (ADDRESS_LIST =\r\n            (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb01-vip)(PORT = 1522)\r\n               (IP = FIRST)\r\n            )\r\n         )\r\n         (ADDRESS_LIST =\r\n            (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb01)(PORT = 1522)\r\n               (IP = FIRST)\r\n            )\r\n         )\r\n         (ADDRESS_LIST =\r\n            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))\r\n         )\r\n      )\r\n    )\r\n\r\nSID_LIST_LISTENER_CLONE =\r\n (SID_LIST =\r\n   (SID_DESC =\r\n     (GLOBAL_DBNAME = maastb)\r\n     (ORACLE_HOME = \/u01\/app\/oracle\/product\/11.2.0.3\/db_1)\r\n     (SID_NAME = maastb1)\r\n   )\r\n)\r\n[oracle@rac11stb01 ~]$ vi \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n[oracle@rac11stb01 ~]$ cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\nLISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent\r\nLISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))                # line added by Agent\r\nLISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))                # line added by Agent\r\nLISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent\r\nENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent\r\nENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent\r\nENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent\r\nENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent\r\n\r\n\r\n[oracle@rac11stb01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">E corrigindo o tns da standby<\/p>\n<pre>[oracle@rac11stb01 ~]$ cat \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\nMAA =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maa)\r\n    )\r\n  )\r\n\r\nMAASTB =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb01.tjsc.jus.br)(PORT = 1522))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maastb)\r\n    )\r\n  )\r\n\r\n[oracle@rac11stb01 ~]$ vi \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\n[oracle@rac11stb01 ~]$ cat \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/network\/admin\/tnsnames.ora\r\nMAA =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11pri-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maa)\r\n    )\r\n  )\r\n\r\nMAASTB =\r\n  (DESCRIPTION =\r\n    (ADDRESS = (PROTOCOL = TCP)(HOST = rac11stb-scan.tjsc.jus.br)(PORT = 1521))\r\n    (CONNECT_DATA =\r\n      (SERVER = DEDICATED)\r\n      (SERVICE_NAME = maastb)\r\n    )\r\n  )\r\n\r\n[oracle@rac11stb01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Pronto, depois destes passos voc\u00ea tem um standby criado atrav\u00e9s de um active database. O restart da inst\u00e2ncia fica para depois (j\u00e1 que ainda n\u00e3o terminamos o processo).<\/p>\n<p style=\"text-align: justify;\"><strong>Clone atrav\u00e9s de MML<\/strong><\/p>\n<p style=\"text-align: justify;\">O procedimento \u00e9 o mesmo do duplicate (sem active database), mas aqui especificando os canais para a fita. O detalhe \u00e9 que voc\u00ea tem que ter habilitado o standby na sua MML. Pe\u00e7o que observe como os canais foram configurados, temos um canal que aponta para a fita e um segundo canal para disco espec\u00edfico para o controlfile.<\/p>\n<pre>Comando a ser executado:\r\n    rman target sys\/XXXXXXXX@oselocpd auxiliary sys\/XXXXXX@oselo\r\n\r\n    run {\r\n    ALLOCATE AUXILIARY CHANNEL t1 DEVICE TYPE 'SBT_TAPE' PARMS 'ENV=(NSR_SERVER=mml-server,NSR_CLIENT=selodigital-st,NSR_DPRINTF=TRUE, NSR_DEBUG_FILE=\/tmp\/t1.log,NSR_DEBUG_LEVEL=2)';\r\n    ALLOCATE AUXILIARY CHANNEL d1 DEVICE TYPE DISK FORMAT = '\/tmp\/bkp-ctf-D-%d-DBID-%I-T-%T-NB-%s.bkp';\r\n    DUPLICATE TARGET DATABASE FOR STANDBY NOFILENAMECHECK;\r\n    }    \r\n\r\n-bash-3.00$ rman target sys\/XXXXXXX@oselocpd auxiliary sys\/XXXXXXX@oselo\r\n\r\nRecovery Manager: Release 10.2.0.5.0 - Production on Wed Aug 7 17:10:32 2013\r\n\r\nCopyright (c) 1982, 2007, Oracle.  All rights reserved.\r\n\r\nconnected to target database: OSELO (DBID=2831035320)\r\nconnected to auxiliary database: OSELO (not mounted)\r\n\r\nRMAN&gt; run {\r\nALLOCATE AUXILIARY CHANNEL t1 DEVICE TYPE 'SBT_TAPE' PARMS 'ENV=(NSR_SERVER=mml-server,NSR_CLIENT=selodigital-st,NSR_DPRINTF=TRUE, NSR_DEBUG_FILE=\/tmp\/t1.log,NSR_DEBUG_LEVEL=2)';\r\n2&gt; 3&gt; ALLOCATE AUXILIARY CHANNEL d1 DEVICE TYPE DISK FORMAT = '\/tmp\/bkp-ctf-D-%d-DBID-%I-T-%T-NB-%s.bkp';\r\nDUPLICATE TARGET DATABASE FOR STANDBY NOFILENAMECHECK;\r\n4&gt; 5&gt; }\r\n\r\nusing target database control file instead of recovery catalog\r\nallocated channel: t1\r\nchannel t1: sid=155 devtype=SBT_TAPE\r\nchannel t1: NMO v5.0.0.0\r\n\r\nallocated channel: d1\r\nchannel d1: sid=154 devtype=DISK\r\n\r\nStarting Duplicate Db at 07-AUG-13\r\n\r\ncontents of Memory Script:\r\n{\r\n   restore clone standby controlfile;\r\n   sql clone 'alter database mount standby database';\r\n}\r\nexecuting Memory Script\r\n\r\nStarting restore at 07-AUG-13\r\n\r\nchannel d1: starting datafile backupset restore\r\nchannel d1: restoring control file\r\nchannel d1: reading from backup piece \/tmp\/bkp-ctf-D-OSELO-DBID-2831035320-T-20130807-NB-6297.bkp\r\nchannel d1: restored backup piece 1\r\npiece handle=\/tmp\/bkp-ctf-D-OSELO-DBID-2831035320-T-20130807-NB-6297.bkp tag=BKP-FULL-CONTROL-STB\r\nchannel d1: restore complete, elapsed time: 00:00:11\r\noutput filename=+DATA\/oselo\/controlfile\/current.280.822849075\r\noutput filename=+DATA\/oselo\/controlfile\/current.279.822849075\r\nFinished restore at 07-AUG-13\r\n\r\nsql statement: alter database mount standby database\r\nWARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to diskgroup only.\r\n\r\ncontents of Memory Script:\r\n{\r\n   set newname for tempfile  1 to\r\n \"+data\";\r\n   switch clone tempfile all;\r\n   set newname for datafile  1 to\r\n \"+data\";\r\n   set newname for datafile  2 to\r\n \"+data\";\r\n   set newname for datafile  3 to\r\n \"+data\";\r\n   set newname for datafile  4 to\r\n \"+data\";\r\n   set newname for datafile  5 to\r\n \"+data\";\r\n   set newname for datafile  6 to\r\n \"+data\";\r\n   set newname for datafile  7 to\r\n \"+data\";\r\n   set newname for datafile  8 to\r\n \"+data\";\r\n   set newname for datafile  9 to\r\n \"+data\";\r\n   restore\r\n   check readonly\r\n   clone database\r\n   ;\r\n}\r\nexecuting Memory Script\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nrenamed temporary file 1 to +data in control file\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nexecuting command: SET NEWNAME\r\n\r\nStarting restore at 07-AUG-13\r\n\r\nchannel t1: starting datafile backupset restore\r\nchannel t1: specifying datafile(s) to restore from backup set\r\nrestoring datafile 00007 to +DATA\r\nrestoring datafile 00008 to +DATA\r\nchannel t1: reading from backup piece bkpi0-data-D-OSELO-DBID-2831035320-T-20130806-NB-6288.bkp\r\nchannel t1: restored backup piece 1\r\npiece handle=bkpi0-data-D-OSELO-DBID-2831035320-T-20130806-NB-6288.bkp tag=BKP-INCR0-DB\r\nchannel t1: restore complete, elapsed time: 01:09:16\r\nchannel t1: starting datafile backupset restore\r\nchannel t1: specifying datafile(s) to restore from backup set\r\nrestoring datafile 00001 to +DATA\r\nrestoring datafile 00002 to +DATA\r\nrestoring datafile 00003 to +DATA\r\nrestoring datafile 00004 to +DATA\r\nrestoring datafile 00005 to +DATA\r\nrestoring datafile 00006 to +DATA\r\nchannel t1: reading from backup piece bkpi0-data-D-OSELO-DBID-2831035320-T-20130806-NB-6289.bkp\r\nchannel t1: restored backup piece 1\r\npiece handle=bkpi0-data-D-OSELO-DBID-2831035320-T-20130806-NB-6289.bkp tag=BKP-INCR0-DB\r\nchannel t1: restore complete, elapsed time: 00:50:46\r\nchannel t1: starting datafile backupset restore\r\nchannel t1: specifying datafile(s) to restore from backup set\r\nrestoring datafile 00009 to +DATA\r\nchannel t1: reading from backup piece bkpi0-data-D-OSELO-DBID-2831035320-T-20130806-NB-6290.bkp\r\nchannel t1: restored backup piece 1\r\npiece handle=bkpi0-data-D-OSELO-DBID-2831035320-T-20130806-NB-6290.bkp tag=BKP-INCR0-DB\r\nchannel t1: restore complete, elapsed time: 00:04:45\r\nFinished restore at 07-AUG-13\r\n\r\ncontents of Memory Script:\r\n{\r\n   switch clone datafile all;\r\n}\r\nexecuting Memory Script\r\n\r\ndatafile 1 switched to datafile copy\r\ninput datafile copy recid=220 stamp=822856580 filename=+DATA\/oselo\/datafile\/system.273.822853265\r\ndatafile 2 switched to datafile copy\r\ninput datafile copy recid=221 stamp=822856580 filename=+DATA\/oselo\/datafile\/undotbs1.274.822853263\r\ndatafile 3 switched to datafile copy\r\ninput datafile copy recid=222 stamp=822856580 filename=+DATA\/oselo\/datafile\/sysaux.1172.822853265\r\ndatafile 4 switched to datafile copy\r\ninput datafile copy recid=223 stamp=822856580 filename=+DATA\/oselo\/datafile\/users.263.822853265\r\ndatafile 5 switched to datafile copy\r\ninput datafile copy recid=224 stamp=822856581 filename=+DATA\/oselo\/datafile\/tsselodigdat.276.822853251\r\ndatafile 6 switched to datafile copy\r\ninput datafile copy recid=225 stamp=822856581 filename=+DATA\/oselo\/datafile\/tsselodigidx.275.822853259\r\ndatafile 7 switched to datafile copy\r\ninput datafile copy recid=226 stamp=822856581 filename=+DATA\/oselo\/datafile\/tsselodigarqprotarqlob4k.278.822849095\r\ndatafile 8 switched to datafile copy\r\ninput datafile copy recid=227 stamp=822856582 filename=+DATA\/oselo\/datafile\/tsselodigarqprotreclob4k.277.822849107\r\ndatafile 9 switched to datafile copy\r\ninput datafile copy recid=228 stamp=822856582 filename=+DATA\/oselo\/datafile\/tsselodigarqprotarqlob2k.1011.822856297\r\nFinished Duplicate Db at 07-AUG-13\r\nreleased channel: t1\r\nreleased channel: d1\r\n\r\nRMAN&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>MONTANDO A BASE DE DADOS<\/strong><\/p>\n<p style=\"text-align: justify;\">Depois de clonar o banco voc\u00ea pode montar o banco de dados. Eu recomento realizar um shutdown do standby e um startup com o pfile, principalmente pela necessidade de corrigir o par\u00e2metro que aponta para os controlfiles. Existe a necessidade de corre\u00e7\u00e3o, pois com OFA, no restore\/clone novos nomes s\u00e3o gerados.<\/p>\n<p style=\"text-align: justify;\">Para verificar, basta ir no ASM identificar eles e corrigir o pfile:<\/p>\n<pre>[oracle@rac11stb01 ~]$ export ORACLE_HOME=\/u01\/app\/grid\/11.2.0.3\r\n[oracle@rac11stb01 ~]$ export ORACLE_SID=+ASM1\r\n[oracle@rac11stb01 ~]$ asmcmd\r\nASMCMD&gt; ls +DG01\/MAASTB\/CONTROLFILE\/\r\nCurrent.265.843606857\r\nASMCMD&gt; ls +FRA\/MAASTB\/CONTROLFILE\/\r\nCurrent.260.843606857\r\nASMCMD&gt; exit\r\n[oracle@rac11stb01 ~]$ cat \/tmp\/pfile-primary-standby.ora |grep control\r\n*.control_files='+DG01\/maastb\/controlfile\/current.273.843488553','+FRA\/maastb\/controlfile\/current.256.843488553'\r\n[oracle@rac11stb01 ~]$\r\n[oracle@rac11stb01 ~]$ vi \/tmp\/pfile-primary-standby.ora\r\n[oracle@rac11stb01 ~]$ cat \/tmp\/pfile-primary-standby.ora |grep control\r\n*.control_files='+DG01\/maastb\/controlfile\/current.265.843606857','+FRA\/maastb\/controlfile\/current.260.843606857'\r\n[oracle@rac11stb01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Ap\u00f3s a edi\u00e7\u00e3o do pfile, a base standby pode ser montada (uma inst\u00e2ncia s\u00f3 at\u00e9 o momento).<\/p>\n<pre>[oracle@rac11stb01 ~]$ export ORACLE_HOME=\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\r\n[oracle@rac11stb01 ~]$ export ORACLE_SID=maastb1\r\n[oracle@rac11stb01 ~]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 11.2.0.3.0 Production on Sun Mar 30 19:01:38 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\nConnected to:\r\nOracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production\r\nWith the Partitioning, Real Application Clusters, Automatic Storage Management and Real Application Testing options\r\n\r\nSQL&gt; shutdown immediate;\r\nORA-01109: database not open\r\n\r\n\r\nDatabase dismounted.\r\nORACLE instance shut down.\r\nSQL&gt; STARTUP PFILE='\/tmp\/pfile-primary-standby.ora' MOUNT;\r\nORACLE instance started.\r\n\r\nTotal System Global Area 1068937216 bytes\r\nFixed Size                  2235208 bytes\r\nVariable Size             343934136 bytes\r\nDatabase Buffers          717225984 bytes\r\nRedo Buffers                5541888 bytes\r\nDatabase mounted.\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Pronto, agora voc\u00ea tem uma inst\u00e2ncia standby criada e montada atrav\u00e9s de um clone da primary que j\u00e1 aponta para os controlfiles corretos.<\/p>\n<p style=\"text-align: justify;\"><strong>STANDBY LOGS<\/strong><\/p>\n<p style=\"text-align: justify;\">Voc\u00ea at\u00e9 poderia habilitar o DG, mas n\u00e3o estaria como desejamos, voc\u00ea n\u00e3o conseguiria abrir ela com um grau de prote\u00e7\u00e3o ideal para MAA. Para que isso seja poss\u00edvel, temos que criar o os standby redo logs.<\/p>\n<p style=\"text-align: justify;\">Standby redo logs s\u00e3o id\u00eanticos aos redo logs. Eles s\u00e3o utilizados como destino das informa\u00e7\u00f5es (de redo) recebidas da primary. Quando ocorre um log switch na primary, existe um standby redo log switch na standby e este \u00e9 arquivado atrav\u00e9s de um processo ARCn (voc\u00ea pode ler isso no documento <a href=\"http:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41134.pdf\" target=\"_blank\">Oracle Data Guard Concepts and Administration<\/a>).<\/p>\n<p style=\"text-align: justify;\">Na documenta\u00e7\u00e3o fica claro a necessidade de criar um standby redo log a mais do que os redo log groups existentes na primary. Existe uma f\u00f3rmula para calcular o n\u00famero correto em um ambiente RAC:<\/p>\n<ul>\n<li><strong>( (# de redo logs por inst\u00e2ncia) + 1 ) x ( # de inst\u00e2ncias ) <\/strong> (Refer\u00eancia existente neste <a href=\"http:\/\/www.oracle.com\/au\/products\/database\/dataguard11g-rac-maa-1-134639.pdf\" target=\"_blank\">documento<\/a>)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Em um ambiente com duas inst\u00e2ncias que tem 2 grupos voc\u00ea teria que criar 6 standby redo logs. Sendo que estes seriam divididos em 3 grupos por inst\u00e2ncia. Vejamos no nosso caso:<\/p>\n<pre>SQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt;\r\nSQL&gt; SELECT group#, thread# FROM v$standby_log;\r\n\r\n    GROUP#    THREAD#\r\n---------- ----------\r\n         5          1\r\n         6          1\r\n         7          1\r\n         8          2\r\n         9          2\r\n        10          2\r\n\r\n6 rows selected.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Para verificar como ficamos poder executar o SQL abaixo. Observe a quantidade e standby logs grupous:<\/p>\n<pre>SQL&gt; COL MEMBER FORMAT A60\r\nSQL&gt; SELECT group#, type, member FROM v$logfile;\r\n\r\n    GROUP# TYPE    MEMBER\r\n---------- ------- ------------------------------------------------------------\r\n         1 ONLINE  +DATA\/maa\/onlinelog\/group_1.272.843488553\r\n         1 ONLINE  +FRA\/maa\/onlinelog\/group_1.286.843488555\r\n         2 ONLINE  +DATA\/maa\/onlinelog\/group_2.271.843488555\r\n         2 ONLINE  +FRA\/maa\/onlinelog\/group_2.285.843488555\r\n         3 ONLINE  +DATA\/maa\/onlinelog\/group_3.257.843489101\r\n         3 ONLINE  +FRA\/maa\/onlinelog\/group_3.284.843489101\r\n         4 ONLINE  +DATA\/maa\/onlinelog\/group_4.262.843489103\r\n         4 ONLINE  +FRA\/maa\/onlinelog\/group_4.283.843489103\r\n         5 STANDBY +DATA\/maa\/onlinelog\/group_5.263.843615365\r\n         5 STANDBY +FRA\/maa\/onlinelog\/group_5.289.843615367\r\n         6 STANDBY +DATA\/maa\/onlinelog\/group_6.261.843615373\r\n\r\n    GROUP# TYPE    MEMBER\r\n---------- ------- ------------------------------------------------------------\r\n         6 STANDBY +FRA\/maa\/onlinelog\/group_6.670.843615373\r\n         7 STANDBY +DATA\/maa\/onlinelog\/group_7.260.843615379\r\n         7 STANDBY +FRA\/maa\/onlinelog\/group_7.263.843615379\r\n         8 STANDBY +DATA\/maa\/onlinelog\/group_8.259.843615383\r\n         8 STANDBY +FRA\/maa\/onlinelog\/group_8.703.843615385\r\n         9 STANDBY +DATA\/maa\/onlinelog\/group_9.256.843615389\r\n         9 STANDBY +FRA\/maa\/onlinelog\/group_9.504.843615389\r\n        10 STANDBY +DATA\/maa\/onlinelog\/group_10.274.843615393\r\n        10 STANDBY +FRA\/maa\/onlinelog\/group_10.496.843615393\r\n\r\n20 rows selected.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Estes grupos tamb\u00e9m precisam ser criados no standby, utilize a formula anterior, mas como temos o mesmo n\u00famero de inst\u00e2ncias eles s\u00e3o criados em igual n\u00famero.<\/p>\n<pre>[oracle@rac11stb01 ~]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 11.2.0.3.0 Production on Sun Mar 30 19:39:19 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\n\r\nConnected to:\r\nOracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production\r\nWith the Partitioning, Real Application Clusters, Automatic Storage Management and Real Application Testing options\r\n\r\nSQL&gt; select instance_name FROM v$instance;\r\n\r\nINSTANCE_NAME\r\n----------------\r\nmaastb1\r\n\r\nSQL&gt; SELECT group#, thread#, bytes FROM v$log;\r\n\r\n    GROUP#    THREAD#      BYTES\r\n---------- ---------- ----------\r\n         1          1   52428800\r\n         2          1   52428800\r\n         3          2   52428800\r\n         4          2   52428800\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 52428800;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; SELECT group#, thread# FROM v$standby_log;\r\n\r\n    GROUP#    THREAD#\r\n---------- ----------\r\n         5          1\r\n         6          1\r\n         7          1\r\n         8          2\r\n         9          2\r\n        10          2\r\n\r\n6 rows selected.\r\n\r\nSQL&gt; COL MEMBER FORMAT a50\r\nSQL&gt; SELECT group#, type, member FROM v$logfile;\r\n\r\n    GROUP# TYPE    MEMBER\r\n---------- ------- --------------------------------------------------\r\n         1 ONLINE  +DG01\/maastb\/onlinelog\/group_1.268.843607109\r\n         1 ONLINE  +FRA\/maastb\/onlinelog\/group_1.579.843607111\r\n         2 ONLINE  +DG01\/maastb\/onlinelog\/group_2.269.843607115\r\n         2 ONLINE  +FRA\/maastb\/onlinelog\/group_2.568.843607117\r\n         3 ONLINE  +DG01\/maastb\/onlinelog\/group_3.270.843607121\r\n         3 ONLINE  +FRA\/maastb\/onlinelog\/group_3.564.843607123\r\n         4 ONLINE  +DG01\/maastb\/onlinelog\/group_4.271.843607125\r\n         4 ONLINE  +FRA\/maastb\/onlinelog\/group_4.562.843607129\r\n         5 STANDBY +DG01\/maastb\/onlinelog\/group_5.267.843615577\r\n         5 STANDBY +FRA\/maastb\/onlinelog\/group_5.559.843615581\r\n         6 STANDBY +DG01\/maastb\/onlinelog\/group_6.266.843615585\r\n\r\n    GROUP# TYPE    MEMBER\r\n---------- ------- --------------------------------------------------\r\n         6 STANDBY +FRA\/maastb\/onlinelog\/group_6.553.843615589\r\n         7 STANDBY +DG01\/maastb\/onlinelog\/group_7.261.843615593\r\n         7 STANDBY +FRA\/maastb\/onlinelog\/group_7.604.843615595\r\n         8 STANDBY +DG01\/maastb\/onlinelog\/group_8.260.843615599\r\n         8 STANDBY +FRA\/maastb\/onlinelog\/group_8.600.843615601\r\n         9 STANDBY +DG01\/maastb\/onlinelog\/group_9.259.843615607\r\n         9 STANDBY +FRA\/maastb\/onlinelog\/group_9.611.843615611\r\n        10 STANDBY +DG01\/maastb\/onlinelog\/group_10.258.843615615\r\n        10 STANDBY +FRA\/maastb\/onlinelog\/group_10.591.843615617\r\n\r\n20 rows selected.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Assim, temos tanto o primary e standby configurados para permitir o envio correto de redo entre eles. Criamos os standby redo logs na primary para garantir que em uma eventual troca de roles j\u00e1 esteja tudo correto.<\/p>\n<p style=\"text-align: justify;\"><strong>SPFILE\/PFILE STANDBY<\/strong><\/p>\n<p style=\"text-align: justify;\">Independente da forma como voc\u00ea clona o standby tanto o spfile quanto o pfile estar\u00e3o errados quanto ao seu destino, voc\u00ea ter\u00e1 que corrigir o caminho deles. Na base standby voc\u00ea vera que o spfile n\u00e3o existe:<\/p>\n<pre>SQL&gt; SHOW PARAMETER spfile\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nspfile                               string\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">A primeira coisa a ser feita \u00e9 criar o SPFILE no local correto, neste caso estamos armazenando ele no ASM. A origem do SPFILE ser\u00e1 o PFILE que editamos em passos anteriores e utilizamos para fazer o startup da standby:<\/p>\n<pre>SQL&gt; CREATE spfile = '+DG01' FROM pfile = '\/tmp\/pfile-primary-standby.ora';\r\n\r\nFile created.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Infelizmente nem tudo s\u00e3o flores e o SPFILE fica errado no ASM e precisa ser corrigido. O erro est\u00e1 no fato de que o <em>alias<\/em> que aponta para o parameterfile n\u00e3o ser criado. Observe:<\/p>\n<pre>[oracle@rac11stb01 ~]$ export ORACLE_SID=+ASM1\r\n[oracle@rac11stb01 ~]$ export ORACLE_HOME=\/u01\/app\/grid\/11.2.0.3\r\n[oracle@rac11stb01 ~]$ asmcmd\r\nASMCMD&gt; cd +DG01\r\nASMCMD&gt; cd maastb\r\nASMCMD&gt; ls -l\r\nType  Redund  Striped  Time             Sys  Name\r\n                                        Y    CONTROLFILE\/\r\n                                        Y    DATAFILE\/\r\n                                        Y    ONLINELOG\/\r\n                                        Y    PARAMETERFILE\/\r\nASMCMD&gt; ls -l PARAMETERFILE\/\r\nType           Redund  Striped  Time             Sys  Name\r\nPARAMETERFILE  UNPROT  COARSE   APR 10 01:00:00  Y    spfile.273.844479295\r\nASMCMD&gt;\r\nASMCMD&gt; mkalias +DG01\/maastb\/PARAMETERFILE\/spfile.273.844479295 spfilemaastb.ora\r\nASMCMD&gt; ls -l\r\nType           Redund  Striped  Time             Sys  Name\r\n                                                 Y    CONTROLFILE\/\r\n                                                 Y    DATAFILE\/\r\n                                                 Y    ONLINELOG\/\r\n                                                 Y    PARAMETERFILE\/\r\n                                                 N    spfilemaastb.ora =&gt; +DG01\/MAASTB\/PARAMETERFILE\/spfile.273.844479295\r\nASMCMD&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Depois disso, o seu caminho do SPFILE dentro do ASM est\u00e1 correto e apontando para o arquivo desejado. Agora basta corrigir a pasta \u201cdbs&#8221; existente dentro do ORACLE_HOME da inst\u00e2ncia. L\u00e1 deve ser criado um pfile\/init que aponta para o SPFILE do ASM.<\/p>\n<pre>[oracle@rac11stb01 ~]$ export ORACLE_HOME=\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\r\n[oracle@rac11stb01 ~]$ cd $ORACLE_HOME\/dbs\r\n[oracle@rac11stb01 dbs]$ ls -l\r\ntotal 28\r\n-rw-rw---- 1 oracle oinstall  1544 Apr  9 19:27 hc_maastb1.dat\r\n-rw-r--r-- 1 oracle oinstall  2851 May 15  2009 init.ora\r\n-rw-r----- 1 oracle oinstall  1536 Mar 30 17:14 orapwmaastb1\r\n-rw-r----- 1 oracle oinstall 15872 Mar 30 17:15 spfilemaastb1.ora\r\n[oracle@rac11stb01 dbs]$\r\n[oracle@rac11stb01 dbs]$ rm spfilemaastb1.ora\r\n[oracle@rac11stb01 dbs]$\r\n[oracle@rac11stb01 dbs]$\r\n[oracle@rac11stb01 dbs]$ vi initmaastb1.ora\r\n[oracle@rac11stb01 dbs]$ cat initmaastb1.ora\r\nSPFILE='+DG01\/maastb\/spfilemaastb.ora'\r\n[oracle@rac11stb01 dbs]$ \r\n<\/pre>\n<p style=\"text-align: justify;\">Se voc\u00ea observar, j\u00e1 existe um arquivo spfile da base standby, infelizmente em um ambiente RAC ele deve residir em um local compartilhado. Assim, removemos ele da pasta DBS. Al\u00e9m disso, precisamos corrigir a pasta \u201cdbs\u201d do outro n\u00f3 do RAC. Copiamos o arquivo do n\u00f3 1 para este n\u00f3 (observe o nome correto do arquivo de destino):<\/p>\n<pre>[oracle@rac11stb02 ~]$ cd $ORACLE_HOME\/dbs\r\n[oracle@rac11stb02 dbs]$ pwd\r\n\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\r\n[oracle@rac11stb02 dbs]$ ls -l\r\ntotal 12\r\n-rw-rw---- 1 oracle oinstall 1544 Mar 30 15:39 hc_maastb2.dat\r\n-rw-r--r-- 1 oracle oinstall 2851 Aug 18  2013 init.ora\r\n[oracle@rac11stb02 dbs]$\r\n[oracle@rac11stb02 dbs]$ scp oracle@rac11stb01:\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/initmaastb1.ora initmaastb2.ora\r\ninitmaastb1.ora                                                                                                                                                                                            100%   39     0.0KB\/s   00:00\r\n[oracle@rac11stb02 dbs]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Por fim, vamos testar o spfile da standby que est\u00e1 no local correto agora:<\/p>\n<pre>[oracle@rac11stb02 ~]$ cd $ORACLE_HOME\/dbs\r\n[oracle@rac11stb02 dbs]$ pwd\r\n\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\r\n[oracle@rac11stb02 dbs]$ ls -l\r\ntotal 12\r\n-rw-rw---- 1 oracle oinstall 1544 Mar 30 15:39 hc_maastb2.dat\r\n-rw-r--r-- 1 oracle oinstall 2851 Aug 18  2013 init.ora\r\n[oracle@rac11stb02 dbs]$\r\n[oracle@rac11stb02 dbs]$ scp oracle@rac11stb01:\/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/initmaastb1.ora initmaastb2.ora\r\ninitmaastb1.ora                                                                                                                                                                                            100%   39     0.0KB\/s   00:00\r\n[oracle@rac11stb02 dbs]$\r\nPor fim, vamos testar o spfile da standby que est\u00e1 no local correto agora:\r\n[oracle@rac11stb01 ~]$ export ORACLE_SID=maastb1\r\n[oracle@rac11stb01 ~]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 11.2.0.3.0 Production on Wed Apr 9 19:48:46 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\n\r\nConnected to:\r\nOracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production\r\nWith the Partitioning, Real Application Clusters, Automatic Storage Management and Real Application Testing options\r\n\r\nSQL&gt; SHOW PARAMETER spfile\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nspfile                               string\r\nSQL&gt; SHUTDOWN IMMEDIATE;\r\nORA-01109: database not open\r\n\r\n\r\nDatabase dismounted.\r\nORACLE instance shut down.\r\nSQL&gt;\r\nSQL&gt;\r\nSQL&gt;\r\nSQL&gt; STARTUP MOUNT;\r\nORACLE instance started.\r\n\r\nTotal System Global Area 1068937216 bytes\r\nFixed Size                  2235208 bytes\r\nVariable Size             343934136 bytes\r\nDatabase Buffers          717225984 bytes\r\nRedo Buffers                5541888 bytes\r\nDatabase mounted.\r\nSQL&gt;\r\nSQL&gt;\r\nSQL&gt; SHOW PARAMETER spfile;\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nspfile                               string      +DG01\/maastb\/spfilemaastb.ora\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>REINICIANDO A PRIMARY<\/strong><\/p>\n<p style=\"text-align: justify;\">At\u00e9 o momento temos um ambiente onde existe um standby que foi clonado da primary e est\u00e1 configurado para receber os redologs enviados da primary. O banco primary foi configurado para enviar os dados para o standby, mas isso ainda n\u00e3o foi habilitado.<\/p>\n<p style=\"text-align: justify;\">Se voc\u00ea revisar os passos at\u00e9 aqui ir\u00e1 perceber que somente configuramos os par\u00e2metros da primary no spfile. Fizemos toda a configura\u00e7\u00e3o sem qualquer interrup\u00e7\u00e3o da primary, sem downtime. Precisamos agora reiniciar o banco do primary para que os par\u00e2metros modificados passem a valer.<\/p>\n<p style=\"text-align: justify;\">Eu recomendo fazer isso com a base parada em ambos os n\u00f3s. Recomendo abrir uma segunda se\u00e7\u00e3o a inst\u00e2ncia que ir\u00e1 subir a base primary para acompanhar o seu alert.log. Observe os passos abaixo:<\/p>\n<pre>[oracle@rac11pri01 ~]$ srvctl stop database -d maa -o immediate\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ srvctl start instance -d maa -i maa1\r\n[oracle@rac11pri01 ~]$\r\n\r\nNo alert (cropado para s\u00f3 mostrar pontos importantes):\r\n    [root@rac11pri01 ~]# tail -f \/u01\/app\/oracle\/diag\/rdbms\/maa\/maa1\/trace\/alert_maa1.log\r\n    NOTE: force a map free for map id 3992\r\n    Thu Apr 10 02:32:27 2014\r\n    Stopping background process VKTM\r\n    NOTE: force a map free for map id 3991\r\n    Thu Apr 10 02:32:28 2014\r\n    NOTE: Shutting down MARK background process\r\n    Thu Apr 10 02:32:33 2014\r\n    freeing rdom 0\r\n    Thu Apr 10 02:32:36 2014\r\n    Instance shutdown complete\r\n    ...\r\n    ...            \r\n    Starting up:\r\n    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production\r\n    ...\r\n    ...\r\n    Using parameter settings in server-side pfile \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/initmaa1.ora\r\n    System parameters with non-default values:\r\n      processes                = 150\r\n      spfile                   = \"+DATA\/maa\/spfilemaa.ora\"\r\n      sga_target               = 1G\r\n      control_files            = \"+DATA\/maa\/controlfile\/current.273.843488553\"\r\n      control_files            = \"+FRA\/maa\/controlfile\/current.256.843488553\"\r\n      db_file_name_convert     = \"+DG01\/maastb\"\r\n      db_file_name_convert     = \"+DATA\/maa\"\r\n      db_file_name_convert     = \"+FRA\/maastb\"\r\n      db_file_name_convert     = \"+FRA\/maa\"\r\n      log_file_name_convert    = \"+DG01\/maastb\"\r\n      log_file_name_convert    = \"+DATA\/maa\"\r\n      log_file_name_convert    = \"+FRA\/maastb\"\r\n      log_file_name_convert    = \"+FRA\/maa\"\r\n      db_block_size            = 8192\r\n      compatible               = \"11.2.0.0.0\"\r\n      log_archive_dest_1       = \"LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=maa\"\r\n      log_archive_dest_2       = \"SERVICE=maastb SYNC AFFIRM LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=maastb\"\r\n      log_archive_dest_state_2 = \"DEFER\"\r\n      fal_server               = \"MAASTB\"\r\n      log_archive_config       = \"DG_CONFIG=(maa,maastb)\"\r\n      log_archive_format       = \"arch_%t_%s_%r.arc\"\r\n      cluster_database         = TRUE\r\n      db_create_file_dest      = \"+DATA\"\r\n      db_recovery_file_dest    = \"+FRA\"\r\n      db_recovery_file_dest_size= 10G\r\n      standby_file_management  = \"AUTO\"\r\n      thread                   = 1\r\n      undo_tablespace          = \"UNDOTBS1\"\r\n      instance_number          = 1\r\n      remote_login_passwordfile= \"EXCLUSIVE\"\r\n      db_domain                = \"\"\r\n      remote_listener          = \"rac11pri-scan.tjsc.jus.br:1521\"\r\n      audit_file_dest          = \"\/u01\/app\/oracle\/admin\/maa\/adump\"\r\n      audit_trail              = \"DB\"\r\n      db_name                  = \"maa\"\r\n      db_unique_name           = \"maa\"\r\n      open_cursors             = 300\r\n      pga_aggregate_target     = 256M\r\n      diagnostic_dest          = \"\/u01\/app\/oracle\"\r\n    ...\r\n    ...\r\n    Reconfiguration started (old inc 0, new inc 2)\r\n    List of instances:\r\n     1 (myinst: 1)\r\n    ...\r\n    ...            \r\n    ALTER DATABASE OPEN \/* db agent *\/\/* {1:22542:638} *\/\r\n    This instance was first to open\r\n    ...\r\n    ...\r\n    ARC2: Becoming the 'no FAL' ARCH\r\n    ARC2: Becoming the 'no SRL' ARCH\r\n    ARC1: Becoming the heartbeat ARCH\r\n    Thu Apr 10 02:36:35 2014\r\n    ARC3 started with pid=36, OS id=16657\r\n    ARC3: Archival started\r\n    ARC0: STARTING ARCH PROCESSES COMPLETE\r\n    ...\r\n    ...\r\n    Completed: ALTER DATABASE OPEN \/* db agent *\/\/* {1:22542:638} *\/\r\n    Thread 1 advanced to log sequence 39 (LGWR switch)\r\n      Current log# 1 seq# 39 mem# 0: +DATA\/maa\/onlinelog\/group_1.272.843488553\r\n      Current log# 1 seq# 39 mem# 1: +FRA\/maa\/onlinelog\/group_1.286.843488555\r\n    Starting background process SMCO\r\n    ...\r\n    ...\r\n<\/pre>\n<p style=\"text-align: justify;\">Observe que n\u00e3o tivemos qualquer problema em abrir a base. Pe\u00e7o que analise com aten\u00e7\u00e3o a sa\u00edda que mostrada acima, principalmente nos par\u00e2metros que fazem refer\u00eancia ao DG (destaquei eles em negrito). Depois, basta subir a inst\u00e2ncia nos outros n\u00f3s.<\/p>\n<p style=\"text-align: justify;\"><strong>PROTECTION<\/strong><\/p>\n<p style=\"text-align: justify;\">Agora chegamos a mais um ponto importante na defini\u00e7\u00e3o do nosso ambiente, a defini\u00e7\u00e3o do grau de prote\u00e7\u00e3o do nosso ambiente. Existem tr\u00eas modos que descreverei abaixo, cada um tem seu grau de prote\u00e7\u00e3o e voc\u00ea deve avaliar qual o melhor para o seu ambiente.<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>MAXIMUM PROTECTION<\/strong>: Neste modo ambas as bases primary e standby est\u00e3o completamente sincronizadas, nenhuma transa\u00e7\u00e3o \u00e9 perdida ou deixa de ser enviada para o standby. Infelizmente isso tem um custo, caso o standby tenha alguma falha e fique indispon\u00edvel, o primary tamb\u00e9m fica indispon\u00edvel.<\/li>\n<li><strong>MAXIMUM AVAILABILITY<\/strong>: Este modo trabalha de forma semelhante ao anterior, mas permite que ocorra a indisponibilidade do standby sem que isso afete o primary. Assim, o primary continua dispon\u00edvel para os usu\u00e1rios e na volta do standby ele envia os archives para que a sincronia seja restabelecida. Um detalhe, caso o standby esteja fora e ocorra uma falha no primary (perda do Storage por exemplo), as transa\u00e7\u00f5es que n\u00e3o foram enviadas foram perdidas e voc\u00ea ter\u00e1 \u201cdata loss\u201d.<\/li>\n<li><strong>MAXIMUM PERFORMANCE<\/strong>: Aqui os archives s\u00e3o transferidos de maneira ass\u00edncrona entre o primary e o standby. Voc\u00ea deve estar ciente que est\u00e1 trabalhando com a possibilidade de perda de dados, caso ocorra uma falha com o primary voc\u00ea ter\u00e1 perdido informa\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>A escolha do modo de prote\u00e7\u00e3o depende do projeto\/ambiente que est\u00e1 montando, claro que a criticidade dos seus dados tamb\u00e9m influencia na escolha. Existe uma rela\u00e7\u00e3o que as vezes n\u00e3o fica clara (principalmente a gestores) que quanto maior o grau de prote\u00e7\u00e3o, mais garantias voc\u00ea tem que ter sobre o seu ambiente. N\u00e3o adianta montar um DG com MAXIMUM PROTECTION em um ambiente que n\u00e3o lhe d\u00e1 as mesmas garantias do primary.<\/p>\n<p style=\"text-align: justify;\">Aqui vamos utilizar e configurar o DG em MAXIMUM AVAILABILITY, voc\u00ea ter\u00e1 uma garantia de sincroniza entre primary e standby em tempo real. Isso sem deixar o seu ambiente indispon\u00edvel caso seu standby resolva acordar de mau humor.<\/p>\n<p style=\"text-align: justify;\">Para que possamos ter isso precisamos configurar o modo de prote\u00e7\u00e3o do primary, por padr\u00e3o ele vem em MAXIMUM PROTECTION, precisamos aumentar isso. Observe os comandos abaixo:<\/p>\n<pre>SQL&gt; SELECT protection_mode, protection_level FROM v$database;\r\n\r\nPROTECTION_MODE      PROTECTION_LEVEL\r\n-------------------- --------------------\r\nMAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE\r\n\r\nSQL&gt; ALTER DATABASE SET STANDBY TO MAXIMIZE AVAILABILITY;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; SELECT protection_mode, protection_level FROM v$database;\r\n\r\nPROTECTION_MODE      PROTECTION_LEVEL\r\n-------------------- --------------------\r\nMAXIMUM AVAILABILITY RESYNCHRONIZATION\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>LIGANDO O STANDBY<\/strong><\/p>\n<p style=\"text-align: justify;\">Configurar modo de prote\u00e7\u00e3o n\u00e3o \u00e9 tudo, voc\u00ea precisa fazer com que seu standy entenda que ele \u00e9 um standby, explico. At\u00e9 o momento voc\u00ea tem um clone do seu ambiente primary e s\u00f3 isso. Voc\u00ea n\u00e3o disse a ele que \u00e9 um standby, as configura\u00e7\u00f5es que foram feitas no spfile n\u00e3o dizem nada.<\/p>\n<p style=\"text-align: justify;\">Antes disso, precisamos ajustar um detalhe do seu banco standby. Quando voc\u00ea clonou seu banco para o standby o processo o deixou com o flashback desligado. Assim, recomendo ligar ele para evitar problemas futuros (em eventuais trocas de papeis entre primary e standby):<\/p>\n<pre>SQL&gt; SELECT log_mode, flashback_on FROM v$database;\r\n\r\nLOG_MODE     FLASHBACK_ON\r\n------------ ------------------\r\nARCHIVELOG   NO\r\n\r\nSQL&gt; ALTER DATABASE FLASHBACK ON;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt; SELECT log_mode, flashback_on FROM v$database;\r\n\r\nLOG_MODE     FLASHBACK_ON\r\n------------ ------------------\r\nARCHIVELOG   YES\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Depois disso voc\u00ea pode dizer ao banco clonado que ele \u00e9 um standby:<\/p>\n<pre>SQL&gt; SELECT instance_name, status FROM v$instance;\r\n\r\nINSTANCE_NAME    STATUS\r\n---------------- ------------\r\nmaastb1          MOUNTED\r\n\r\nSQL&gt; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;\r\n\r\nDatabase altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Vamos entender o que aconteceu aqui. Primeiro, temos o seguinte comando: <strong><em>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT<\/em><\/strong><em>; <\/em>Isso nos diz que o banco ficar\u00e1 em estado de recupera\u00e7\u00e3o para ser standby (<em>RECOVER MANAGED STANDBY DATABASE<\/em>) e utilizar\u00e1 o logfile para sincronia (<em>USING CURRENT LOGFILE<\/em>) e o comando retornar\u00e1 ao prompt ao fim da execu\u00e7\u00e3o (<em>DISCONNECT<\/em>).<\/p>\n<p style=\"text-align: justify;\">Indo um pouco al\u00e9m, voc\u00ea poderia n\u00e3o ter utilizado a op\u00e7\u00e3o <em>USING CURRENT LOGFILE<\/em>, mas desde o in\u00edcio foi dito que ir\u00edamos utilizar real-time apply. Mas <strong>o que \u00e9 o real-time apply<\/strong>? Vou deixar a defini\u00e7\u00e3o da documenta\u00e7\u00e3o:<\/p>\n<p style=\"text-align: justify;\"><em>If the real-time apply feature is enabled, apply services can apply redo data as it is received, without waiting for the current standby redo log file to be archived. This results in faster switchover and failover times because the standby redo log files have been applied already to the standby database by the time the failover or switchover begins.<\/em><\/p>\n<p style=\"text-align: justify;\">Acredito que a defini\u00e7\u00e3o seja clara, mas resumindo, o que acontecer no redo da primary \u00e9 enviado ao standby (aos standby red logs do banco standby) e j\u00e1 aplicado diretamente na base antes de esperar o swicthover de redo da primary. Isso \u00e9 bem interessante, pois permite uma troca de papeis bem mais r\u00e1pida para o standby.<\/p>\n<p style=\"text-align: justify;\">Claro que isso tem algumas implica\u00e7\u00f5es, no DG voc\u00ea pode definir um tempo (delay) quando uma transa\u00e7\u00e3o ocorre no primary e quando ela \u00e9 aplicada no standby. Com real-time apply essa defini\u00e7\u00e3o \u00e9 ignorada. Al\u00e9m disso, para utilizar real-time apply \u00e9 necess\u00e1rio operar em modo s\u00edncrono o envio de redo para o standby e utilizar standby redo logs.<\/p>\n<p style=\"text-align: justify;\">A t\u00edtulo de curiosidade, deixo o que apareceu no alert.log da inst\u00e2ncia standby no momento que executamos o comando acima:<\/p>\n<pre>[oracle@rac11stb01 ~]$ tail -f \/u01\/app\/oracle\/diag\/rdbms\/maastb\/maastb1\/trace\/alert_maastb1.log\r\ndatabase for recovery-related files, and does not reflect the amount of\r\nspace available in the underlying filesystem or ASM diskgroup.\r\nSat Apr 12 08:51:08 2014\r\nALTER DATABASE FLASHBACK ON\r\nSat Apr 12 08:51:10 2014\r\nRVWR started with pid=31, OS id=23476\r\nAllocated 3981120 bytes in shared pool for flashback generation buffer\r\nSat Apr 12 08:51:20 2014\r\nFlashback Database Enabled at SCN 435603\r\nCompleted: ALTER DATABASE FLASHBACK ON\r\nSat Apr 12 08:56:26 2014\r\nALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT\r\nAttempt to start background Managed Standby Recovery process (maastb1)\r\nSat Apr 12 08:56:26 2014\r\nMRP0 started with pid=36, OS id=23650\r\nMRP0: Background Managed Standby Recovery process started (maastb1)\r\n started logmerger process\r\nSat Apr 12 08:56:31 2014\r\nManaged Standby Recovery starting Real Time Apply\r\nParallel Media Recovery started with 2 slaves\r\nWaiting for all non-current ORLs to be archived...\r\nAll non-current ORLs have been archived.\r\nSat Apr 12 08:56:33 2014\r\nMedia Recovery Waiting for thread 1 sequence 19\r\nCompleted: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>SINCRONIZANDO<\/strong><\/p>\n<p style=\"text-align: justify;\">At\u00e9 agora tudo est\u00e1 tranquilo e temos um banco primary configurado, esperando que o standby esteja preparado para operar em MAXIMUM AVAILABILITY. Para tal ele espera enviar os dados de forma s\u00edncrona ao standby. No lado do standby temos um banco configurado e j\u00e1 esperando receber as informa\u00e7\u00f5es do primary.<\/p>\n<p style=\"text-align: justify;\">Assim, chegou a hora de ligar a sincronia entre os lados. Se voc\u00ea observar os passos anteriores ver\u00e1 que o destino dos archives que aponta para o standby est\u00e1 desligado, nada foi transferido at\u00e9 o momento. Observe abaixo:<\/p>\n<pre>SQL&gt; SELECT inst_id, name, value FROM gv$parameter WHERE name = 'log_archive_dest_2';\r\n\r\n   INST_ID NAME                           VALUE\r\n---------- ------------------------------ ------------------------------\r\n         1 log_archive_dest_2             SERVICE=maastb SYNC AFFIRM LGW\r\n                                          R VALID_FOR=(ONLINE_LOGFILES,P\r\n                                          RIMARY_ROLE) DB_UNIQUE_NAME=ma\r\n                                          astb\r\n\r\n         2 log_archive_dest_2             SERVICE=maastb SYNC AFFIRM LGW\r\n                                          R VALID_FOR=(ONLINE_LOGFILES,P\r\n                                          RIMARY_ROLE) DB_UNIQUE_NAME=ma\r\n                                          astb\r\n\r\n\r\nSQL&gt; SELECT inst_id, name, value FROM gv$parameter WHERE name = 'log_archive_dest_state_2';\r\n\r\n   INST_ID NAME                           VALUE\r\n---------- ------------------------------ ------------------------------\r\n         1 log_archive_dest_state_2       DEFER\r\n         2 log_archive_dest_state_2       DEFER\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Ambas as inst\u00e2ncias do primary est\u00e3o com seu destino que aponta para o standby em modo DEFFER (desabilitado). Para habilitar basta executar o comando abaixo:<\/p>\n<pre>SQL&gt; ALTER SYSTEM SET log_archive_dest_state_2 = enable SCOPE = BOTH SID = '*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Observe o que aconteceu no alertlog de ambas as inst\u00e2ncias (das primary e da standby):<\/p>\n<pre>No final observe que o dest_2 est\u00e1 sincronizado.\r\nNo alert da primary (este alert n\u00e3o foi cropado e foi copiado de um \u00fanico n\u00f3):\r\n    [oracle@rac11pri01 ~]$ tail -f \/u01\/app\/oracle\/diag\/rdbms\/maa\/maa1\/trace\/alert_maa1.log\r\n    Sat Apr 12 14:32:39 2014\r\n    Thread 1 cannot allocate new log, sequence 70\r\n    Checkpoint not complete\r\n      Current log# 1 seq# 69 mem# 0: +DATA\/maa\/onlinelog\/group_1.272.843488553\r\n      Current log# 1 seq# 69 mem# 1: +FRA\/maa\/onlinelog\/group_1.286.843488555\r\n    Thread 1 advanced to log sequence 70 (LGWR switch)\r\n      Current log# 2 seq# 70 mem# 0: +DATA\/maa\/onlinelog\/group_2.271.843488555\r\n      Current log# 2 seq# 70 mem# 1: +FRA\/maa\/onlinelog\/group_2.285.843488555\r\n    Sat Apr 12 14:32:42 2014\r\n    Archived Log entry 156 added for thread 1 sequence 69 ID 0x2b099804 dest 1:\r\n    Sat Apr 12 14:33:12 2014\r\n    ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=BOTH SID='*';\r\n    Sat Apr 12 14:33:14 2014\r\n    ARC3: Standby redo logfile selected for thread 1 sequence 65 for destination LOG_ARCHIVE_DEST_2\r\n    Sat Apr 12 14:33:15 2014\r\n    Destination LOG_ARCHIVE_DEST_2 is UNSYNCHRONIZED\r\n    ******************************************************************\r\n    LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2\r\n    ******************************************************************\r\n    LGWR: Standby redo logfile selected to archive thread 1 sequence 71\r\n    LGWR: Standby redo logfile selected for thread 1 sequence 71 for destination LOG_ARCHIVE_DEST_2\r\n    Thread 1 advanced to log sequence 71 (LGWR switch)\r\n      Current log# 1 seq# 71 mem# 0: +DATA\/maa\/onlinelog\/group_1.272.843488553\r\n      Current log# 1 seq# 71 mem# 1: +FRA\/maa\/onlinelog\/group_1.286.843488555\r\n    Sat Apr 12 14:33:21 2014\r\n    Archived Log entry 162 added for thread 1 sequence 70 ID 0x2b099804 dest 1:\r\n    ARC3: Standby redo logfile selected for thread 1 sequence 70 for destination LOG_ARCHIVE_DEST_2\r\n    Sat Apr 12 14:33:29 2014\r\n    Destination LOG_ARCHIVE_DEST_2 is SYNCHRONIZED\r\n    LGWR: Standby redo logfile selected to archive thread 1 sequence 72\r\n    LGWR: Standby redo logfile selected for thread 1 sequence 72 for destination LOG_ARCHIVE_DEST_2\r\n    Thread 1 advanced to log sequence 72 (LGWR switch)\r\n      Current log# 2 seq# 72 mem# 0: +DATA\/maa\/onlinelog\/group_2.271.843488555\r\n      Current log# 2 seq# 72 mem# 1: +FRA\/maa\/onlinelog\/group_2.285.843488555\r\n    Sat Apr 12 14:33:32 2014\r\n    Archived Log entry 174 added for thread 1 sequence 71 ID 0x2b099804 dest 1:\r\n\r\n\r\nNo alert da Primary (em outro n\u00f3):\r\n    [oracle@rac11pri02 ~]$ tail -f \/u01\/app\/oracle\/diag\/rdbms\/maa\/maa2\/trace\/alert_maa2.log\r\n      Current log# 4 seq# 48 mem# 0: +DATA\/maa\/onlinelog\/group_4.262.843489103\r\n      Current log# 4 seq# 48 mem# 1: +FRA\/maa\/onlinelog\/group_4.283.843489103\r\n    Sat Apr 12 20:32:25 2014\r\n    Archived Log entry 154 added for thread 2 sequence 47 ID 0x2b099804 dest 1:\r\n    Sat Apr 12 20:32:39 2014\r\n    Thread 2 advanced to log sequence 49 (LGWR switch)\r\n      Current log# 3 seq# 49 mem# 0: +DATA\/maa\/onlinelog\/group_3.257.843489101\r\n      Current log# 3 seq# 49 mem# 1: +FRA\/maa\/onlinelog\/group_3.284.843489101\r\n    Sat Apr 12 20:32:40 2014\r\n    Archived Log entry 155 added for thread 2 sequence 48 ID 0x2b099804 dest 1:\r\n    Sat Apr 12 20:33:12 2014\r\n    Using STANDBY_ARCHIVE_DEST parameter default value as USE_DB_RECOVERY_FILE_DEST\r\n    Sat Apr 12 20:33:16 2014\r\n    Destination LOG_ARCHIVE_DEST_2 is UNSYNCHRONIZED\r\n    ******************************************************************\r\n    LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2\r\n    ******************************************************************\r\n    Sat Apr 12 20:33:16 2014\r\n    NSS2 started with pid=48, OS id=17931\r\n    LGWR: Standby redo logfile selected to archive thread 2 sequence 50\r\n    LGWR: Standby redo logfile selected for thread 2 sequence 50 for destination LOG_ARCHIVE_DEST_2\r\n    Thread 2 advanced to log sequence 50 (LGWR switch)\r\n      Current log# 4 seq# 50 mem# 0: +DATA\/maa\/onlinelog\/group_4.262.843489103\r\n      Current log# 4 seq# 50 mem# 1: +FRA\/maa\/onlinelog\/group_4.283.843489103\r\n    Sat Apr 12 20:33:31 2014\r\n    Destination LOG_ARCHIVE_DEST_2 is SYNCHRONIZED\r\n    LGWR: Standby redo logfile selected to archive thread 2 sequence 51\r\n    LGWR: Standby redo logfile selected for thread 2 sequence 51 for destination LOG_ARCHIVE_DEST_2\r\n    Thread 2 advanced to log sequence 51 (LGWR switch)\r\n      Current log# 3 seq# 51 mem# 0: +DATA\/maa\/onlinelog\/group_3.257.843489101\r\n      Current log# 3 seq# 51 mem# 1: +FRA\/maa\/onlinelog\/group_3.284.843489101\r\n    Sat Apr 12 20:33:32 2014\r\n    Archived Log entry 175 added for thread 2 sequence 50 ID 0x2b099804 dest 1:\r\n    Sat Apr 12 20:33:35 2014\r\n    Starting background process SMCO\r\n    Sat Apr 12 20:33:35 2014\r\n    SMCO started with pid=49, OS id=17946\r\n\r\n\r\nNo alert da standby pode-se observar que os archives come\u00e7aram a ser recebidos. Estes archives recebidos s\u00e3o aqueles com dados entre o momento que o duplicate foi feito e o que o dest_2 foi habilitado (o gap).\r\nEstes arquivos foram recebidos e aplicados na base de dados para deixar ela sincronizada.\r\nObserve que s\u00f3 depois de aplicar todos os archives \u00e9 que o redo da Primary foi sincronizado (Recovery of Online Redo Log) para ambas as threads.\r\nAlert da Standby:\r\n    [oracle@rac11stb01 ~]$ tail -f \/u01\/app\/oracle\/diag\/rdbms\/maastb\/maastb1\/trace\/alert_maastb1.log\r\n    MRP0: Background Managed Standby Recovery process started (maastb1)\r\n     started logmerger process\r\n    Sat Apr 12 14:28:46 2014\r\n    Managed Standby Recovery starting Real Time Apply\r\n    Parallel Media Recovery started with 2 slaves\r\n    Waiting for all non-current ORLs to be archived...\r\n    All non-current ORLs have been archived.\r\n    Sat Apr 12 14:28:48 2014\r\n    Media Recovery Waiting for thread 2 sequence 43\r\n    Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT\r\n    Sat Apr 12 14:30:07 2014\r\n    Using STANDBY_ARCHIVE_DEST parameter default value as USE_DB_RECOVERY_FILE_DEST\r\n    Sat Apr 12 14:30:08 2014\r\n    RFS[1]: Assigned to RFS process 2456\r\n    RFS[1]: Selected log 5 for thread 1 sequence 65 dbid 722024964 branch 843466948\r\n    Sat Apr 12 14:30:08 2014\r\n    RFS[2]: Assigned to RFS process 2458\r\n    RFS[2]: Opened log for thread 1 sequence 66 dbid 722024964 branch 843466948\r\n    RFS[3]: Assigned to RFS process 2454\r\n    RFS[3]: Opened log for thread 1 sequence 67 dbid 722024964 branch 843466948\r\n    Archived Log entry 23 added for thread 1 sequence 66 rlc 843466948 ID 0x2b099804 dest 2:\r\n    Archived Log entry 24 added for thread 1 sequence 67 rlc 843466948 ID 0x2b099804 dest 2:\r\n    Sat Apr 12 14:30:09 2014\r\n    Primary database is in MAXIMUM AVAILABILITY mode\r\n    Standby controlfile consistent with primary\r\n    RFS[1]: Opened log for thread 1 sequence 68 dbid 722024964 branch 843466948\r\n    Sat Apr 12 14:30:10 2014\r\n    Archived Log entry 25 added for thread 1 sequence 65 ID 0x2b099804 dest 1:\r\n    RFS[2]: Opened log for thread 1 sequence 69 dbid 722024964 branch 843466948\r\n    Standby controlfile consistent with primary\r\n    RFS[4]: Assigned to RFS process 2460\r\n    RFS[4]: Selected log 5 for thread 1 sequence 71 dbid 722024964 branch 843466948\r\n    Archived Log entry 26 added for thread 1 sequence 68 rlc 843466948 ID 0x2b099804 dest 2:\r\n    Archived Log entry 27 added for thread 1 sequence 69 rlc 843466948 ID 0x2b099804 dest 2:\r\n    Sat Apr 12 14:30:14 2014\r\n    Primary database is in MAXIMUM AVAILABILITY mode\r\n    Standby controlfile consistent with primary\r\n    Standby controlfile consistent with primary\r\n    RFS[5]: Assigned to RFS process 2467\r\n    RFS[5]: Selected log 8 for thread 2 sequence 50 dbid 722024964 branch 843466948\r\n    Sat Apr 12 14:30:15 2014\r\n    RFS[6]: Assigned to RFS process 2472\r\n    RFS[6]: Selected log 6 for thread 1 sequence 70 dbid 722024964 branch 843466948\r\n    Sat Apr 12 14:30:16 2014\r\n    RFS[7]: Assigned to RFS process 2474\r\n    RFS[7]: Selected log 9 for thread 2 sequence 49 dbid 722024964 branch 843466948\r\n    Sat Apr 12 14:30:17 2014\r\n    Archived Log entry 28 added for thread 1 sequence 70 ID 0x2b099804 dest 1:\r\n    Archived Log entry 29 added for thread 2 sequence 49 ID 0x2b099804 dest 1:\r\n    Sat Apr 12 14:30:18 2014\r\n    Fetching gap sequence in thread 2, gap sequence 43-43\r\n    RFS[7]: Opened log for thread 2 sequence 43 dbid 722024964 branch 843466948\r\n    Archived Log entry 30 added for thread 2 sequence 43 rlc 843466948 ID 0x2b099804 dest 2:\r\n    Sat Apr 12 14:30:18 2014\r\n    RFS[8]: Assigned to RFS process 2478\r\n    RFS[8]: Opened log for thread 2 sequence 44 dbid 722024964 branch 843466948\r\n    Sat Apr 12 14:30:19 2014\r\n    RFS[9]: Assigned to RFS process 2476\r\n    ...\r\n    ...\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_2_seq_44.599.844720219\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_1_seq_65.567.844720209\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_1_seq_66.457.844720209\r\n    Sat Apr 12 14:30:24 2014\r\n    Changing standby controlfile to MAXIMUM AVAILABILITY level\r\n    ...\r\n    ...\r\n    RFS[5]: Selected log 9 for thread 2 sequence 51 dbid 722024964 branch 843466948\r\n    Archived Log entry 37 added for thread 2 sequence 50 ID 0x2b099804 dest 1:\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_2_seq_45.425.844720219\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_2_seq_46.420.844720219\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_1_seq_68.498.844720209\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_2_seq_47.609.844720219\r\n    Sat Apr 12 14:30:28 2014\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_1_seq_69.494.844720211\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_2_seq_48.458.844720219\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_2_seq_49.466.844720217\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_1_seq_70.470.844720217\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_1_seq_71.583.844720225\r\n    Media Recovery Log +FRA\/maastb\/archivelog\/2014_04_12\/thread_2_seq_50.257.844720225\r\n    Media Recovery Waiting for thread 1 sequence 72 (in transit)\r\n    Recovery of Online Redo Log: Thread 1 Group 6 Seq 72 Reading mem 0\r\n      Mem# 0: +DG01\/maastb\/onlinelog\/group_6.267.844716079\r\n      Mem# 1: +FRA\/maastb\/onlinelog\/group_6.604.844716081\r\n    Media Recovery Waiting for thread 2 sequence 51 (in transit)\r\n    Recovery of Online Redo Log: Thread 2 Group 9 Seq 51 Reading mem 0\r\n      Mem# 0: +DG01\/maastb\/onlinelog\/group_9.260.844716095\r\n      Mem# 1: +FRA\/maastb\/onlinelog\/group_9.591.844716097\r\n<\/pre>\n<p style=\"text-align: justify;\">Alguns detalhes destes alerts, observe que ambas as inst\u00e2ncias do banco primary est\u00e3o enviando os seus archives para o standby. Se voc\u00ea observar, ir\u00e1 ver a sequ\u00eancia dos archives enviados do primary para o standby aplicar. Observe tamb\u00e9m que o standby detectou o GAP e requisitou eles ao primary.<\/p>\n<p style=\"text-align: justify;\">\u00c9 necess\u00e1rio habilitar o log_archive_dest_state_2 no standby tamb\u00e9m, pois em caso de uma mudan\u00e7a de papeis j\u00e1 est\u00e1 tudo preparado. N\u00e3o se preocupe, pois nada ser\u00e1 enviado, lembre que na defini\u00e7\u00e3o ele s\u00f3 envia caso esteja atuando como role primary:<\/p>\n<pre>SQL&gt; ALTER SYSTEM SET log_archive_dest_state_2 = enable SCOPE = BOTH SID = '*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Podemos fazer alguns testes com a sincroniza para ver se tudo est\u00e1 em ordem. Os passos abaixo mostram como est\u00e1 a sincronia, observe que agora o banco est\u00e1 definido (PROTECTION_MODE) e operando (PROTECTION_LEVEL) em MAXIMUM AVAILABILITY.<\/p>\n<pre>SQL&gt; SELECT instance_name FROM gv$instance;\r\n\r\nINSTANCE_NAME\r\n----------------\r\nmaa2\r\nmaa1\r\n\r\nSQL&gt; SELECT protection_mode, protection_level FROM v$database;\r\n\r\nPROTECTION_MODE      PROTECTION_LEVEL\r\n-------------------- --------------------\r\nMAXIMUM AVAILABILITY MAXIMUM AVAILABILITY\r\n\r\nSQL&gt; col error format a10\r\nSQL&gt; col dest_name format a20\r\nSQL&gt; col destination format a20\r\nSQL&gt; SELECT inst_id, dest_name, destination, status, error FROM gv$archive_dest_status WHERE status != 'INACTIVE';\r\n\r\n   INST_ID DEST_NAME            DESTINATION          STATUS    ERROR\r\n---------- -------------------- -------------------- --------- ----------\r\n         1 LOG_ARCHIVE_DEST_1                        VALID\r\n         1 LOG_ARCHIVE_DEST_2   maastb               VALID\r\n         2 LOG_ARCHIVE_DEST_1                        VALID\r\n         2 LOG_ARCHIVE_DEST_2   maastb               VALID\r\n\r\nSQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">For\u00e7ando um arquivamento do primary voc\u00ea ver\u00e1 o seguinte no alert das inst\u00e2ncias:<\/p>\n<pre>No alert da Primary (n\u00f3 1)\r\n    [oracle@rac11pri01 ~]$ tail -f \/u01\/app\/oracle\/diag\/rdbms\/maa\/maa1\/trace\/alert_maa1.log\r\n    Sat Apr 12 21:24:34 2014\r\n    LGWR: Standby redo logfile selected to archive thread 1 sequence 74\r\n    LGWR: Standby redo logfile selected for thread 1 sequence 74 for destination LOG_ARCHIVE_DEST_2\r\n    Thread 1 advanced to log sequence 74 (LGWR switch)\r\n      Current log# 2 seq# 74 mem# 0: +DATA\/maa\/onlinelog\/group_2.271.843488555\r\n      Current log# 2 seq# 74 mem# 1: +FRA\/maa\/onlinelog\/group_2.285.843488555\r\n    Sat Apr 12 21:24:35 2014\r\n    Archived Log entry 183 added for thread 1 sequence 73 ID 0x2b099804 dest 1:\r\n\r\nNo alert da Primary (n\u00f3 2)\r\n    [oracle@rac11pri02 ~]$ tail -f \/u01\/app\/oracle\/diag\/rdbms\/maa\/maa2\/trace\/alert_maa2.log\r\n    Sun Apr 13 03:20:01 2014\r\n    Archived Log entry 179 added for thread 2 sequence 51 ID 0x2b099804 dest 1:\r\n    Sun Apr 13 03:24:34 2014\r\n    LGWR: Standby redo logfile selected to archive thread 2 sequence 53\r\n    LGWR: Standby redo logfile selected for thread 2 sequence 53 for destination LOG_ARCHIVE_DEST_2\r\n    Thread 2 advanced to log sequence 53 (LGWR switch)\r\n      Current log# 3 seq# 53 mem# 0: +DATA\/maa\/onlinelog\/group_3.257.843489101\r\n      Current log# 3 seq# 53 mem# 1: +FRA\/maa\/onlinelog\/group_3.284.843489101\r\n    Sun Apr 13 03:24:35 2014\r\n    Archived Log entry 182 added for thread 2 sequence 52 ID 0x2b099804 dest 1:\r\n\r\nNo alert da Standby:\r\n    [oracle@rac11stb01 ~]$ tail -f \/u01\/app\/oracle\/diag\/rdbms\/maastb\/maastb1\/trace\/alert_maastb1.log\r\n    Sat Apr 12 21:21:27 2014\r\n    Standby controlfile consistent with primary\r\n    RFS[5]: Selected log 9 for thread 2 sequence 53 dbid 722024964 branch 843466948\r\n    Sat Apr 12 21:21:28 2014\r\n    Archived Log entry 40 added for thread 2 sequence 52 ID 0x2b099804 dest 1:\r\n    Sat Apr 12 21:21:28 2014\r\n    Standby controlfile consistent with primary\r\n    RFS[4]: Selected log 6 for thread 1 sequence 74 dbid 722024964 branch 843466948\r\n    Sat Apr 12 21:21:29 2014\r\n    Archived Log entry 41 added for thread 1 sequence 73 ID 0x2b099804 dest 1:\r\n    Sat Apr 12 21:21:29 2014\r\n    Media Recovery Waiting for thread 2 sequence 53 (in transit)\r\n    Recovery of Online Redo Log: Thread 2 Group 9 Seq 53 Reading mem 0\r\n      Mem# 0: +DG01\/maastb\/onlinelog\/group_9.260.844716095\r\n      Mem# 1: +FRA\/maastb\/onlinelog\/group_9.591.844716097\r\n    Media Recovery Waiting for thread 1 sequence 74 (in transit)\r\n    Recovery of Online Redo Log: Thread 1 Group 6 Seq 74 Reading mem 0\r\n      Mem# 0: +DG01\/maastb\/onlinelog\/group_6.267.844716079\r\n      Mem# 1: +FRA\/maastb\/onlinelog\/group_6.604.844716081\r\n<\/pre>\n<p style=\"text-align: justify;\">Observe no alert das inst\u00e2ncias primary que os archives foram gerados e que o standby arquiva eles e j\u00e1 fica esperando os pr\u00f3ximos.<\/p>\n<p style=\"text-align: justify;\"><strong>REGISTRANDO O RAC STANDBY<\/strong><\/p>\n<p style=\"text-align: justify;\">Lembre-se que estamos em um ambiente RAC o banco standby n\u00e3o foi criado atrav\u00e9s das vias normais, desta forma o CRS do RAC que atende o standby n\u00e3o sabe da exist\u00eancia deste banco. Isso \u00e9 f\u00e1cil de resolver, basta registrar o banco:<\/p>\n<pre>[oracle@rac11stb01 ~]$ export ORACLE_HOME=\/u01\/app\/grid\/11.2.0.3\r\n[oracle@rac11stb01 ~]$ cd $ORACLE_HOME\/bin\r\n[oracle@rac11stb01 bin]$ srvctl add database -d maastb -o \/u01\/app\/oracle\/product\/11.2.0.3\/db_1 -c RAC -r PHYSICAL_STANDBY -s MOUNT -t IMMEDIATE -a DG01,FRA\r\n[oracle@rac11stb01 bin]$\r\n<\/pre>\n<p style=\"text-align: justify;\">E registrar as inst\u00e2ncias:<\/p>\n<pre>[oracle@rac11stb01 bin]$ srvctl add instance -d maastb -i maastb1 -n rac11stb01\r\n[oracle@rac11stb01 bin]$ srvctl add instance -d maastb -i maastb2 -n rac11stb02\r\n[oracle@rac11stb01 bin]$ \r\n<\/pre>\n<p style=\"text-align: justify;\">Observe que o banco foi registrado como PHYSICAL_STANDBY e para ser iniciado em modo MOUNT. Assim, garantimos que o standby, caso reinicie, volte corretamente.<\/p>\n<p style=\"text-align: justify;\"><strong>OUTRAS INST\u00c2NCIAS<\/strong><\/p>\n<p style=\"text-align: justify;\">Se voc\u00ea quiser, poder\u00e1 subir as outras inst\u00e2ncias do standby. Se voc\u00ea j\u00e1 estivesse com o broker, ela seria iniciada automaticamente por ele.<\/p>\n<p style=\"text-align: justify;\">O procedimento \u00e9 o mesmo, como a inst\u00e2ncia nunca foi iniciada, voc\u00ea deve criar o diret\u00f3rio \u201cadump\u201d como apontado no spfile. Todos os outros arquivos necess\u00e1rios (como init e password files) j\u00e1 foram copiados em passos anteriores.<\/p>\n<pre>Verificando o init da pasta dbs no segundo n\u00f3 do standby.\r\n    [oracle@rac11stb02 ~]$ cat \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/initmaastb2.ora\r\n    SPFILE='+DG01\/maastb\/spfilemaastb.ora'\r\n    [oracle@rac11stb02 ~]$\r\n\r\nCriando diret\u00f3rio de dump\r\n    [oracle@rac11stb02 ~]$ mkdir -p \/u01\/app\/oracle\/admin\/maastb\/adump\r\n    [oracle@rac11stb02 ~]$ \r\n\r\nSubindo a inst\u00e2ncia em modo mount\r\n    [oracle@rac11stb02 ~]$ sqlplus \/ as sysdba\r\n\r\n    SQL*Plus: Release 11.2.0.3.0 Production on Sat Apr 12 21:47:45 2014\r\n\r\n    Copyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\n    Connected to an idle instance.\r\n\r\n    SQL&gt; STARTUP NOMOUNT;\r\n    ORACLE instance started.\r\n\r\n    Total System Global Area 1068937216 bytes\r\n    Fixed Size                  2235208 bytes\r\n    Variable Size             343934136 bytes\r\n    Database Buffers          717225984 bytes\r\n    Redo Buffers                5541888 bytes\r\n    SQL&gt; ALTER DATABASE MOUNT;\r\n\r\n    Database altered.\r\n\r\n    SQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>AMBIENTE FINAL<\/strong><\/p>\n<p style=\"text-align: justify;\">Chegando aqui, voc\u00ea tem um DG configurado em que ambos, primary e standby, s\u00e3o RAC. Al\u00e9m disso, seu DG est\u00e1 com o modo de prote\u00e7\u00e3o definido como MAXIMUM AVAILABIITY que garante sincronismo no envio do dados entre primary e standby, al\u00e9m de estar com real-time.<\/p>\n<p style=\"text-align: justify;\">Mesmo assim, o seu ambiente n\u00e3o est\u00e1 100%, o broker n\u00e3o est\u00e1 configurado e n\u00e3o existe a figura do \u201cobservador\u201d definida. Caso seu primary fique offline, voc\u00ea precisar\u00e1 chavear manualmente para o standby. De qualquer forma, voc\u00ea j\u00e1 est\u00e1 protegido com DG.<\/p>\n<p style=\"text-align: justify;\">Nos pr\u00f3ximos artigos iremos ver como fazer algumas coisas com o DG, failover e switchover manuais. Iremos configurar broker e realizar failover e switchover atrav\u00e9s dele.<\/p>\n<p style=\"text-align: justify;\">No fim, n\u00e3o esque\u00e7a de fazer um backup do seu ambiente primary e do spfile do seu standby.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este artigo \u00e9 o primeiro de uma s\u00e9rie sobre Maximum Availability Architecture (MAA), com os passos, dicas e afins para configurar e manter um ambiente deste porte. No final da s\u00e9rie teremos um ambiente com Oracle RAC tanto no primary quanto no standby. Ambos sincronizados com Data Guard (DG) rodando em alta disponibilidade. N\u00e3o \u00e9 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[44,30,46,41,29,6,43,5,42,45],"tags":[],"class_list":["post-149","post","type-post","status-publish","format-standard","hentry","category-backup","category-banco-de-dados","category-clone","category-data-guard","category-database","category-exadata","category-mml","category-oracle","category-rac","category-restore"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Oracle e MAA - Data Guard e RAC - Artigo I<\/title>\n<meta name=\"description\" content=\"Configurando um ambiente Oracle com Maximum Availability Architecture (MAA), Data Guard (DG) e RAC. Dicas, detalhes e truques.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle e MAA - Data Guard e RAC - Artigo I\" \/>\n<meta property=\"og:description\" content=\"Configurando um ambiente Oracle com Maximum Availability Architecture (MAA), Data Guard (DG) e RAC. Dicas, detalhes e truques.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/\" \/>\n<meta property=\"og:site_name\" content=\"Fernando Simon\" \/>\n<meta property=\"article:published_time\" content=\"2014-04-17T23:35:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-01-26T02:32:27+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png\" \/>\n<meta name=\"author\" content=\"Simon\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Simon\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"81 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/\"},\"author\":{\"name\":\"Simon\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9\"},\"headline\":\"Oracle e MAA &#8211; Artigo I\",\"datePublished\":\"2014-04-17T23:35:22+00:00\",\"dateModified\":\"2015-01-26T02:32:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/\"},\"wordCount\":6494,\"commentCount\":3,\"image\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png\",\"articleSection\":[\"Backup\",\"Banco de Dados\",\"Clone\",\"Data Guard\",\"Database\",\"Exadata\",\"MML\",\"Oracle\",\"RAC\",\"Restore\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/\",\"url\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/\",\"name\":\"Oracle e MAA - Data Guard e RAC - Artigo I\",\"isPartOf\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png\",\"datePublished\":\"2014-04-17T23:35:22+00:00\",\"dateModified\":\"2015-01-26T02:32:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9\"},\"description\":\"Configurando um ambiente Oracle com Maximum Availability Architecture (MAA), Data Guard (DG) e RAC. Dicas, detalhes e truques.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#primaryimage\",\"url\":\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png\",\"contentUrl\":\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.fernandosimon.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle e MAA &#8211; Artigo I\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#website\",\"url\":\"https:\/\/www.fernandosimon.com\/blog\/\",\"name\":\"Fernando Simon\",\"description\":\"Have you hugged your backup today?\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.fernandosimon.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9\",\"name\":\"Simon\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a3dbc48de62fffb1829befb4a588d789ec6dc5e05977afabb3407a5f37a16482?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a3dbc48de62fffb1829befb4a588d789ec6dc5e05977afabb3407a5f37a16482?s=96&d=mm&r=g\",\"caption\":\"Simon\"},\"sameAs\":[\"http:\/\/www.fernandosimon.com\"],\"url\":\"https:\/\/www.fernandosimon.com\/blog\/author\/simon\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Oracle e MAA - Data Guard e RAC - Artigo I","description":"Configurando um ambiente Oracle com Maximum Availability Architecture (MAA), Data Guard (DG) e RAC. Dicas, detalhes e truques.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/","og_locale":"en_US","og_type":"article","og_title":"Oracle e MAA - Data Guard e RAC - Artigo I","og_description":"Configurando um ambiente Oracle com Maximum Availability Architecture (MAA), Data Guard (DG) e RAC. Dicas, detalhes e truques.","og_url":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/","og_site_name":"Fernando Simon","article_published_time":"2014-04-17T23:35:22+00:00","article_modified_time":"2015-01-26T02:32:27+00:00","og_image":[{"url":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png","type":"","width":"","height":""}],"author":"Simon","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simon","Est. reading time":"81 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#article","isPartOf":{"@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/"},"author":{"name":"Simon","@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9"},"headline":"Oracle e MAA &#8211; Artigo I","datePublished":"2014-04-17T23:35:22+00:00","dateModified":"2015-01-26T02:32:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/"},"wordCount":6494,"commentCount":3,"image":{"@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#primaryimage"},"thumbnailUrl":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png","articleSection":["Backup","Banco de Dados","Clone","Data Guard","Database","Exadata","MML","Oracle","RAC","Restore"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/","url":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/","name":"Oracle e MAA - Data Guard e RAC - Artigo I","isPartOf":{"@id":"https:\/\/www.fernandosimon.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#primaryimage"},"image":{"@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#primaryimage"},"thumbnailUrl":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png","datePublished":"2014-04-17T23:35:22+00:00","dateModified":"2015-01-26T02:32:27+00:00","author":{"@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9"},"description":"Configurando um ambiente Oracle com Maximum Availability Architecture (MAA), Data Guard (DG) e RAC. Dicas, detalhes e truques.","breadcrumb":{"@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#primaryimage","url":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png","contentUrl":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2014\/04\/Ambiente-Primary.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-i\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.fernandosimon.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Oracle e MAA &#8211; Artigo I"}]},{"@type":"WebSite","@id":"https:\/\/www.fernandosimon.com\/blog\/#website","url":"https:\/\/www.fernandosimon.com\/blog\/","name":"Fernando Simon","description":"Have you hugged your backup today?","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.fernandosimon.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9","name":"Simon","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a3dbc48de62fffb1829befb4a588d789ec6dc5e05977afabb3407a5f37a16482?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a3dbc48de62fffb1829befb4a588d789ec6dc5e05977afabb3407a5f37a16482?s=96&d=mm&r=g","caption":"Simon"},"sameAs":["http:\/\/www.fernandosimon.com"],"url":"https:\/\/www.fernandosimon.com\/blog\/author\/simon\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5ofTp-2p","_links":{"self":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/posts\/149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/comments?post=149"}],"version-history":[{"count":0,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/posts\/149\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/media?parent=149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/categories?post=149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/tags?post=149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}