{"id":3474,"date":"2021-04-02T09:26:37","date_gmt":"2021-04-02T09:26:37","guid":{"rendered":"https:\/\/swiv.com.br\/protecting-replicated-tables-on-the-logical-standby-database\/"},"modified":"2026-05-27T20:02:33","modified_gmt":"2026-05-27T19:02:33","slug":"protecting-replicated-tables-on-the-logical-standby-database","status":"publish","type":"post","link":"https:\/\/swiv.com.br\/index.php\/2021\/04\/02\/protecting-replicated-tables-on-the-logical-standby-database\/","title":{"rendered":"Protecting replicated tables on the Logical Standby Database"},"content":{"rendered":"\n<p>Quando configuramos um Data Guard Logical Standby, a inten\u00e7\u00e3o prim\u00e1ria \u00e9 proteger as tabelas replicadas no ambiente standby para evitar que os usu\u00e1rios realizem altera\u00e7\u00f5es nelas, como DMLs e DDLs (uma vez que o banco de dados fica aberto neste cen\u00e1rio). Para isso, podemos utilizar no destino a propriedade &#8220;Guard&#8221;. Seu valor padr\u00e3o est\u00e1 como ALL, o que significa que o Oracle impedir\u00e1 que qualquer usu\u00e1rio (exceto o SYS) realize altera\u00e7\u00f5es em qualquer dado no logical standby database. Vejamos o exemplo abaixo que utiliza uma tabela usada pelo SQL Apply:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;oracle@fornix2 admin]$ sqlplus \/ as sysdba\n \nSQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 2 06:09:57 2021\nVersion 19.3.0.0.0\n \nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\n \n \nConnected to:\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\nVersion 19.3.0.0.0\n \nSQL&gt; SELECT GUARD_STATUS FROM V$DATABASE;\n \nGUARD_S\n-------\nALL\n \nSQL&gt; conn SOE\/soe\nConnected.\nSQL&gt; SHOW USER;\nUSER is &quot;SOE&quot;\nSQL&gt; UPDATE SOE.MERCURIO SET NOME=&#039;BRUNO&#039;;\nUPDATE SOE.MERCURIO SET NOME=&#039;BRUNO&#039;\n           *\nERROR at line 1:\nORA-16224: Database Guard is enabled\n<\/pre><\/div>\n\n\n<p>Vejamos que este valor n\u00e3o permite cria\u00e7\u00e3o de novos objetos no Standby. \u00c9 como se o banco estivesse em read-only, sem a necessidade de fazermos um shutdown no ambiente:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; CREATE TABLE SOE.MERCURIO2 ( ID NUMBER PRIMARY KEY, NOME VARCHAR2(30)) ;\nCREATE TABLE SOE.MERCURIO2 ( ID NUMBER PRIMARY KEY, NOME VARCHAR2(30))\n*\nERROR at line 1:\nORA-16224: Database Guard is enabled\n<\/pre><\/div>\n\n\n<p>Caso mudemos o valor dessa propriedade para STANDBY, o Oracle n\u00e3o permitir\u00e1 mudan\u00e7as de nenhum usu\u00e1rio (exceto SYS) nas tabelas que s\u00e3o mantidas pelo SQL Apply. Fa\u00e7amos uma simula\u00e7\u00e3o:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;oracle@fornix2 admin]$ sqlplus \/ as sysdba\n \nSQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 2 06:18:01 2021\nVersion 19.3.0.0.0\n \nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\n \n \nConnected to:\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\nVersion 19.3.0.0.0\n \nSQL&gt; ALTER DATABASE GUARD STANDBY;\n \nDatabase altered.\n \nSQL&gt; conn SOE\/soe\nConnected.\nSQL&gt; sho user;\nUSER is &quot;SOE&quot;\nSQL&gt; UPDATE SOE.MERCURIO SET NOME=&#039;BRUNO&#039;;\nUPDATE SOE.MERCURIO SET NOME=&#039;BRUNO&#039;\n           *\nERROR at line 1:\nORA-16224: Database Guard is enabled\n<\/pre><\/div>\n\n\n<p>Por\u00e9m, os outros objetos que n\u00e3o est\u00e3o sendo usados pelo SQL Apply, podem ser manipulados sem problemas:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; CREATE TABLE SOE.MERCURIO2 ( ID NUMBER PRIMARY KEY, NOME VARCHAR2(30)) ;\n \nTable created.\n \nSQL&gt; INSERT INTO SOE.MERCURIO2 VALUES (1, &#039;STRING A&#039;) ;\n \n1 row created.\n \nSQL&gt; commit;\n \nCommit complete.\n \nSQL&gt; DROP TABLE SOE.MERCURIO2;\n \nTable dropped.\n<\/pre><\/div>\n\n\n<p>Caso mudemos o valor da propriedade para NONE, o Oracle respeitar\u00e1 os privil\u00e9gios que os usu\u00e1rios possuem, ou seja, como se fosse o m\u00e9todo t\u00edpico que temos no primary:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;oracle@fornix2 admin]$ sqlplus \/ as sysdba\n \nSQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 2 06:21:41 2021\nVersion 19.3.0.0.0\n \nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\n \n \nConnected to:\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\nVersion 19.3.0.0.0\n \nSQL&gt; ALTER DATABASE GUARD NONE;\n \nDatabase altered.\n \nSQL&gt; CONN SOE\/soe\nConnected.\nSQL&gt; SHOW USER;\nUSER is &quot;SOE&quot;\nSQL&gt; INSERT INTO SOE.MERCURIO VALUES (4, &#039;STRING D&#039;) ;\n \n1 row created.\n \nSQL&gt; COMMIT;\n \nCommit complete.\n \nSQL&gt; DELETE FROM SOE.MERCURIO WHERE NOME=&#039;STRING D&#039;;\n \n1 row deleted.\n \nSQL&gt; COMMIT;\n \nCommit complete.\n<\/pre><\/div>\n\n\n<p>Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laborat\u00f3rio pessoal para fins de aprendizado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando configuramos um Data Guard Logical Standby, a inten\u00e7\u00e3o prim\u00e1ria \u00e9 proteger as tabelas replicadas no ambiente standby para evitar que os usu\u00e1rios realizem altera\u00e7\u00f5es nelas, como DMLs e DDLs (uma vez que o banco de dados fica aberto neste cen\u00e1rio). Para isso, podemos utilizar no destino a propriedade &#8220;Guard&#8221;. Seu valor padr\u00e3o est\u00e1 como [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-3474","post","type-post","status-publish","format-standard","hentry","category-high-availability"],"_links":{"self":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/3474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=3474"}],"version-history":[{"count":1,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/3474\/revisions"}],"predecessor-version":[{"id":9190,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/3474\/revisions\/9190"}],"wp:attachment":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=3474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=3474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=3474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}