Este post demonstra como criar um DB Link no Autonomous Database usando a package DBMS_CLOUD_ADMIN, usando um exemplo de conexão para outro banco de dados que está na mesma VCN que o Autonomous.

Esse tipo de conexão é possível quando o Autonomous está configurado como Private Endpoint, sendo essa uma configuração ideal para manter a conectividade do ADB com os outros servidores na mesma VCN, ou até mesmo com o OnPremise, através de uma VPN ou conexão FastConnect.

Quando configurado desta forma, a console apresenta o IP e o hostname privado do Autonomous:

Eu explico um pouco mais sobre a configuração de Private Endpoint no post:

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

Regra de Saída no NSG

Antes de criar o DBLINK no Autonomous, precisamos garantir que existe uma regra de “Egress” na NSG (Network Security Group) vinculada ao Autonomous. Esta regra é necessária para permitir que o Autonomous se conecte com outro servidor na porta do Listener (exemplo, 1521).

Neste exemplo, criei uma regra mais abrangente, permitindo que o Autonomous se conecte na porta 1521 de qualquer servidor.

Criação do DBLINK com DBMS_CLOUD_ADMIN

O Autonomous Database não permite a criação de DBLINK diretamente com o comando “CREATE DATABASE LINK”, como estamos acostumados. Para realizar essa tarefa, precisamos usar a package DBMS_CLOUD_ADMIN.

Informações que serão usadas na criação do DBLINK:

Nome do servidor de destino:ocisrv01.emdb.emcc.oraclevcn.com
Porta do Listener:1521
Service Name do BD de destino:orclpdb
Nome do Usuário:MAICON
Senha do Usuário:dibiei

1) Criando uma CREDENTIAL com a package DBMS_CLOUD para armazenar a senha do usuário do DBLINK:

SQL> BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'MAICON_DBLINK_CRED',
    username => 'MAICON',
    password => 'dibiei'
  );
END;
/  

PL/SQL procedure successfully completed.

2) Criando o DBLINK com a package DBMS_CLOUD_ADMIN.

Note que passamos o nome da CREDENTIAL criada anteriormente, ao invés de passar o nome e a senha do usuário explicitamente.

SQL> BEGIN
     DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
          db_link_name => 'LK_ADB_TO_IAAS',
          hostname => 'ocisrv01.emdb.emcc.oraclevcn.com',
          port => '1521',
          service_name => 'orclpdb',
          ssl_server_cert_dn => NULL,
          credential_name => 'MAICON_DBLINK_CRED',
          directory_name => NULL,
          private_target => TRUE);
END;
/  

PL/SQL procedure successfully completed.

4) Testando a conexão do DBLINK:

SQL> select * from dual@LK_ADB_TO_IAAS;

D
-
X

Atualizando a Senha do Usuário do DBLINK

Caso a senha do usuário tenha sido alterada no banco de destino, usamos esse comando para atualizar a CREDENTIAL dele no Autonomous:

BEGIN
 DBMS_CLOUD.UPDATE_CREDENTIAL(
   credential_name => 'MAICON_DBLINK_CRED',
   attribute => 'password',
   value => 'novaSenha'
  );
END;
/

Dropando DBLINK

Para dropar o DBLINK, também usamos a package DBMS_CLOUD_ADMIN:

EXEC DBMS_CLOUD_ADMIN.DROP_DATABASE_LINK(db_Link_name => 'LK_ADB_TO_IAAS');

Senão for recriar o DBLINK, podemos dropar a CREDENTIAL:

EXEC DBMS_CLOUD.DROP_CREDENTIAL(credential_name => 'MAICON_DBLINK_CRED');

Erros comuns

No Autonomous é mandatório usar o hostname ao invés do IP do servidor quando criamos um DBLINK. A criação do DBLINK com a DBMS_CLOUD_ADMIN não apresentará erro, mas a tentativa de usar o DBLINK sim:

ORA-28864: SSL connection closed gracefully

Se o hostname não puder ser resolvido ou redirecionado pelo DNS Resolver da VCN do Autonomous, você recebe esse erro ao tentar usar o DBLINK:

ORA-12545: Connect failed because target host or object does not exist

Nos DBLINKs que conectam em um banco sem usar wallet, o parâmetro “directory_name” precisa ser passado como NULL, senão a tentativa de usar o DBLINK retorna o erro:

ORA-28759: failure to open file

Se receber o seguinte erro e tiver confirmado que o banco de destino está ativo, revise toda a parte de NSG, Security List e qualquer Firewall envolvido:

ORA-12170: TNS:Connect timeout occurred

Leave a Reply

Discover more from Blog do Dibiei

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

Continue reading