{"id":5365,"date":"2021-06-14T08:39:20","date_gmt":"2021-06-14T08:39:20","guid":{"rendered":"https:\/\/swiv.com.br\/enabling-fast-application-notification-taf-configuration\/"},"modified":"2026-05-27T20:02:31","modified_gmt":"2026-05-27T19:02:31","slug":"enabling-fast-application-notification-taf-configuration","status":"publish","type":"post","link":"https:\/\/swiv.com.br\/index.php\/2021\/06\/14\/enabling-fast-application-notification-taf-configuration\/","title":{"rendered":"Enabling Fast Application Notification (TAF) Configuration"},"content":{"rendered":"\n<p>Neste artigo, vamos explorar uma situa\u00e7\u00e3o de Falha Parcial, onde a camada de Banco de Dados \u00e9 afetada (apenas o banco Primary), e a camada de Aplica\u00e7\u00e3o (Client) consegue realizar o redirecionamento das conex\u00f5es (inclusive as vigentes) para o banco Standby. Esse recurso \u00e9 poss\u00edvel gra\u00e7as a implementa\u00e7\u00e3o de alguns pr\u00e9-requisitos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Database Services<\/li><li>Data Broker com Fast-Start Failover (FSFO)<\/li><li>Oracle Restart (para inst\u00e2ncias single, que \u00e9 o nosso caso)<\/li><li>Configura\u00e7\u00e3o na camada client (que pode ser OCI, JDBC e ODP.Net)<\/li><\/ul>\n\n\n\n<p>Desse modo, quando o evento de falha \u00e9 identificado, o Relocate do Servi\u00e7o de Banco de Dados \u00e9 realizado, e o Broker envia uma notifica\u00e7\u00e3o FAN para a camada client, informando sobre a situa\u00e7\u00e3o. Como a camada client j\u00e1 estava com suas configura\u00e7\u00f5es realizadas previamente, ela consegue direcionar as conex\u00f5es para o novo banco Primary. Vamos iniciar o processo de prepara\u00e7\u00e3o:<\/p>\n\n\n\n<p>No ambiente Standby, vamos validar que o banco est\u00e1 up, e mudar a sua op\u00e7\u00e3o de startup (que est\u00e1 em mount) para OPEN. Assim, quando ligarmos o processo de Apply, o recurso de Real-Time Query estar\u00e1 habilitado:<\/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 ~]$ srvctl status database -d cortexdr\nDatabase is running.\n&#x5B;oracle@fornix2 ~]$ srvctl update database -db cortexdr -startoption OPEN\n<\/pre><\/div>\n\n\n<p>Ligando o processo de Redo 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 ~]$ dgmgrl sys\/oracle@CORTEXDR as sysdba\nDGMGRL for Linux: Release 19.0.0.0.0 - Production on Sat Jun 14 05:04:17 2021\nVersion 19.3.0.0.0\n \nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\n \nWelcome to DGMGRL, type &quot;help&quot; for information.\nConnected to &quot;cortexDR&quot;\nConnected as SYSDBA.\nDGMGRL&gt; EDIT DATABASE CORTEXDR SET STATE=APPLY-ON;\nSucceeded.\n<\/pre><\/div>\n\n\n<p>Iniciando o processo do Observer:<\/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 ~]$ dgmgrl sys\/oracle@CORTEXDR as sysdba\nDGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon Jun 14 05:13:22 2021\nVersion 19.3.0.0.0\n \nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\n \nWelcome to DGMGRL, type &quot;help&quot; for information.\nConnected to &quot;cortexDR&quot;\nConnected as SYSDBA.\nDGMGRL&gt; START OBSERVER FILE=&#039;\/home\/oracle\/CORTEXDR.dat&#039;;\n&#x5B;W000 2021-06-14T05:13:33.678-03:00] FSFO target standby is cortexdr\nObserver &#039;fornix2&#039; started\n&#x5B;W000 2021-06-14T05:13:33.832-03:00] Observer trace level is set to USER\n&#x5B;W000 2021-06-14T05:13:33.832-03:00] Try to connect to the primary.\n&#x5B;W000 2021-06-14T05:13:33.832-03:00] Try to connect to the primary cortex.\n&#x5B;W000 2021-06-14T05:13:33.898-03:00] The standby cortexdr is ready to be a FSFO target\n&#x5B;W000 2021-06-14T05:13:34.898-03:00] Connection to the primary restored!\n&#x5B;W000 2021-06-14T05:13:36.899-03:00] Disconnecting from database cortex.\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-39.png\" alt=\"\" class=\"wp-image-7575\"\/><\/figure>\n\n\n\n<p>Agora podemos checar a configura\u00e7\u00e3o do nosso Data Guard atrav\u00e9s do Broker:<\/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@fornix1 ~]$ dgmgrl sys\/oracle@CORTEX as sysdba\nDGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon Jun 14 05:15:35 2021\nVersion 19.3.0.0.0\n \nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\n \nWelcome to DGMGRL, type &quot;help&quot; for information.\nConnected to &quot;cortex&quot;\nConnected as SYSDBA.\nDGMGRL&gt; SHOW CONFIGURATION;\n \nConfiguration - cortex\n \n  Protection Mode: MaxPerformance\n  Members:\n  cortex   - Primary database\n    cortexdr - (*) Physical standby database\n \nFast-Start Failover: Enabled in Potential Data Loss Mode\n \nConfiguration Status:\nSUCCESS   (status updated 15 seconds ago)\n \nDGMGRL&gt; SHOW DATABASE CORTEX;\n \nDatabase - cortex\n \n  Role:               PRIMARY\n  Intended State:     TRANSPORT-ON\n  Instance(s):\n    cortex\n \nDatabase Status:\nSUCCESS\n \nDGMGRL&gt; SHOW DATABASE CORTEXDR;\n \nDatabase - cortexdr\n \n  Role:               PHYSICAL STANDBY\n  Intended State:     APPLY-ON\n  Transport Lag:      0 seconds (computed 1 second ago)\n  Apply Lag:          0 seconds (computed 1 second ago)\n  Average Apply Rate: 0 Byte\/s\n  Real Time Query:    ON\n  Instance(s):\n    CORTEXDR\n \nDatabase Status:\nSUCCESS\n<\/pre><\/div>\n\n\n<p>Criando um novo Database Service no banco Primary e o iniciando:<\/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@fornix1 ~]$ srvctl add service -db CORTEX -service BSS -role PRIMARY -notification TRUE -failovermethod BASIC -failoverdelay 3 -failoverretry 120 -failovertype SELECT\n&#x5B;oracle@fornix1 ~]$ srvctl start service -service BSS -db CORTEX\n&#x5B;oracle@fornix1 ~]$\n<\/pre><\/div>\n\n\n<p>Criando um Database Service tamb\u00e9m no ambiente Standby (n\u00e3o podemos esquecer de deixar o par\u00e2metro ROLE como 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 ~]$ srvctl add service -db CORTEXDR -service BSS -role PRIMARY -notification TRUE -failovermethod BASIC -failoverdelay 3 -failoverretry 120 -failovertype SELECT\n&#x5B;oracle@fornix2 ~]$\n<\/pre><\/div>\n\n\n<p>Verificando os servi\u00e7os criados:<\/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@fornix1 ~]$ sqlplus \/ as sysdba\n \nSQL*Plus: Release 19.0.0.0.0 - Production on Mon Jun 14 05:17: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; select name from dba_services ;\n \nNAME\n----------------------------------------------------------------\nSYS$BACKGROUND\nSYS$USERS\ncortex_CFG\nBSS\ncortexXDB\ncortex.localdomain\n \n6 rows selected.\n<\/pre><\/div>\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 ~]$ sqlplus \/ as sysdba\n \nSQL*Plus: Release 19.0.0.0.0 - Production on Mon Jun 14 05:18:09 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 name from dba_services ;\n \nNAME\n----------------------------------------------------------------\nSYS$BACKGROUND\nSYS$USERS\ncortex_CFG\nBSS\ncortexXDB\ncortex.localdomain\n \n6 rows selected.\n<\/pre><\/div>\n\n\n<p>Para simular a camada Client, editei o arquivo &#8220;tnsnames.ora&#8221; do Oracle Client instalado em meu notebook pessoal, para acessar os ambientes:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-40.png\" alt=\"\" class=\"wp-image-7577\"\/><\/figure>\n\n\n\n<p>O teste de tnsping est\u00e1 OK:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-41.png\" alt=\"\" class=\"wp-image-7578\"\/><\/figure>\n\n\n\n<p>Realizando a conex\u00e3o com a \u00faltima STRING adicionada (que usa os recursos de Failover):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-42.png\" alt=\"\" class=\"wp-image-7579\"\/><\/figure>\n\n\n\n<p>Para completar essa camada, vamos adicionar ao arquivo sqlnet.ora a linha abaixo, no Oracle Client do meu notebook:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-43.png\" alt=\"\" class=\"wp-image-7580\"\/><\/figure>\n\n\n\n<p>Agora vem a parte legal do teste. Vamos disparar o comando abaixo de consulta atrav\u00e9s do meu Oracle Client, que demora alguns minutos para concluir, devido plano cartesiano gerado. Enquanto a consulta \u00e9 realizada, vamos abortar a inst\u00e2ncia do banco Primary. Isso provocar\u00e1 em nossa sess\u00e3o Client uma experi\u00eancia de congelamento. Uma vez identificado a indisponibilidade do Primary, o FSFO vai abrir o at\u00e9 ent\u00e3o Standby como Primary, mandar a FAN notification para o Client, que redirecionar\u00e1 a sess\u00e3o ativa para o novo Primary, e ent\u00e3o continuar a execu\u00e7\u00e3o do select. Importante citarmos que execu\u00e7\u00f5es de DML n\u00e3o possuem esse comportamento.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nselect x.employee_id from hr.employees x, hr.employees y, hr.employees z;\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-44.png\" alt=\"\" class=\"wp-image-7581\"\/><\/figure>\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@fornix1 ~]$ sqlplus \/ as sysdba\n \nSQL*Plus: Release 19.0.0.0.0 - Production on Mon Jun 14 05:23:12 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; SHU ABORT;\nORACLE instance shut down.\n<\/pre><\/div>\n\n\n<p>Sess\u00e3o em Hang:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-45.png\" alt=\"\" class=\"wp-image-7582\"\/><\/figure>\n\n\n\n<p>FSFO identificando que o Primary est\u00e1 inacess\u00edvel e fazendo desse modo o Failover:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-46.png\" alt=\"\" class=\"wp-image-7583\"\/><\/figure>\n\n\n\n<p>Failover realizado:<\/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;S002 2021-06-14T05:24:09.628-03:00] Initiating Fast-start Failover.\nPerforming failover NOW, please wait...\nFailover succeeded, new primary is &quot;cortexdr&quot;\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-47.png\" alt=\"\" class=\"wp-image-7584\"\/><\/figure>\n\n\n\n<p>Nesse ponto, nossa sess\u00e3o contina o seu processamento de onde tinha parado, sem necessidade de interven\u00e7\u00e3o:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-48.png\" alt=\"\" class=\"wp-image-7585\"\/><\/figure>\n\n\n\n<p>Processamento realizado:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-49.png\" alt=\"\" class=\"wp-image-7586\"\/><\/figure>\n\n\n\n<p>E agora podemos constatar que a inst\u00e2ncia que estamos conectados \u00e9 o novo Primary:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-50.png\" alt=\"\" class=\"wp-image-7587\"\/><\/figure>\n\n\n\n<p>Vamos subir a antiga inst\u00e2ncia do 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@fornix1 ~]$ sqlplus \/ as sysdba\n \nSQL*Plus: Release 19.0.0.0.0 - Production on Mon Jun 14 05:29:21 2021\nVersion 19.3.0.0.0\n \nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\n \nConnected to an idle instance.\n \nSQL&gt; startup;\nORACLE instance started.\n \nTotal System Global Area 2583690520 bytes\nFixed Size                  8899864 bytes\nVariable Size             553648128 bytes\nDatabase Buffers         2013265920 bytes\nRedo Buffers                7876608 bytes\nDatabase mounted.\nDatabase opened.\n<\/pre><\/div>\n\n\n<p>Reinstate realizado automaticamente:<\/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;W000 2021-06-14T05:30:36.891-03:00] The standby cortex is ready to be a FSFO target\nReinstatement of database &quot;cortex&quot; succeeded\n2021-06-14T05:31:22.128-03:00\n&#x5B;W000 2021-06-14T05:31:22.949-03:00] Successfully reinstated database cortex.\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-51.png\" alt=\"\" class=\"wp-image-7588\"\/><\/figure>\n\n\n\n<p>Realizando um Switchover para o Primary original:<\/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@fornix1 ~]$ dgmgrl sys\/oracle@CORTEX as sysdba                                                              DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon Jun 14 05:35:05 2021\nVersion 19.3.0.0.0\n \nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\n \nWelcome to DGMGRL, type &quot;help&quot; for information.\nConnected to &quot;cortex&quot;\nConnected as SYSDBA.\nDGMGRL&gt; SHOW CONFIGURATION;\n \nConfiguration - cortex\n \n  Protection Mode: MaxPerformance\n  Members:\n  cortexdr - Primary database\n    cortex   - (*) Physical standby database\n \nFast-Start Failover: Enabled in Potential Data Loss Mode\n \nConfiguration Status:\nSUCCESS   (status updated 47 seconds ago)\n \nDGMGRL&gt; SWITCHOVER TO CORTEX;\nPerforming switchover NOW, please wait...\nNew primary database &quot;cortex&quot; is opening...\nOracle Clusterware is restarting database &quot;cortexdr&quot; ...\nConnected to an idle instance.\nConnected to an idle instance.\nConnected to an idle instance.\nConnected to an idle instance.\nConnected to an idle instance.\nConnected to &quot;cortexDR&quot;\nConnected to &quot;cortexDR&quot;\nSwitchover succeeded, new primary is &quot;cortex&quot;\nDGMGRL&gt; SHOW CONFIGURATION;\n \nConfiguration - cortex\n \n  Protection Mode: MaxPerformance\n  Members:\n  cortex   - Primary database\n    cortexdr - (*) Physical standby database\n \nFast-Start Failover: Enabled in Potential Data Loss Mode\n \nConfiguration Status:\nSUCCESS   (status updated 43 seconds ago)\n \nDGMGRL&gt;\n<\/pre><\/div>\n\n\n<p>Observer:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-52.png\" alt=\"\" class=\"wp-image-7589\"\/><\/figure>\n\n\n\n<p>\u00c9 poss\u00edvel ver que nossa sess\u00e3o agora alcan\u00e7a a inst\u00e2ncia do Primary original, de forma totalmente transparente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/swiv.com.br\/wp-content\/uploads\/2022\/07\/image-53.png\" alt=\"\" class=\"wp-image-7590\"\/><\/figure>\n\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>Neste artigo, vamos explorar uma situa\u00e7\u00e3o de Falha Parcial, onde a camada de Banco de Dados \u00e9 afetada (apenas o banco Primary), e a camada de Aplica\u00e7\u00e3o (Client) consegue realizar o redirecionamento das conex\u00f5es (inclusive as vigentes) para o banco Standby. Esse recurso \u00e9 poss\u00edvel gra\u00e7as a implementa\u00e7\u00e3o de alguns pr\u00e9-requisitos: Database Services Data Broker [&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-5365","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\/5365","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=5365"}],"version-history":[{"count":1,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/5365\/revisions"}],"predecessor-version":[{"id":9104,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/5365\/revisions\/9104"}],"wp:attachment":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=5365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=5365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=5365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}