{"id":157,"date":"2014-05-29T23:26:29","date_gmt":"2014-05-30T02:26:29","guid":{"rendered":"http:\/\/www.fernandosimon.com\/blog\/?p=157"},"modified":"2015-01-25T23:27:58","modified_gmt":"2015-01-26T02:27:58","slug":"oracle-e-maa-artigo-v-broker","status":"publish","type":"post","link":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/","title":{"rendered":"Oracle e MAA \u2013 Artigo V \u2013 Broker"},"content":{"rendered":"<p style=\"text-align: justify;\">Se voc\u00ea est\u00e1 acompanhando a s\u00e9rie de artigos sobre MAA com Oracle RAC deve ter notado que gerenciar manualmente um ambiente com esta complexidade n\u00e3o \u00e9 uma tarefa simples. S\u00e3o in\u00fameros detalhes e configura\u00e7\u00f5es que podem fazer voc\u00ea perder o ambiente atrav\u00e9s de um \u00fanico comando, fica mais complicado quando voc\u00ea tem que lidar manualmente com failover, switchover e reinstate.<\/p>\n<p style=\"text-align: justify;\">Felizmente com Data Guard podemos utilizar o Broker para nos auxiliar em algumas tarefas, automatizando diversas tarefas. Neste artigo vou mostrar como configurar e integrar o Broker ao nosso ambiente DG com Oracle RAC.<\/p>\n<p style=\"text-align: justify;\"><strong>QUINTO ARTIGO<\/strong><\/p>\n<p style=\"text-align: justify;\">Como disse, neste artigo vamos ver como configurar o Broker em nosso ambiente, al\u00e9m disso vamos ver o que precisamos fazer para que fique corretamente configurado com um Oracle RAC. A inten\u00e7\u00e3o deste artigo \u00e9 deixar o Broker completamente operacional e integrado e onde (no futuro) possamos realizar failover, reinstate e switchover de forma \u201cautom\u00e1tica\u201d. Deixarei somente a configura\u00e7\u00e3o do Broker para este artigo.<\/p>\n<p style=\"text-align: justify;\">Como j\u00e1 disse em artigos anteriores, a inten\u00e7\u00e3o \u00e9 mostrar todos os passos envolvidos no processo. Procuro demonstrar e explicar todos os logs envolvidos para que voc\u00ea possa ter uma no\u00e7\u00e3o do que est\u00e1 acontecendo e vislumbrar algumas coisas que acontecem por &#8220;baixo dos panos&#8221;. Infelizmente isso faz com que os artigos fiquem extensos e neste artigo os logs ficar\u00e3o maiores e agora teremos mais locais para acompanhar.<\/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;\">At\u00e9 o momento n\u00f3s temos um ambiente Oracle configurado para MAA, temos um Oracle RAC primary e um Oracle RAC no standby. Ambos sincronizados em MAXIMUM AVAILABILITY e com real-time apply. Tamb\u00e9m j\u00e1 vimos o que fazer no caso de um <a href=\"http:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-ii-failover\/\" target=\"_blank\">failover<\/a>, a sua recupera\u00e7\u00e3o atrav\u00e9s de <a href=\"http:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-iii-reinstate\/\" target=\"_blank\">reinstate<\/a> e o <a href=\"http:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-iv-switchover\/\" target=\"_blank\">swicthover<\/a>, tudo isso feito manualmente.<\/p>\n<p style=\"text-align: justify;\">Para recapitular, o banco que est\u00e1 atuando como primary agora \u00e9 o \u201cmaa\u201d e o standby \u00e9 o \u201cmaastb. O \u201cmaa\u201d tem duas inst\u00e2ncias, a \u201cmaa1\u201d e a \u201cmaa2\u201d, o standby tem a \u201cmaastb1\u201d e a \u201cmaastb2\u201d.<\/p>\n<p style=\"text-align: justify;\"><strong>BROKER<\/strong><\/p>\n<p style=\"text-align: justify;\">Mas o que \u00e9 o Broker? De forma resumida o Broker \u00e9 um framework\/interface que centraliza o gerenciamento e monitoramento do DG, permitindo que tarefas como failover e resintate sejam realizadas mais r\u00e1pidas e com maior seguran\u00e7a.<\/p>\n<p style=\"text-align: justify;\">Para \u201cacessar\u201d o Broker utiliza-se o DGMGRL ao qual conecta-se para ter acesso as configura\u00e7\u00f5es. Sendo que estas ficam armazenadas em arquivos que definimos atrav\u00e9s de par\u00e2metros do banco de dados. Sim, voc\u00ea ter\u00e1 que aprender uma nova \u201clinguagem\u201d para utilizar o Broker. Nada muito complexo, mas \u00e9 algo a mais que ter\u00e1 que compreender e estar familiarizado.<\/p>\n<p style=\"text-align: justify;\">O Broker utiliza o processo DataGuard Monitor DMON para monitorar o ambiente com base nas configura\u00e7\u00f5es definidas (tanto nos par\u00e2metros do spfile quanto nos par\u00e2metros do pr\u00f3prio Broker). O gerenciamento do Broker pode ser feito atrav\u00e9s do DGMGRL ou do Enterprise Manager\/Grid Control. Dependendo da configura\u00e7\u00e3o definida n\u00f3s podemos ter a presen\u00e7a do Observer para identificar falhas do ambiente (como o primary). Iremos ver com calma estes detalhes mais a frente.<\/p>\n<p style=\"text-align: justify;\"><strong>Backup e Log File<\/strong><\/p>\n<p style=\"text-align: justify;\">O primeiro passo \u00e9 um backup do spfile, o Broker poder\u00e1 modificar os par\u00e2metros do DG que definimos previamente no spfile. Assim, eu recomendo voc\u00ea fazer um backup do spfile do primary e do standby:<\/p>\n<pre><strong>Na primary:<\/strong>\r\n    SQL&gt; SELECT database_role FROM v$database;\r\n\r\n    DATABASE_ROLE\r\n    ----------------\r\n    PRIMARY\r\n\r\n    SQL&gt; CREATE pfile = '\/tmp\/pfile-primary.ora' FROM spfile;\r\n\r\n    File created.\r\n\r\n    SQL&gt;\r\n\r\n          \r\n<strong>Na standby:<\/strong>\r\n    SQL&gt; SELECT database_role FROM v$database;\r\n\r\n    DATABASE_ROLE\r\n    ----------------\r\n    PHYSICAL STANDBY\r\n\r\n    SQL&gt; CREATE pfile = '\/tmp\/pfile-standby.ora' FROM spfile;\r\n\r\n    File created.\r\n\r\n    SQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Acredito que seja importante saber em que local o log do Broker pode ser encontrado. Este log \u00e9 parecido com um alertlog de uma inst\u00e2ncia e diversas informa\u00e7\u00f5es importantes podem ser encontradas nele. A sua localiza\u00e7\u00e3o \u00e9 na mesma pasta que o alertlog da inst\u00e2ncia e o seu nome \u00e9 <strong>drc&lt;nome_instancia&gt;.log<\/strong>.<\/p>\n<p style=\"text-align: justify;\"><strong>dg_broker_config_fileX<\/strong><\/p>\n<p style=\"text-align: justify;\">\u00c9 atrav\u00e9s dos par\u00e2metros dg_broker_config_file1 e dg_broker_config_file2 que os arquivos de configura\u00e7\u00e3o do Broker podem ser definidos. Ser\u00e1 nestes arquivos que a configura\u00e7\u00e3o ficar\u00e1 salva.<\/p>\n<p style=\"text-align: justify;\">Em um ambiente RAC acredito que seja importante (at\u00e9 fundamental) que os arquivos residam em um local que seja comum a todas as inst\u00e2ncias. Por padr\u00e3o esta configura\u00e7\u00e3o n\u00e3o fica do ASM, eu recomendaria direcionar os par\u00e2metros para l\u00e1. Observe abaixo como fazer isso (na primary e na standby):<\/p>\n<pre><strong>Na primary:<\/strong>\r\n    SQL&gt; SHOW PARAMETER broker\r\n\r\n    NAME                                 TYPE        VALUE\r\n    ------------------------------------ ----------- ------------------------------\r\n    dg_broker_config_file1               string      \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/dr1maa.dat\r\n    dg_broker_config_file2               string      \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/dr2maa.dat\r\n    dg_broker_start                      boolean     FALSE\r\n    SQL&gt; <strong>ALTER SYSTEM SET dg_broker_config_file1 = '+DATA\/MAA\/dr1maa.dat' SCOPE = BOTH SID = '*';<\/strong>\r\n\r\n    System altered.\r\n\r\n    SQL&gt; <strong>ALTER SYSTEM SET dg_broker_config_file2 = '+FRA\/MAA\/dr2maa.dat' SCOPE = BOTH SID = '*';<\/strong>\r\n\r\n    System altered.\r\n\r\n    SQL&gt;\r\n\r\n        \r\n<strong>No standby:<\/strong>\r\n    SQL&gt; SHOW PARAMETER broker\r\n\r\n    NAME                                 TYPE        VALUE\r\n    ------------------------------------ ----------- ------------------------------\r\n    dg_broker_config_file1               string      \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/dr1maastb.dat\r\n    dg_broker_config_file2               string      \/u01\/app\/oracle\/product\/11.2.0.3\/db_1\/dbs\/dr2maastb.dat\r\n    dg_broker_start                      boolean     FALSE\r\n    SQL&gt;<strong> ALTER SYSTEM SET dg_broker_config_file1 = '+DG01\/MAASTB\/dr1maastb.dat' SCOPE = BOTH SID = '*';<\/strong>\r\n\r\n    System altered.\r\n\r\n    SQL&gt; <strong>ALTER SYSTEM SET dg_broker_config_file2 = '+FRA\/MAASTB\/dr2maastb.dat' SCOPE = BOTH SID = '*';<\/strong>\r\n\r\n    System altered.\r\n\r\n    SQL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Como voc\u00ea pode ver acima, s\u00e3o definidos dois locais diferentes para evitar perder ambos de uma \u00fanica vez. Al\u00e9m disso, observe que o Broker est\u00e1 desligado.<\/p>\n<p style=\"text-align: justify;\">\u00a0<strong>dg_broker_start<\/strong><\/p>\n<p style=\"text-align: justify;\">O par\u00e2metro dg_broker_start define que o Broker ficar\u00e1 habilitado e iniciar\u00e1 junto com o seu banco de dados. Observe:<\/p>\n<pre>Na primary:\r\n    SQL&gt; SELECT database_role FROM v$database;\r\n\r\n    DATABASE_ROLE\r\n    ----------------\r\n    PRIMARY\r\n\r\n    SQL&gt;  <strong>ALTER SYSTEM SET dg_broker_start = TRUE SCOPE = BOTH SID = '*';<\/strong>\r\n\r\n    System altered.\r\n\r\n    SQL&gt;\r\n\r\n    No alert da primary:    \r\n        Sat May 03 08:25:02 2014\r\n        DMON started with pid=50, OS id=28996\r\n        Sat May 03 08:25:02 2014\r\n        ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=BOTH SID='*';\r\n        <strong>Starting Data Guard Broker (DMON)<\/strong>\r\n\r\nNa standby:\r\n    SQL&gt; SELECT database_role FROM v$database;\r\n\r\n    DATABASE_ROLE\r\n    ----------------\r\n    PHYSICAL STANDBY\r\n\r\n    SQL&gt; <strong>ALTER SYSTEM SET dg_broker_start = TRUE SCOPE = BOTH SID = '*';<\/strong>\r\n\r\n    System altered.\r\n\r\n    SQL&gt;\r\n   \r\n    No alert da standby:\r\n        Sat May 03 08:27:38 2014\r\n        DMON started with pid=53, OS id=9756\r\n        Sat May 03 08:27:38 2014\r\n        ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=BOTH SID='*';\r\n        <strong>Starting Data Guard Broker (DMON)<\/strong>\r\n        Sat May 03 08:27:53 2014\r\n        INSV started with pid=55, OS id=9763\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>DGMGRL<\/strong><\/p>\n<p style=\"text-align: justify;\">Habilitar o start do Broker como fizemos acima n\u00e3o significa muito, precisamos interagir com ele, e tudo isso \u00e9 feito atrav\u00e9s do <strong>dgmgrl<\/strong>. Como disse no in\u00edcio do artigo voc\u00ea ter\u00e1 que aprender mais uma linguagem, nada complexo ou muito extenso, mas se voc\u00ea quer Broker \u00e9 o custo a ser pago.<\/p>\n<p style=\"text-align: justify;\">Para acessar digite na linha de comando (de qualquer inst\u00e2ncia \u2013 preferencialmente primary):<\/p>\n<pre>[oracle@rac11pri01 ~]$ dgmgrl\r\nDGMGRL for Linux: Version 11.2.0.3.0 - 64bit Production\r\n\r\nCopyright (c) 2000, 2009, Oracle. All rights reserved.\r\n\r\nWelcome to DGMGRL, type \"help\" for information.\r\nDGMGRL&gt; CONNECT sys@maa\r\nPassword:\r\nConnected.\r\nDGMGRL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Veja que tamb\u00e9m conectamos na base de dados. Primeiramente conectamos na base primary com o usu\u00e1rio SYS e usamos o que est\u00e1 definido no TNSNAMES. Eu recomendo iniciar a configura\u00e7\u00e3o atrav\u00e9s da base que est\u00e1 atuando como primary.<\/p>\n<p style=\"text-align: justify;\"><strong>Create Configuration<\/strong><\/p>\n<p style=\"text-align: justify;\">Depois de conectar no Broker precisamos criar a configura\u00e7\u00e3o dentro do Broker, basicamente voc\u00ea define quem \u00e9 o banco primary e quem \u00e9 o standby. Ao fazer isso o Broker ir\u00e1 ler seu spfile e configurar a si mesmo com base nestes par\u00e2metros.<\/p>\n<p style=\"text-align: justify;\">Claro que devemos tomar cuidado com o que definimos na configura\u00e7\u00e3o. Acredito que o mais importante seja o TNS do seu ambiente, certifique-se que todos os servidores do seu Oracle RAC primary tem entradas para o seu standby, e que todos os servidores do seu Oracle RAC standby tenham entradas para o seu primary. Se voc\u00ea n\u00e3o tem isso (deveria ter se seguiu todos os passos e artigos at\u00e9 aqui) corrija imediatamente. Quando criamos a configura\u00e7\u00e3o o Broker ir\u00e1 atr\u00e1s do seu TNS para se conectar com o banco de dados, entendeu a import\u00e2ncia?<\/p>\n<p style=\"text-align: justify;\">Recapitulando novamente, o seu banco que est\u00e1 atuando como primary agora \u00e9 o \u201cmaa\u201d e o standby \u00e9 o \u201cmaastb. O \u201cmaa\u201d tem duas inst\u00e2ncias, a \u201cmaa1\u201d e a \u201cmaa2\u201d, o standby tem a \u201cmaastb1\u201d e a \u201cmaastb2\u201d.<\/p>\n<p style=\"text-align: justify;\">Bom, para criar a configura\u00e7\u00e3o no Broker basta fazer os seguintes comandos atrav\u00e9s do dgmgrl:<\/p>\n<pre>DGMGRL&gt; <strong>CREATE CONFIGURATION 'dgrac' AS<\/strong>\r\n&gt; <strong>PRIMARY DATABASE IS 'maa'<\/strong>\r\n&gt; <strong>CONNECT IDENTIFIER IS 'maa';<\/strong>\r\nConfiguration \"dgrac\" created with primary database \"maa\"\r\nDGMGRL&gt;\r\n\r\n    \r\nNo alert to broker (n\u00f3 1)\r\n    No database profile named maa found in configuratio\r\n    Command Broker operation completed\r\n    ADD DATABASE\r\n    05\/03\/2014 09:09:40\r\n    DMON Registering service maa_DGB with listener(s)\r\n    Command ADD DATABASE completed\r\n\r\n\r\nNo alert do broker (n\u00f3 2)\r\n    Configuration does not exist, Data Guard broker ready\r\n    05\/03\/2014 15:09:39\r\n    No database profile named maa found in configuration\r\n    05\/03\/2014 15:09:40\r\n    DMON Registering service maa_DGB with listener(s)\r\n<\/pre>\n<p style=\"text-align: justify;\">Vamos entender o comando acima, observe que foi criada uma configura\u00e7\u00e3o chamada <strong>dgrac<\/strong> (CREATE CONFIGURATION) que tem como primary database o maa (PRIMARY DATABASE IS) e que a string de conex\u00e3o \u00e9 maa (CONNECT IDENTIFIER). Aqui vale um cuidado, se voc\u00ea especificar os nomes entre aspas duplas ele ficar\u00e1 sens\u00edvel a caixa, assim toda a vez executar u comando ter\u00e1 que chamar com os nomes entre aspas. Observe nos logs do Broker que como o arquivo de configura\u00e7\u00e3o n\u00e3o existia e foi criado automaticamente.<\/p>\n<p style=\"text-align: justify;\">Vamos ver como ficou a configura\u00e7\u00e3o atual:<\/p>\n<pre>DGMGRL&gt; <strong>SHOW CONFIGURATION<\/strong>\r\n\r\nConfiguration - dgrac\r\n\r\n  Protection Mode: MaxAvailability\r\n  Databases:\r\n    maa - Primary database\r\n\r\nFast-Start Failover: DISABLED\r\n\r\nConfiguration Status:\r\nDISABLED\r\n\r\nDGMGRL&gt; <strong>SHOW CONFIGURATION VERBOSE<\/strong>\r\n\r\nConfiguration - dgrac\r\n\r\n  Protection Mode: MaxAvailability\r\n  Databases:\r\n    maa - Primary database\r\n\r\n  Properties:\r\n    FastStartFailoverThreshold      = '30'\r\n    OperationTimeout                = '30'\r\n    FastStartFailoverLagLimit       = '30'\r\n    CommunicationTimeout            = '180'\r\n    FastStartFailoverAutoReinstate  = 'TRUE'\r\n    FastStartFailoverPmyShutdown    = 'TRUE'\r\n    BystandersFollowRoleChange      = 'ALL'\r\n\r\nFast-Start Failover: DISABLED\r\n\r\nConfiguration Status:\r\nDISABLED\r\n\r\nDGMGRL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">O primeiro detalhe que destaco \u00e9 o VERBOSE, boa parte dos comandos do dgmgrl tem a op\u00e7\u00e3o verbose. Como pode ver acima, a primeiro (sem o verbose) \u00e9 uma descri\u00e7\u00e3o simples do ambiente e sem muitas informa\u00e7\u00f5es importantes para n\u00f3s. J\u00e1 a segunda que foi definida com o verbose \u00e9 bem mais detalhada.<\/p>\n<p style=\"text-align: justify;\">Acima vimos que existe o banco \u201cmaa\u201d, vamos verificar o que o Broker identificou do nosso ambiente. Detalhando um pouco mais o banco de dados no Broker temos:<\/p>\n<pre>DGMGRL&gt; <strong>SHOW DATABASE VERBOSE maa<\/strong>\r\n\r\nDatabase - maa\r\n\r\n  <strong>Role:            PRIMARY<\/strong>\r\n  Intended State:  OFFLINE\r\n  Instance(s):\r\n    maa1\r\n    maa2\r\n\r\n  Properties:\r\n    DGConnectIdentifier             = 'maa'\r\n    ObserverConnectIdentifier       = ''\r\n    <strong>LogXptMode                      = 'SYNC'<\/strong>\r\n    DelayMins                       = '0'\r\n    Binding                         = 'optional'\r\n    MaxFailure                      = '0'\r\n    MaxConnections                  = '1'\r\n    ReopenSecs                      = '300'\r\n    NetTimeout                      = '30'\r\n    RedoCompression                 = 'DISABLE'\r\n    LogShipping                     = 'ON'\r\n    PreferredApplyInstance          = ''\r\n    ApplyInstanceTimeout            = '0'\r\n    ApplyParallel                   = 'AUTO'\r\n    StandbyFileManagement           = 'AUTO'\r\n    ArchiveLagTarget                = '0'\r\n    LogArchiveMaxProcesses          = '4'\r\n    LogArchiveMinSucceedDest        = '1'\r\n    DbFileNameConvert               = '+DG01\/maastb, +DATA\/maa, +FRA\/maastb, +FRA\/maa'\r\n    LogFileNameConvert              = '+DG01\/maastb, +DATA\/maa, +FRA\/maastb, +FRA\/maa'\r\n    FastStartFailoverTarget         = ''\r\n    InconsistentProperties          = '(monitor)'\r\n    InconsistentLogXptProps         = '(monitor)'\r\n    SendQEntries                    = '(monitor)'\r\n    LogXptStatus                    = '(monitor)'\r\n    RecvQEntries                    = '(monitor)'\r\n    SidName(*)\r\n    StaticConnectIdentifier(*)\r\n    StandbyArchiveLocation(*)\r\n    AlternateLocation(*)\r\n    LogArchiveTrace(*)\r\n    LogArchiveFormat(*)\r\n    TopWaitEvents(*)\r\n    (*) - Please check specific instance for the property value\r\n\r\nDatabase Status:\r\nDISABLED\r\n\r\nDGMGRL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Analisando o comando acima n\u00f3s vemos que Broker identificou que a troca de redo entre as bases est\u00e1 em modo s\u00edncrono (LogXptMode) e que temos duas inst\u00e2ncias. Observe tamb\u00e9m que o Broker identificou que temos convers\u00e3o de nomes de datafiles e redo&#8217;s.<\/p>\n<p style=\"text-align: justify;\">Depois de adicionarmos o primary, vamos adicionar o banco standby ao Broker. Para isso executamos:<\/p>\n<pre>DGMGRL&gt; <strong>ADD DATABASE 'maastb' AS<\/strong>\r\n&gt; <strong>CONNECT IDENTIFIER IS 'maastb';<\/strong>\r\nDatabase \"maastb\" added\r\nDGMGRL&gt;\r\n\r\nNo alert do broker:\r\n    05\/03\/2014 12:37:24\r\n    ADD DATABASE\r\n    05\/03\/2014 12:37:31\r\n    Command ADD DATABASE completed\r\n<\/pre>\n<p style=\"text-align: justify;\">Observe que no comando acima n\u00f3s n\u00e3o especificamos que o banco \u00e9 standby, isso \u00e9 lido pelo BROKER atrav\u00e9s das configura\u00e7\u00f5es do pr\u00f3prio banco. Analisando com mais detalhes o banco no Broker n\u00f3s temos:<\/p>\n<pre>DGMGRL&gt; <strong>SHOW DATABASE VERBOSE maastb<\/strong>\r\n\r\nDatabase - maastb\r\n\r\n  <strong>Role:            PHYSICAL STANDBY<\/strong>\r\n  Intended State:  OFFLINE\r\n  Transport Lag:   (unknown)\r\n  Apply Lag:       (unknown)\r\n  Real Time Query: OFF\r\n  Instance(s):\r\n    maastb1\r\n    maastb2\r\n\r\n  Properties:\r\n    DGConnectIdentifier             = 'maastb'\r\n    ObserverConnectIdentifier       = ''\r\n    LogXptMode                      = 'SYNC'\r\n    DelayMins                       = '0'\r\n    Binding                         = 'OPTIONAL'\r\n    MaxFailure                      = '0'\r\n    MaxConnections                  = '1'\r\n    ReopenSecs                      = '300'\r\n    NetTimeout                      = '30'\r\n    RedoCompression                 = 'DISABLE'\r\n    LogShipping                     = 'ON'\r\n    PreferredApplyInstance          = ''\r\n    ApplyInstanceTimeout            = '0'\r\n    ApplyParallel                   = 'AUTO'\r\n    StandbyFileManagement           = 'AUTO'\r\n    ArchiveLagTarget                = '0'\r\n    LogArchiveMaxProcesses          = '4'\r\n    LogArchiveMinSucceedDest        = '1'\r\n    DbFileNameConvert               = '+DATA\/maa, +DG01\/maastb, +FRA\/maa, +FRA\/maastb'\r\n    LogFileNameConvert              = '+DATA\/maa, +DG01\/maastb, +FRA\/maa, +FRA\/maastb'\r\n    FastStartFailoverTarget         = ''\r\n    InconsistentProperties          = '(monitor)'\r\n    InconsistentLogXptProps         = '(monitor)'\r\n    SendQEntries                    = '(monitor)'\r\n    LogXptStatus                    = '(monitor)'\r\n    RecvQEntries                    = '(monitor)'\r\n    SidName(*)\r\n    StaticConnectIdentifier(*)\r\n    StandbyArchiveLocation(*)\r\n    AlternateLocation(*)\r\n    LogArchiveTrace(*)\r\n    LogArchiveFormat(*)\r\n    TopWaitEvents(*)\r\n    (*) - Please check specific instance for the property value\r\n\r\nDatabase Status:\r\nDISABLED\r\n\r\nDGMGRL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Vamos fazer uma rela\u00e7\u00e3o com os dois comandos anteriores. Observe a \u201cRole\u201d de ambos e os par\u00e2metros DbFileNameConvert e LogFileNameConvert, eles est\u00e3o invertidos (o que era desejado). Como estamos em ambiente Oracle RAC alguns par\u00e2metros s\u00e3o espec\u00edficos para cada inst\u00e2ncia e por isso aparecem com o asterisco (*).<\/p>\n<p style=\"text-align: justify;\"><strong>Inst\u00e2ncias <\/strong><\/p>\n<p style=\"text-align: justify;\">Vamos dar uma olhada nas configura\u00e7\u00f5es espec\u00edficas de cada inst\u00e2ncia presente no ambiente. Recomendo verificar cada uma para identificar quaisquer par\u00e2metros que n\u00e3o foram devidamente carregados ou pela simples valida\u00e7\u00e3o dos mesmos. N\u00e3o detalharei cada um dos par\u00e2metros, muitos s\u00e3o auto descritivos.<\/p>\n<p style=\"text-align: justify;\">Para as inst\u00e2ncias do Oracle RAC primary:<\/p>\n<pre>DGMGRL&gt; <strong>SHOW DATABASE maa<\/strong>\r\n\r\nDatabase - maa\r\n\r\n  <strong>Role:            PRIMARY<\/strong>\r\n  Intended State:  OFFLINE\r\n  Instance(s):\r\n    maa1\r\n    maa2\r\n\r\n<strong>Database Status:\r\nDISABLED<\/strong>\r\n\r\nDGMGRL&gt; <strong>SHOW INSTANCE VERBOSE maa1<\/strong>\r\n\r\nInstance 'maa1' of database 'maa'\r\n\r\n  Host Name: rac11pri01\r\n  PFILE:\r\n  Properties:\r\n    SidName                         = 'maa1'\r\n    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.14)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maa_DGMGRL)(INSTANCE_NAME=maa1)(SERVER=DEDICATED)))'\r\n    StandbyArchiveLocation          = 'USE_DB_RECOVERY_FILE_DEST'\r\n    AlternateLocation               = ''\r\n    LogArchiveTrace                 = '0'\r\n    LogArchiveFormat                = 'arch_%t_%s_%r.arc'\r\n    TopWaitEvents                   = '(monitor)'\r\n\r\nInstance Status:\r\nDISABLED\r\n\r\nDGMGRL&gt; <strong>SHOW INSTANCE VERBOSE maa2<\/strong>\r\n\r\nInstance 'maa2' of database 'maa'\r\n\r\n  Host Name: rac11pri02\r\n  PFILE:\r\n  Properties:\r\n    SidName                         = 'maa2'\r\n    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.16)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maa_DGMGRL)(INSTANCE_NAME=maa2)(SERVER=DEDICATED)))'\r\n    StandbyArchiveLocation          = 'USE_DB_RECOVERY_FILE_DEST'\r\n    AlternateLocation               = ''\r\n    LogArchiveTrace                 = '0'\r\n    LogArchiveFormat                = 'arch_%t_%s_%r.arc'\r\n    TopWaitEvents                   = '(monitor)'\r\n\r\nInstance Status:\r\nDISABLED\r\n\r\nDGMGRL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Analisando com calma a sa\u00edda acima identificarmos que existe um banco com duas inst\u00e2ncias. Al\u00e9m disso, que cada uma delas tem uma string de conex\u00e3o \u00fanica (StaticConnectIdentifier), sobre isso n\u00f3s conversaremos depois.<\/p>\n<p style=\"text-align: justify;\">Para as inst\u00e2ncias do Oracle RAC standby temos:<\/p>\n<pre>DGMGRL&gt; <strong>SHOW DATABASE maastb<\/strong>\r\n\r\nDatabase - maastb\r\n\r\n  <strong>Role:            PHYSICAL STANDBY<\/strong>\r\n  Intended State:  OFFLINE\r\n  Transport Lag:   (unknown)\r\n  Apply Lag:       (unknown)\r\n  Real Time Query: OFF\r\n  Instance(s):\r\n    maastb1\r\n    maastb2\r\n\r\n<strong>Database Status:\r\nDISABLED<\/strong>\r\n\r\nDGMGRL&gt; <strong>SHOW INSTANCE VERBOSE maastb1<\/strong>\r\n\r\nInstance 'maastb1' of database 'maastb'\r\n\r\n  Host Name: rac11stb01\r\n  PFILE:\r\n  Properties:\r\n    SidName                         = 'maastb1'\r\n    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.52)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maastb_DGMGRL)(INSTANCE_NAME=maastb1)(SERVER=DEDICATED)))'\r\n    StandbyArchiveLocation          = 'USE_DB_RECOVERY_FILE_DEST'\r\n    AlternateLocation               = ''\r\n    LogArchiveTrace                 = '0'\r\n    LogArchiveFormat                = 'arch_%t_%s_%r.arc'\r\n    TopWaitEvents                   = '(monitor)'\r\n\r\nInstance Status:\r\nDISABLED\r\n\r\nDGMGRL&gt; <strong>SHOW INSTANCE VERBOSE maastb2<\/strong>\r\n\r\nInstance 'maastb2' of database 'maastb'\r\n\r\n  Host Name: rac11stb02\r\n  PFILE:\r\n  Properties:\r\n    SidName                         = 'maastb2'\r\n    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.51)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maastb_DGMGRL)(INSTANCE_NAME=maastb2)(SERVER=DEDICATED)))'\r\n    StandbyArchiveLocation          = 'USE_DB_RECOVERY_FILE_DEST'\r\n    AlternateLocation               = ''\r\n    LogArchiveTrace                 = '0'\r\n    LogArchiveFormat                = 'arch_%t_%s_%r.arc'\r\n    TopWaitEvents                   = '(monitor)'\r\n\r\nInstance Status:\r\nDISABLED\r\n\r\nDGMGRL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Para o standby verificamos que ele foi identificado como PHYSICAL STANDBY e que n\u00e3o existe nenhum lag para transmiss\u00e3o ou recebimento do redo com a primary. Al\u00e9m disso identificamos a string de conex\u00e3o de cada uma delas.<\/p>\n<p style=\"text-align: justify;\"><strong>Enable Configuration<\/strong><\/p>\n<p style=\"text-align: justify;\">Acredito que voc\u00ea j\u00e1 deve ter notado em todas as sa\u00eddas acima que a configura\u00e7\u00e3o do Broker n\u00e3o est\u00e1 habilitada. At\u00e9 o momento o Broker somente leu as configura\u00e7\u00f5es do Data Guard e as armazenou em seus arquivos, entrou em cada inst\u00e2ncia e leu seus par\u00e2metros.<\/p>\n<p style=\"text-align: justify;\">Para habilitarmos o Broker a gerenciar o Data Guard executamos o comando abaixo:<\/p>\n<pre>DGMGRL&gt; ENABLE CONFIGURATION;\r\nEnabled.\r\nDGMGRL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Vamos analisar com calma os alertlog das inst\u00e2ncias e o log do broker. No arquivo de log do Broker das inst\u00e2ncias do Oracle RAC primary n\u00f3s temos (o interessante aqui \u00e9 a defini\u00e7\u00e3o de qual ser\u00e1 a inst\u00e2ncia do standby que ir\u00e1 aplicar os redo recebidos):<\/p>\n<pre><strong>Log do Broker da inst\u00e2ncia primary maa1:<\/strong>\r\n    05\/03\/2014 13:31:04\r\n    ENABLE CONFIGURATION\r\n    05\/03\/2014 13:31:15\r\n    Creating process RSM0\r\n    05\/03\/2014 13:31:35\r\n    Command ENABLE CONFIGURATION completed\r\n   <strong> EDIT DATABASE maastb SET PROPERTY ActualApplyInstance = maastb1<\/strong>\r\n    Apply Instance for database maastb is maastb1\r\n    Command EDIT DATABASE maastb SET PROPERTY ActualApplyInstance = maastb1 completed\r\n\r\n<strong>Log do Broker da inst\u00e2ncia primary maa2:<\/strong>\r\n    05\/03\/2014 19:31:16\r\n    Creating process RSM0\r\n    05\/03\/2014 19:31:35\r\n    Command ENABLE CONFIGURATION completed\r\n<\/pre>\n<p style=\"text-align: justify;\">No alertlog das inst\u00e2ncias do Oracle RAC primary temos:<\/p>\n<pre><strong>Alertlog da instancia primary maa1:<\/strong>\r\n    Sat May 03 13:31:16 2014\r\n    RSM0 started with pid=55, OS id=6023\r\n    ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH SID='maa1';\r\n    ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=SPFILE SID='maa1';\r\n    ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=BOTH SID='*';\r\n    ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH SID='*';\r\n    ALTER SYSTEM SET log_archive_max_processes=4 SCOPE=BOTH SID='*';\r\n    ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH SID='*';\r\n    ALTER SYSTEM SET db_file_name_convert='+DG01\/maastb','+DATA\/maa','+FRA\/maastb','+FRA\/maa' SCOPE=SPFILE;\r\n    ALTER SYSTEM SET log_file_name_convert='+DG01\/maastb','+DATA\/maa','+FRA\/maastb','+FRA\/maa' SCOPE=SPFILE;\r\n    ALTER SYSTEM ARCHIVE LOG\r\n    Sat May 03 13:31:25 2014\r\n    Deleted Oracle managed file +FRA\/maa\/archivelog\/2014_04_12\/thread_1_seq_50.527.844699551\r\n    LGWR: Standby redo logfile selected to archive thread 1 sequence 107\r\n    LGWR: Standby redo logfile selected for thread 1 sequence 107 for destination LOG_ARCHIVE_DEST_2\r\n    Thread 1 advanced to log sequence 107 (LGWR switch)\r\n      Current log# 1 seq# 107 mem# 0: +DATA\/maa\/onlinelog\/group_1.272.843488553\r\n      Current log# 1 seq# 107 mem# 1: +FRA\/maa\/onlinelog\/group_1.286.843488555\r\n    Sat May 03 13:31:33 2014\r\n    Deleted Oracle managed file +FRA\/maa\/archivelog\/2014_04_12\/thread_2_seq_29.522.844710453\r\n    Archived Log entry 514 added for thread 1 sequence 106 ID 0x2b1d0465 dest 1:\r\n    Deleted Oracle managed file +FRA\/maa\/archivelog\/2014_04_12\/thread_1_seq_51.261.844710453\r\n    Archived Log entry 515 added for thread 2 sequence 73 ID 0x2b1d0465 dest 1:\r\n\r\n<strong>Alertlog da instancia primary maa2:<\/strong>\r\n    Sat May 03 19:31:16 2014\r\n    RSM0 started with pid=54, OS id=10114\r\n    ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH SID='maa2';\r\n    ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=SPFILE SID='maa2';\r\n    Sat May 03 19:31:30 2014\r\n    Deleted Oracle managed file +FRA\/maa\/archivelog\/2014_04_12\/thread_2_seq_28.524.844699553\r\n    LGWR: Standby redo logfile selected to archive thread 2 sequence 74\r\n    LGWR: Standby redo logfile selected for thread 2 sequence 74 for destination LOG_ARCHIVE_DEST_2\r\n    Thread 2 advanced to log sequence 74 (LGWR switch)\r\n      Current log# 4 seq# 74 mem# 0: +DATA\/maa\/onlinelog\/group_4.262.843489103\r\n      Current log# 4 seq# 74 mem# 1: +FRA\/maa\/onlinelog\/group_4.283.843489103\r\n<\/pre>\n<p style=\"text-align: justify;\">Analisando com calma as sa\u00eddas acima identificamos algumas informa\u00e7\u00f5es importantes, verificamos que ao habilitar o Broker algumas configura\u00e7\u00f5es foram modificadas. Observe que os par\u00e2metros <em>db_file_name_convert<\/em> e <em>log_file_name_convert<\/em> foram modificados (para os mesmo valores j\u00e1 cadastrados, mas tudo bem). Um dos par\u00e2metros que o Broker modificou foi o <em>standby_file_management<\/em>, se voc\u00ea notar ele tamb\u00e9m foi modificado para um valor que j\u00e1 hav\u00edamos definidos previamente.<\/p>\n<p style=\"text-align: justify;\">No arquivo do arquivo de log do Broker das inst\u00e2ncias do standby n\u00e3o temos nenhuma informa\u00e7\u00e3o muito relevante, s\u00f3 que a configura\u00e7\u00e3o do Broker foi habilitada. J\u00e1 no alertlog do standby temos informa\u00e7\u00f5es sobre par\u00e2metros que foram modificados:<\/p>\n<pre><strong>No alert da standby maastb1:<\/strong>\r\n    Sat May 03 13:27:56 2014\r\n    RSM0 started with pid=45, OS id=18329\r\n    Sat May 03 13:28:02 2014\r\n    NSV0 started with pid=56, OS id=18332\r\n    ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH SID='maastb1';\r\n    ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=SPFILE SID='maastb1';\r\n    Sat May 03 13:28:06 2014\r\n    Standby controlfile consistent with primary\r\n    RFS[2]: Selected log 5 for thread 1 sequence 107 dbid 722024964 branch 844762805\r\n    Sat May 03 13:28:11 2014\r\n    Archived Log entry 263 added for thread 1 sequence 106 ID 0x2b1d0465 dest 1:\r\n    Sat May 03 13:28:12 2014\r\n    Standby controlfile consistent with primary\r\n    RFS[4]: Selected log 8 for thread 2 sequence 74 dbid 722024964 branch 844762805\r\n    Sat May 03 13:28:13 2014\r\n    Archived Log entry 264 added for thread 2 sequence 73 ID 0x2b1d0465 dest 1:\r\n    Sat May 03 13:28:16 2014\r\n    Media Recovery Waiting for thread 1 sequence 107 (in transit)\r\n    Recovery of Online Redo Log: Thread 1 Group 5 Seq 107 Reading mem 0\r\n      Mem# 0: +DG01\/maastb\/onlinelog\/group_5.271.844716073\r\n      Mem# 1: +FRA\/maastb\/onlinelog\/group_5.553.844716075\r\n    Media Recovery Waiting for thread 2 sequence 74 (in transit)\r\n    Recovery of Online Redo Log: Thread 2 Group 8 Seq 74 Reading mem 0\r\n      Mem# 0: +DG01\/maastb\/onlinelog\/group_8.261.844716089\r\n      Mem# 1: +FRA\/maastb\/onlinelog\/group_8.611.844716093\r\n\r\n<strong>No alert da standby maastb2:<\/strong>\r\n    Sat May 03 18:34:11 2014\r\n    Using STANDBY_ARCHIVE_DEST parameter default value as USE_DB_RECOVERY_FILE_DEST\r\n    Sat May 03 19:27:52 2014\r\n    NSV0 started with pid=43, OS id=10171\r\n    Sat May 03 19:27:56 2014\r\n    RSM0 started with pid=44, OS id=10175\r\n    ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH SID='maastb2';\r\n    ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=SPFILE SID='maastb2';\r\n    ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=BOTH SID='*';\r\n    ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH SID='*';\r\n    ALTER SYSTEM SET log_archive_max_processes=4 SCOPE=BOTH SID='*';\r\n    ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH SID='*';\r\n    ALTER SYSTEM SET db_file_name_convert='+DATA\/maa','+DG01\/maastb','+FRA\/maa','+FRA\/maastb' SCOPE=SPFILE;\r\n    ALTER SYSTEM SET log_file_name_convert='+DATA\/maa','+DG01\/maastb','+FRA\/maa','+FRA\/maastb' SCOPE=SPFILE;\r\n    ALTER SYSTEM SET fal_server='maa' SCOPE=BOTH;\r\n<\/pre>\n<p style=\"text-align: justify;\">Por fim, vamos verificar como ficou a configura\u00e7\u00e3o no Broker agora:<\/p>\n<pre>DGMGRL&gt;<strong> SHOW CONFIGURATION;<\/strong>\r\n\r\nConfiguration - dgrac\r\n\r\n  Protection Mode: MaxAvailability\r\n  Databases:\r\n    maa    - Primary database\r\n    maastb - Physical standby database\r\n\r\nFast-Start Failover: DISABLED\r\n\r\n<strong>Configuration Status:\r\nSUCCESS<\/strong>\r\n\r\nDGMGRL&gt; <strong>SHOW DATABASE maa;<\/strong>\r\n\r\nDatabase - maa\r\n\r\n  Role:            PRIMARY\r\n  Intended State:  TRANSPORT-ON\r\n  Instance(s):\r\n    maa1\r\n    maa2\r\n\r\nDatabase Status:\r\nSUCCESS\r\n\r\nDGMGRL&gt;<strong> SHOW DATABASE maastb;<\/strong>\r\n\r\nDatabase - maastb\r\n\r\n  Role:            PHYSICAL STANDBY\r\n  Intended State:  APPLY-ON\r\n  Transport Lag:   0 seconds\r\n  Apply Lag:       0 seconds\r\n  Real Time Query: OFF\r\n  Instance(s):\r\n    maastb1 (apply instance)\r\n    maastb2\r\n\r\nDatabase Status:\r\nSUCCESS\r\n\r\nDGMGRL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Pronto, agora voc\u00ea tem o Broker configurado e pronto para gerenciar seu ambiente DG. Isso n\u00e3o quer dizer muita coisa, ele n\u00e3o vai fazer failover ou switchover autom\u00e1tico (ainda), ele s\u00f3 est\u00e1 &#8220;monitorando&#8221; o ambiente. Voc\u00ea deve estar se perguntando quais as vantagens do Broker, no que ele ajuda at\u00e9 o momento. N\u00f3s vamos ver em pr\u00f3ximos artigos onde o Broker atua e o que ele proporciona, voc\u00ea ainda vai agradecer por ele existir.<\/p>\n<p style=\"text-align: justify;\">Infelizmente nem tudo s\u00e3o flores, depois do Broker habilitado voc\u00ea deve esquecer a possibilidade de editar in\u00fameros par\u00e2metros atrav\u00e9s do sqlplus. A partir de agora a melhor forma de editar qualquer configura\u00e7\u00e3o \u00e9 atrav\u00e9s do dgmgrl. Se voc\u00ea editar par\u00e2metros diretamente no sqlplus o Broker pode reclamar j\u00e1 que o que ele tem armazenado em seus arquivos de configura\u00e7\u00e3o difere do spfile.<\/p>\n<p style=\"text-align: justify;\"><strong>CONEX\u00c3O BROKER<\/strong><\/p>\n<p style=\"text-align: justify;\">Eu gostaria muito, mas muito mesmo, que a configura\u00e7\u00e3o do Broker para o ambiente Oracle RAC + DataGuard tivesse terminado aqui, mas infelizmente n\u00e3o. A alguns par\u00e1grafos acima eu citei o par\u00e2metro <em>StaticConnectIdentifier<\/em>, basicamente ele define como o Broker se conecta na inst\u00e2ncia para eventuais configura\u00e7\u00f5es e opera\u00e7\u00f5es (como resinstate, failover e switchover).<\/p>\n<p style=\"text-align: justify;\">De certa forma, a conex\u00e3o como est\u00e1 definida n\u00e3o ir\u00e1 funcionar em um primeiro momento, precisamos ajustar alguns detalhes para deixar o Broker 100% para um ambiente com Oracle RAC, ele precisa se conectar diretamente em cada inst\u00e2ncia. Observe as defini\u00e7\u00f5es existentes hoje no Broker:<\/p>\n<pre>DGMGRL&gt; <strong>SHOW INSTANCE maa1 StaticConnectIdentifier<\/strong>\r\n  StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.14)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maa_DGMGRL)(INSTANCE_NAME=maa1)(SERVER=DEDICATED)))'\r\nDGMGRL&gt;\r\nDGMGRL&gt; <strong>SHOW INSTANCE maa2 StaticConnectIdentifier<\/strong>\r\n  StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.16)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maa_DGMGRL)(INSTANCE_NAME=maa2)(SERVER=DEDICATED)))'\r\nDGMGRL&gt;\r\nDGMGRL&gt; <strong>SHOW INSTANCE maastb1 StaticConnectIdentifier<\/strong>\r\n  StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.52)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maastb_DGMGRL)(INSTANCE_NAME=maastb1)(SERVER=DEDICATED)))'\r\nDGMGRL&gt;\r\nDGMGRL&gt; <strong>SHOW INSTANCE maastb2 StaticConnectIdentifier<\/strong>\r\n  StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.51)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maastb_DGMGRL)(INSTANCE_NAME=maastb2)(SERVER=DEDICATED)))'\r\nDGMGRL&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Pelo que identificamos acima, a conex\u00e3o utiliza um service_name espec\u00edfico para conex\u00e3o, &lt;nome_inst\u00e2ncia&gt;_DGMGRL. Ser\u00e1 esta string de conex\u00e3o que o Broker ir\u00e1 usar para casos de failover, switchover e reinstate. Vamos come\u00e7ar testando uma dela no sqlplus para ver se ela est\u00e1 correta:<\/p>\n<pre>[oracle@rac11pri01 ~]$ sqlplus \/nolog\r\n\r\nSQL*Plus: Release 11.2.0.3.0 Production on Sun May 4 07:40:05 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\nSQL&gt; <strong>CONNECT system@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.14)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maa_DGMGRL)(INSTANCE_NAME=maa1)(SERVER=DEDICATED)))<\/strong>\r\nEnter password:\r\nERROR:\r\n<strong>ORA-12514: TNS:listener does not currently know of service requested in connect<\/strong>\r\ndescriptor\r\n\r\n\r\nSQL&gt; exit\r\n[oracle@rac11pri01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Como visto acima, a conex\u00e3o n\u00e3o est\u00e1 funcionado e recebemos o famigerado ORA-12514, realmente nada bom. Assim, se o Broker precisar conectar na inst\u00e2ncia para qualquer opera\u00e7\u00e3o ela n\u00e3o ir\u00e1 funcionar e isso piora em um ambiente Oracle RAC em que temos que ajustar para cada servidor do cluster.<\/p>\n<p style=\"text-align: justify;\">A corre\u00e7\u00e3o neste caso \u00e9 um pouco trabalhosa e envolve em fazer o registro manual da inst\u00e2ncia no listener do n\u00f3. \u00c9 um procedimento que j\u00e1 demonstrei como fazer (no primeiro artigo) e voc\u00ea ter\u00e1 que fazer em cada n\u00f3 do seu ambiente (primary e standby), agora pense em um ambiente Exadata Full com 8 n\u00f3s no cultas &#8211; \u00e9, o seu dia ser\u00e1 &#8220;longo&#8221;.<\/p>\n<p style=\"text-align: justify;\">Eu come\u00e7o verificando a configura\u00e7\u00e3o atual do listener dos n\u00f3s, neste caso a do n\u00f3 1 do primary:<\/p>\n<pre>[oracle@rac11pri01 ~]$ lsnrctl status\r\n\r\nLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 08:46:26\r\n\r\nCopyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\nConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\nSTATUS of the LISTENER\r\n------------------------\r\nAlias                     LISTENER\r\nVersion                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\nStart Date                04-MAY-2014 07:54:05\r\nUptime                    0 days 0 hr. 52 min. 21 sec\r\nTrace Level               off\r\nSecurity                  ON: Local OS Authentication\r\nSNMP                      OFF\r\nListener Parameter File   <strong>\/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\nListener Log File         \/u01\/app\/oracle\/diag\/tnslsnr\/rac11pri01\/listener\/alert\/log.xml\r\nListening Endpoints Summary...\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.10)(PORT=1521)))\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.14)(PORT=1521)))\r\nServices Summary...\r\nService \"+ASM\" has 1 instance(s).\r\n  Instance \"+ASM1\", status READY, has 1 handler(s) for this service...\r\nService \"maa\" has 1 instance(s).\r\n  Instance \"maa1\", status READY, has 1 handler(s) for this service...\r\nService \"maa_DGB\" has 1 instance(s).\r\n  Instance \"maa1\", status READY, has 1 handler(s) for this service...\r\nThe command completed successfully\r\n[oracle@rac11pri01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Vamos editar agora o listener.ora e adicionar a entrada para o registro est\u00e1tico do servi\u00e7o de conex\u00e3o a inst\u00e2ncia:<\/p>\n<pre>[oracle@rac11pri01 ~]$ <strong>cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\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[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ <strong>vi \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ <strong>cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\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<strong>#Adicionado devido ao Broker.\r\nSID_LIST_LISTENER=\r\n  (SID_LIST=\r\n    (SID_DESC=\r\n      (GLOBAL_DBNAME=maa_DGMGRL)\r\n      (ORACLE_HOME=\/u01\/app\/oracle\/product\/11.2.0.3\/db_1)\r\n      (SID_NAME=maa1)\r\n    )\r\n  )<\/strong>\r\n[oracle@rac11pri01 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Observe acima que definimos a entrada est\u00e1tica ao listener (SID_LIST_LISTENER) para o servi\u00e7o do broker (maa_DGMGRL). Os cuidados aqui s\u00e3o os de sempre, o GLOBAL_DBNAME deve casar com o que o Broker tem no <em>StaticConnectIdentifier<\/em> para esta inst\u00e2ncia, o SID_NAME deve refletir a inst\u00e2ncia do n\u00f3 e o ORACLE_HOME deve estar correto.<\/p>\n<p style=\"text-align: justify;\">Como mudamos as configura\u00e7\u00f5es do listener, precisamos reiniciar ele. Lembre que como precisamos reiniciar teremos um downtime de conex\u00e3o e at\u00e9 as conex\u00f5es podem ser finalizadas, escolha o melhor momento para fazer isso. Reinicie o listener e verifique se a conex\u00e3o com o servi\u00e7o do Broker est\u00e1 correta:<\/p>\n<pre>[oracle@rac11pri01 ~]$ <strong>lsnrctl stop<\/strong>\r\n\r\nLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:28:31\r\n\r\nCopyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\nConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\nThe command completed successfully\r\n[oracle@rac11pri01 ~]$ \r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ <strong>lsnrctl start<\/strong>\r\n\r\nLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:29:33\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\/rac11pri01\/listener\/alert\/log.xml\r\nListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n\r\nConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\nSTATUS of the LISTENER\r\n------------------------\r\nAlias                     LISTENER\r\nVersion                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\nStart Date                04-MAY-2014 09:29:33\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\/rac11pri01\/listener\/alert\/log.xml\r\nListening Endpoints Summary...\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\nServices Summary...\r\n<strong>Service \"maa_DGMGRL\" has 1 instance(s).\r\n  Instance \"maa1\", status UNKNOWN, has 1 handler(s) for this service...\r\nThe command completed successfully<\/strong>\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ <strong>lsnrctl status<\/strong>\r\n\r\nLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:29:42\r\n\r\nCopyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\nConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\nSTATUS of the LISTENER\r\n------------------------\r\nAlias                     LISTENER\r\nVersion                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\nStart Date                04-MAY-2014 09:29:33\r\nUptime                    0 days 0 hr. 0 min. 9 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\/rac11pri01\/listener\/alert\/log.xml\r\nListening Endpoints Summary...\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.10)(PORT=1521)))\r\n  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.14)(PORT=1521)))\r\nServices Summary...\r\nService \"maa\" has 1 instance(s).\r\n  Instance \"maa1\", status READY, has 1 handler(s) for this service...\r\nService \"maa_DGB\" has 1 instance(s).\r\n  Instance \"maa1\", status READY, has 1 handler(s) for this service...\r\nService \"maa_DGMGRL\" has 1 instance(s).\r\n  Instance \"maa1\", status UNKNOWN, has 1 handler(s) for this service...\r\nThe command completed successfully\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$\r\n[oracle@rac11pri01 ~]$ <strong>sqlplus \/nolog<\/strong>\r\n\r\nSQL*Plus: Release 11.2.0.3.0 Production on Sun May 4 09:40:18 2014\r\n\r\nCopyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\nSQL&gt; <strong>CONNECT system@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.14)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maa_DGMGRL)(INSTANCE_NAME=maa1)(SERVER=DEDICATED)))\r\nEnter password:\r\nConnected.<\/strong>\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<\/pre>\n<p style=\"text-align: justify;\">Acima n\u00f3s temos a parada, rein\u00edcio e status do listener. Observe que no status o registro manual j\u00e1 aparece (bem como ao iniciarmos o listener). Por fim, a conex\u00e3o espec\u00edfica ao servi\u00e7o maa_DGMGRL j\u00e1 est\u00e1 operacional.<\/p>\n<p style=\"text-align: justify;\">Para deixar o ambiente correto, fazemos o mesmo para todos os outros n\u00f3s do primary e tamb\u00e9m para do standby (comandos e informa\u00e7\u00f5es importantes marcadas em negrito):<\/p>\n<pre><strong>Outro n\u00f3 do primary (inst\u00e2ncia maa2):<\/strong>\r\n    [oracle@rac11pri02 ~]$ export ORACLE_HOME=\/u01\/app\/grid\/11.2.0.3\r\n    [oracle@rac11pri02 ~]$<strong> cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n    LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))                # line added by Agent\r\n    LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))                # line added by Agent\r\n    LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent\r\n    LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent\r\n    [oracle@rac11pri02 ~]$\r\n    [oracle@rac11pri02 ~]$\r\n    [oracle@rac11pri02 ~]$ <strong>vi \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n    [oracle@rac11pri02 ~]$\r\n    [oracle@rac11pri02 ~]$\r\n    [oracle@rac11pri02 ~]$ <strong>cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n    LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))                # line added by Agent\r\n    LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))                # line added by Agent\r\n    LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent\r\n    LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent\r\n<strong>    #Adicionado devido ao Broker.\r\n    SID_LIST_LISTENER=\r\n      (SID_LIST=\r\n        (SID_DESC=\r\n          (GLOBAL_DBNAME=maa_DGMGRL)\r\n          (ORACLE_HOME=\/u01\/app\/oracle\/product\/11.2.0.3\/db_1)\r\n          (SID_NAME=maa2)\r\n        )\r\n      )<\/strong>\r\n\r\n    [oracle@rac11pri02 ~]$\r\n    [oracle@rac11pri02 ~]$ <strong>lsnrctl stop<\/strong>\r\n\r\n    LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:47:32\r\n\r\n    Copyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\n    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\n    The command completed successfully\r\n    [oracle@rac11pri02 ~]$             \r\n    [oracle@rac11pri02 ~]$\r\n    [oracle@rac11pri02 ~]$ <strong>lsnrctl start<\/strong>\r\n\r\n    LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:47:34\r\n\r\n    Copyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\n    Starting \/u01\/app\/grid\/11.2.0.3\/bin\/tnslsnr: please wait...\r\n\r\n    TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\n    System parameter file is \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n    Log messages written to \/u01\/app\/oracle\/diag\/tnslsnr\/rac11pri02\/listener\/alert\/log.xml\r\n    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n\r\n    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\n    STATUS of the LISTENER\r\n    ------------------------\r\n    Alias                     LISTENER\r\n    Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\n    Start Date                04-MAY-2014 09:47:35\r\n    Uptime                    0 days 0 hr. 0 min. 0 sec\r\n    Trace Level               off\r\n    Security                  ON: Local OS Authentication\r\n    SNMP                      OFF\r\n    Listener Parameter File   \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n    Listener Log File         \/u01\/app\/oracle\/diag\/tnslsnr\/rac11pri02\/listener\/alert\/log.xml\r\n    Listening Endpoints Summary...\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n    Services Summary...\r\n<strong>    Service \"maa_DGMGRL\" has 1 instance(s).\r\n      Instance \"maa2\", status UNKNOWN, has 1 handler(s) for this service...\r\n    The command completed successfully<\/strong>\r\n    [oracle@rac11pri02 ~]$\r\n    [oracle@rac11pri02 ~]$\r\n    [oracle@rac11pri02 ~]$ <strong>lsnrctl status<\/strong>\r\n\r\n    LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:47:40\r\n\r\n    Copyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\n    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\n    STATUS of the LISTENER\r\n    ------------------------\r\n    Alias                     LISTENER\r\n    Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\n    Start Date                04-MAY-2014 09:47:35\r\n    Uptime                    0 days 0 hr. 0 min. 5 sec\r\n    Trace Level               off\r\n    Security                  ON: Local OS Authentication\r\n    SNMP                      OFF\r\n    Listener Parameter File   \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n    Listener Log File         \/u01\/app\/oracle\/diag\/tnslsnr\/rac11pri02\/listener\/alert\/log.xml\r\n    Listening Endpoints Summary...\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.15)(PORT=1521)))\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.16)(PORT=1521)))\r\n    Services Summary...\r\n    Service \"maa_DGMGRL\" has 1 instance(s).\r\n      Instance \"maa2\", status UNKNOWN, has 1 handler(s) for this service...\r\n    The command completed successfully\r\n    [oracle@rac11pri02 ~]$\r\n    [oracle@rac11pri02 ~]$ sqlplus \/NOLOG\r\n\r\n    SQL*Plus: Release 11.2.0.3.0 Production on Sun May 4 09:48:56 2014\r\n\r\n    Copyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\n    SQL&gt; <strong>CONNECT SYSTEM@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.16)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maa_DGMGRL)(INSTANCE_NAME=maa2)(SERVER=DEDICATED)))\r\n    Enter password:\r\n    Connected.<\/strong>\r\n    SQL&gt; exit\r\n    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production\r\n    With the Partitioning, Real Application Clusters and Automatic Storage Management options\r\n    [oracle@rac11pri02 ~]$        \r\n    \r\n    \r\n<strong>No primeiro n\u00f3 do standby (inst\u00e2ncia maastb1):<\/strong>\r\n    [oracle@rac11stb01 ~]$ export ORACLE_HOME=\/u01\/app\/grid\/11.2.0.3\r\n    [oracle@rac11stb01 ~]$ <strong>cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n    LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))         # line added by Agent\r\n    LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))              # line added by Agent\r\n    LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))              # line added by Agent\r\n    LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))              # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent\r\n\r\n\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$ <strong>vi \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$ <strong>cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n    LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))         # line added by Agent\r\n    LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))              # line added by Agent\r\n    LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))              # line added by Agent\r\n    LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))              # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent\r\n<strong>    #Adicionado devido ao Broker.\r\n    SID_LIST_LISTENER=\r\n      (SID_LIST=\r\n        (SID_DESC=\r\n          (GLOBAL_DBNAME=maastb_DGMGRL)\r\n          (ORACLE_HOME=\/u01\/app\/oracle\/product\/11.2.0.3\/db_1)\r\n          (SID_NAME=maastb1)\r\n        )\r\n      )<\/strong>\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$ <strong>lsnrctl stop<\/strong>\r\n\r\n    LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:52:56\r\n\r\n    Copyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\n    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\n    The command completed successfully\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$ <strong>lsnrctl start<\/strong>\r\n\r\n    LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:53:23\r\n\r\n    Copyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\n    Starting \/u01\/app\/grid\/11.2.0.3\/bin\/tnslsnr: please wait...\r\n\r\n    TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\n    System parameter file is \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n    Log messages written to \/u01\/app\/oracle\/diag\/tnslsnr\/rac11stb01\/listener\/alert\/log.xml\r\n    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n\r\n    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\n    STATUS of the LISTENER\r\n    ------------------------\r\n    Alias                     LISTENER\r\n    Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\n    Start Date                04-MAY-2014 09:53:23\r\n    Uptime                    0 days 0 hr. 0 min. 0 sec\r\n    Trace Level               off\r\n    Security                  ON: Local OS Authentication\r\n    SNMP                      OFF\r\n    Listener Parameter File   \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n    Listener Log File         \/u01\/app\/oracle\/diag\/tnslsnr\/rac11stb01\/listener\/alert\/log.xml\r\n    Listening Endpoints Summary...\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n    Services Summary...\r\n<strong>    Service \"maastb_DGMGRL\" has 1 instance(s).\r\n      Instance \"maastb1\", status UNKNOWN, has 1 handler(s) for this service...\r\n    The command completed successfully<\/strong>\r\n    [oracle@rac11stb01 ~]$ \r\n    [oracle@rac11stb01 ~]$ \r\n    [oracle@rac11stb01 ~]$ \r\n    [oracle@rac11stb01 ~]$ <strong>lsnrctl status<\/strong>\r\n\r\n    LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:53:28\r\n\r\n    Copyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\n    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\n    STATUS of the LISTENER\r\n    ------------------------\r\n    Alias                     LISTENER\r\n    Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\n    Start Date                04-MAY-2014 09:53:23\r\n    Uptime                    0 days 0 hr. 0 min. 5 sec\r\n    Trace Level               off\r\n    Security                  ON: Local OS Authentication\r\n    SNMP                      OFF\r\n    Listener Parameter File   \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n    Listener Log File         \/u01\/app\/oracle\/diag\/tnslsnr\/rac11stb01\/listener\/alert\/log.xml\r\n    Listening Endpoints Summary...\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.48)(PORT=1521)))\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.52)(PORT=1521)))\r\n    Services Summary...\r\n<strong>    Service \"maastb_DGMGRL\" has 1 instance(s).\r\n      Instance \"maastb1\", status UNKNOWN, has 1 handler(s) for this service...\r\n    The command completed successfully<\/strong>\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$\r\n    [oracle@rac11stb01 ~]$ sqlplus \/nolog\r\n\r\n    SQL*Plus: Release 11.2.0.3.0 Production on Sun May 4 09:53:56 2014\r\n\r\n    Copyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\n    SQL&gt; <strong>CONNECT SYSTEM@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.52)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maastb_DGMGRL)(INSTANCE_NAME=maastb1)(SERVER=DEDICATED)))\r\n    Enter password:\r\n    ERROR:\r\n    ORA-01033: ORACLE initialization or shutdown in progress\r\n    Process ID: 0\r\n    Session ID: 0 Serial number: 0\r\n\r\n<\/strong>\r\n    SQL&gt; exit\r\n    [oracle@rac11stb01 ~]$\r\n    \r\n\r\n<strong>No segundo n\u00f3 do standby (inst\u00e2ncia maastb2):<\/strong>\r\n    [oracle@rac11stb02 ~]$ export ORACLE_HOME=\/u01\/app\/grid\/11.2.0.3\r\n    [oracle@rac11stb02 ~]$ <strong>cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n    LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))              # line added by Agent\r\n    LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))              # line added by Agent\r\n    LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))         # line added by Agent\r\n    LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))              # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent\r\n\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent\r\n    [oracle@rac11stb02 ~]$\r\n    [oracle@rac11stb02 ~]$\r\n    [oracle@rac11stb02 ~]$ <strong>vi \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n    [oracle@rac11stb02 ~]$\r\n    [oracle@rac11stb02 ~]$\r\n    [oracle@rac11stb02 ~]$ <strong>cat \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora<\/strong>\r\n    LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))              # line added by Agent\r\n    LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))              # line added by Agent\r\n    LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))         # line added by Agent\r\n    LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))              # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent\r\n\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent\r\n    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent\r\n<strong>    #Adicionado devido ao Broker.\r\n    SID_LIST_LISTENER=\r\n      (SID_LIST=\r\n        (SID_DESC=\r\n          (GLOBAL_DBNAME=maastb_DGMGRL)\r\n          (ORACLE_HOME=\/u01\/app\/oracle\/product\/11.2.0.3\/db_1)\r\n          (SID_NAME=maastb2)\r\n        )\r\n      )<\/strong>\r\n    [oracle@rac11stb02 ~]$\r\n    [oracle@rac11stb02 ~]$\r\n    [oracle@rac11stb02 ~]$<strong> lsnrctl stop<\/strong>\r\n\r\n    LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:58:36\r\n\r\n    Copyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\n    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\n    The command completed successfully\r\n    [oracle@rac11stb02 ~]$ \r\n    [oracle@rac11stb02 ~]$ \r\n    [oracle@rac11stb02 ~]$ <strong>lsnrctl start<\/strong>\r\n\r\n    LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:58:39\r\n\r\n    Copyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\n    Starting \/u01\/app\/grid\/11.2.0.3\/bin\/tnslsnr: please wait...\r\n\r\n    TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\n    System parameter file is \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n    Log messages written to \/u01\/app\/oracle\/diag\/tnslsnr\/rac11stb02\/listener\/alert\/log.xml\r\n    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n\r\n    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\n    STATUS of the LISTENER\r\n    ------------------------\r\n    Alias                     LISTENER\r\n    Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\n    Start Date                04-MAY-2014 09:58:39\r\n    Uptime                    0 days 0 hr. 0 min. 0 sec\r\n    Trace Level               off\r\n    Security                  ON: Local OS Authentication\r\n    SNMP                      OFF\r\n    Listener Parameter File   \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n    Listener Log File         \/u01\/app\/oracle\/diag\/tnslsnr\/rac11stb02\/listener\/alert\/log.xml\r\n    Listening Endpoints Summary...\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n<strong>    Services Summary...\r\n    Service \"maastb_DGMGRL\" has 1 instance(s).\r\n      Instance \"maastb2\", status UNKNOWN, has 1 handler(s) for this service...\r\n    The command completed successfully<\/strong>\r\n    [oracle@rac11stb02 ~]$ \r\n    [oracle@rac11stb02 ~]$ \r\n    [oracle@rac11stb02 ~]$ <strong>lsnrctl status<\/strong>\r\n\r\n    LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-MAY-2014 09:58:43\r\n\r\n    Copyright (c) 1991, 2011, Oracle.  All rights reserved.\r\n\r\n    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))\r\n    STATUS of the LISTENER\r\n    ------------------------\r\n    Alias                     LISTENER\r\n    Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production\r\n    Start Date                04-MAY-2014 09:58:39\r\n    Uptime                    0 days 0 hr. 0 min. 3 sec\r\n    Trace Level               off\r\n    Security                  ON: Local OS Authentication\r\n    SNMP                      OFF\r\n    Listener Parameter File   \/u01\/app\/grid\/11.2.0.3\/network\/admin\/listener.ora\r\n    Listener Log File         \/u01\/app\/oracle\/diag\/tnslsnr\/rac11stb02\/listener\/alert\/log.xml\r\n    Listening Endpoints Summary...\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.50)(PORT=1521)))\r\n      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.17.42.51)(PORT=1521)))\r\n<strong>    Services Summary...\r\n    Service \"maastb_DGMGRL\" has 1 instance(s).\r\n      Instance \"maastb2\", status UNKNOWN, has 1 handler(s) for this service...\r\n    The command completed successfully<\/strong>\r\n    [oracle@rac11stb02 ~]$ sqlplus \/NOLOG\r\n\r\n    SQL*Plus: Release 11.2.0.3.0 Production on Sun May 4 09:58:46 2014\r\n\r\n    Copyright (c) 1982, 2011, Oracle.  All rights reserved.\r\n\r\n    SQL&gt; <strong>CONNECT SYSTEM@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.17.42.51)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=maastb_DGMGRL)(INSTANCE_NAME=maastb2)(SERVER=DEDICATED)))\r\n    Enter password:\r\n    ERROR:\r\n    ORA-01033: ORACLE initialization or shutdown in progress\r\n    Process ID: 0\r\n    Session ID: 0 Serial number: 0\r\n\r\n<\/strong>\r\n    SQL&gt; exit\r\n    [oracle@rac11stb02 ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">Observe atentamente o que temos acima e os comandos marcados em negrito. Para todos os servidores do luster (primary e standby) iniciamos registrando manualmente a inst\u00e2ncia no listener atrav\u00e9s da edi\u00e7\u00e3o do listener.ora, reiniciamos o listener e testamos a conex\u00e3o. Fique atento ao que foi registrado em cada listener, o nome do servi\u00e7o muda entre primary e standby (maa_DGMGRL para maastb_DGMGRL) e as inst\u00e2ncia entre cada n\u00f3. Com tudo isso configurado n\u00f3s temos o listener de cada n\u00f3 preparado para receber conex\u00f5es do Broker espec\u00edficas para cada n\u00f3.<\/p>\n<p style=\"text-align: justify;\"><strong>AMBIENTE FINAL<\/strong><\/p>\n<p style=\"text-align: justify;\">Chegamos a um ambiente com DataGuard para Oracle RAC tanto no primary e standby gerenciado pelo Broker. A configura\u00e7\u00e3o est\u00e1 ativa no Broker e tudo o que precisaremos configurar agora deve ser feito por ele sob pena de problemas de integridade entre arquivos de configura\u00e7\u00e3o. Al\u00e9m disso, como estamos com Oracle RAC deixamos tudo configurado para que o Broker consiga conectar em cada n\u00f3 para realizar opera\u00e7\u00f5es cr\u00edticas.<\/p>\n<p style=\"text-align: justify;\">Ainda n\u00e3o estamos com o ambiente 100%, se voc\u00ea notou acima n\u00f3s n\u00e3o configuramos o Fast-Start Failover no Broker. No caso de uma falha do ambiente precisaremos intervir para chaveamento entre primary e standby. No pr\u00f3ximo artigo iremos ver como fazer failover e reinstate atrav\u00e9s do Broker.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se voc\u00ea est\u00e1 acompanhando a s\u00e9rie de artigos sobre MAA com Oracle RAC deve ter notado que gerenciar manualmente um ambiente com esta complexidade n\u00e3o \u00e9 uma tarefa simples. S\u00e3o in\u00fameros detalhes e configura\u00e7\u00f5es que podem fazer voc\u00ea perder o ambiente atrav\u00e9s de um \u00fanico comando, fica mais complicado quando voc\u00ea tem que lidar manualmente [&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":[30,50,41,29,5],"tags":[],"class_list":["post-157","post","type-post","status-publish","format-standard","hentry","category-banco-de-dados","category-broker","category-data-guard","category-database","category-oracle"],"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 - Artigo V - Broker<\/title>\n<meta name=\"description\" content=\"Configurando o Broker em 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-v-broker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle e MAA - Artigo V - Broker\" \/>\n<meta property=\"og:description\" content=\"Configurando o Broker em 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-v-broker\/\" \/>\n<meta property=\"og:site_name\" content=\"Fernando Simon\" \/>\n<meta property=\"article:published_time\" content=\"2014-05-30T02:26:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-01-26T02:27:58+00:00\" \/>\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=\"39 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-v-broker\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/\"},\"author\":{\"name\":\"Simon\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9\"},\"headline\":\"Oracle e MAA \u2013 Artigo V \u2013 Broker\",\"datePublished\":\"2014-05-30T02:26:29+00:00\",\"dateModified\":\"2015-01-26T02:27:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/\"},\"wordCount\":2697,\"commentCount\":3,\"articleSection\":[\"Banco de Dados\",\"Broker\",\"Data Guard\",\"Database\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/\",\"url\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/\",\"name\":\"Oracle e MAA - Artigo V - Broker\",\"isPartOf\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#website\"},\"datePublished\":\"2014-05-30T02:26:29+00:00\",\"dateModified\":\"2015-01-26T02:27:58+00:00\",\"author\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9\"},\"description\":\"Configurando o Broker em 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-v-broker\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.fernandosimon.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle e MAA \u2013 Artigo V \u2013 Broker\"}]},{\"@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 - Artigo V - Broker","description":"Configurando o Broker em 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-v-broker\/","og_locale":"en_US","og_type":"article","og_title":"Oracle e MAA - Artigo V - Broker","og_description":"Configurando o Broker em 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-v-broker\/","og_site_name":"Fernando Simon","article_published_time":"2014-05-30T02:26:29+00:00","article_modified_time":"2015-01-26T02:27:58+00:00","author":"Simon","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simon","Est. reading time":"39 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/#article","isPartOf":{"@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/"},"author":{"name":"Simon","@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9"},"headline":"Oracle e MAA \u2013 Artigo V \u2013 Broker","datePublished":"2014-05-30T02:26:29+00:00","dateModified":"2015-01-26T02:27:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/"},"wordCount":2697,"commentCount":3,"articleSection":["Banco de Dados","Broker","Data Guard","Database","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/","url":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/","name":"Oracle e MAA - Artigo V - Broker","isPartOf":{"@id":"https:\/\/www.fernandosimon.com\/blog\/#website"},"datePublished":"2014-05-30T02:26:29+00:00","dateModified":"2015-01-26T02:27:58+00:00","author":{"@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9"},"description":"Configurando o Broker em 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-v-broker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.fernandosimon.com\/blog\/oracle-e-maa-artigo-v-broker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.fernandosimon.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Oracle e MAA \u2013 Artigo V \u2013 Broker"}]},{"@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-2x","_links":{"self":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/posts\/157","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=157"}],"version-history":[{"count":0,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/posts\/157\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/media?parent=157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/categories?post=157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/tags?post=157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}