Introdução

Em se tratando-do de Oracle Database, o uso de DBLINKs para conectar diferentes bancos de dados é muito comum, e se você estiver trabalhando em um ambiente que tem Autonomous Database, eventualmente precisará criar um DBLINK de um banco de dados não-Autonomous para Autonomous, ou vice versa.

Este post demonstra como criar um DBLINK de um banco não-Autonomous para um Autonomous Database na OCI. Se você está procurando por um exemplo na direção inversa, pode usar o post “Criando DBLINK no Autonomous Database Configurado com Private Endpoint” que demonstra o procedimento.

ATENÇÃO:
Para a criação de um um DBLINK para Autonomous Database, o banco de dados em questão deve estar na versão 19c ou superior.

TLS vs mTLS (Mutual-TLS)

Antes de começar, é importante observar que o Autonomous Database pode ou não precisar de uma Wallet para realizar autenticação dos usuários, isso vai depender se a opção “mTLS” está ativada no Autonomous em questão.

Para saber se a autenticação com Mutual-TLS (mTLS) é requerida, procure pela parte de “Network” na página do ADB:

Se a opção acima estiver como “Required”, a conexão com este ADB precisa da Wallet.

Caso a opção esteja como “Not required”, então não é necessário usar Wallet para conectar neste ADB, e você pode criar um DBLINK normalmente como sempre criou para outros bancos de dados Onpremise.

Se você ainda não conhece as diferentes opções de configuração de rede disponíveis para o Autonomous Database, eu tenho um post de 2021 falando sobre isso:

Opções de Controle de Acesso do Autonomous Database na Oracle Cloud Infrastructure (OCI)

1) Exemplo com Mutual-TLS (mTLS)

Este tópico demonstra como criar um DBLINK usando a Wallet do Autonomous para se conectar com mTLS habilitado.

1.1) Na console OCI, faça o download da wallet de conexão do Autonomous Database de destino:

1.2) Copie o arquivo .zip para o servidor de banco de dados onde será criado o DBLINK:

1.3) Crie um diretório no filesystem do servidor de banco onde será criado o DBLINK.

DICA: Crie um diretório dedicado para cada Autonomous Database

Se for um Oracle RAC, recomendo que utilize um diretório dentro de um ACFS, senão você precisará criar o diretório e copiar a wallet para todos os nodes do cluster.

mkdir -p /acfs01/adblk_wallet

1.4) Descompacte a wallet dentro do diretório recém criado:

1.5) OPCIONAL: Apenas para a criação do usuário que será usado no DBLINK, caso ainda não tenha feito, conecte-se no Autonomous Database usando o sqlplus deste servidor mesmo:

export TNS_ADMIN=/acfs01/adblk_wallet
vi $TNS_ADMIN/sqlnet.ora

1.5.1) Modifique o valor de DIRECTORY apontando para o diretório correto onde descompactou a wallet.

Exemplo:

1.5.2) Verifique os alias contidos no arquivo tnsnames.ora:

1.5.3) Conecte-se no Autonomous usando o serviço “high” e crie o novo usuário conforme requisito do novo DBLINK.

Para esta demonstração, estou criando um usuário “USR_CONSULTA” com permissão de “create session” e “select any table”:

1.6) Conecte-se no banco de origem para criar o DBLINK e use o comando com a sintaxe abaixo:

CREATE DATABASE LINK <DBLINK_NAME>
   CONNECT TO <USERNAME> IDENTIFIED BY "<Password>"
   USING
'(description=(retry_count=20)(retry_delay=3)
     (address=(protocol=tcps)(port=1522)(host=<hostname_from_tnsnames.ora>))     
     (connect_data=(service_name=<servicename_from_tnsnames.ora>))     
     (security=(my_wallet_directory=<wallet_location>)
        (ssl_server_dn_match=true)))';

Considerando os valores abaixo como exemplo:

  • host=adb.sa-vinhedo-1.oraclecloud.com
  • service_name=g25449697b7dbcd_adblk_high.adb.oraclecloud.com
  • my_wallet_directory=/acfs01/adblk_wallet

1.6.1) O comando para criar o DBLINK “ADB_TEST” com usuário “USR_CONSULTA” ficou assim:

1.6.2) Testando o DBLINK:

2) Sem mTLS

Este tópico demonstra como criar um DBLINK sem o uso de Wallet do Autonomous para se conectar usando apenas TLS.

Para um Autonomous que não usa mTLS, a criação de um DBLINK é muito mais simples e não muda muito daquilo que seria com outro banco de dados Oracle. Pelo fato de não precisar usar Wallet, podemos simplesmente editar o arquivo tnsnames.ora do servidor de banco de origem, adicionar uma nova entrada que aponta para o Autonomous de destino, e criar o DBLINK com a sintaxe padrão “USING ‘<ALIAS>'”.

Demonstração

2.1) Na console OCI, clique no botão “Database Connections” e copie a string de conexão desejada.

Neste caso, pode selecionar a opção TLS ou mTLS, a única coisa que vai mudar na prática é o número da porta que pode ser 1521 ou 1522, respectivamente.

2.2) Edite o arquivo tnsnames.ora do servidor de origem e adicione uma nova entrada com a string copiada acima:

vi $ORACLE_HOME/network/admin/tnsnames.ora

Exemplo:

2.3) Conectando-se no Autonomous com o usuário “admin” para criar o usuário do DBLINK:

2.4) Conectando-se no banco de origem e criando o DBLINK com a sintaxe padrão:

CREATE DATABASE LINK <DBLINK NAME> CONNECT TO <USERNAME> IDENTIFIED BY "<PASSWORD>" USING '<TNSNAMES ALIAS>';

Exemplo:

3) Erros Comuns

3.1) Não crie o DBLINK usando o IP, sempre use o hostname original que aparece no arquivo tnsnames.ora, conforme ele foi baixado da OCI.

Se você criar um DBLINK fazendo referência ao IP, receberá o erro abaixo ao tentar usá-lo:

ORA-29002: SSL transport detected invalid or obsolete server certificate.

Exemplo:

3.2) Certifique-se de que o parâmetro “global_names” tenha o valor FALSE para criar DBLINK com nomes diferentes do que o DBNAME do Autonomous de destino.

Caso contrário, você deve receber o erro abaixo ao tentar utilizar o DBLINK:

ORA-02085: database link ADB_TEST.DIBIEI.COM connects to G25449697B7DBCD_ADBLK

Mesmo que você crie um DBLINK com o nome igual ao DBNAME do Autonomous, você ainda pode ter problemas devido ao parâmetro “db_domain” do banco de origem.

Exemplo:

Diante deste cenário, a alteração mais simples e de menor impacto deve ser a do “global_names”:

Conclusão

Este post demonstrou como identificar o tipo de conexão requerida por um Autonomous Database na OCI e os exemplos para criação de DBLINK de um banco de dados Oracle não-Autonomous para um Autonomous, abordando as duas opções que envolvem o uso de TLS simples, assim como o uso do protocolo Mutual-TLS.

Leave a Reply

Discover more from Blog do Dibiei

Subscribe now to keep reading and get access to the full archive.

Continue reading