DBLink

Em um sistema de gerenciamento de banco de dados (DBMS), como Oracle Database ou PostgreSQL , um DBLink ou link de banco de dados é um objeto de um banco de dados que permite realizar consultas em outro banco de dados , que 'está fisicamente na mesma máquina ou controlo remoto.

Informações gerais sobre links entre bancos de dados

Um DBLink é um objeto de esquema que faz com que o Oracle se conecte a um banco de dados remoto para acessá-lo. É um ponteiro local que permite ao usuário acessar objetos em um banco de dados remoto.

Existem três tipos de DBLinks:

Identificação dos DBLinks do banco de dados

A sintaxe para visualizar DBLinks já existentes em um banco de dados é:

select * from dba_db_links; select owner, db_link, username from dba_db_links;

Uma visão interna do Oracle, acessível apenas ao usuário SYS, permite que a data de criação e a senha sejam visualizadas de forma criptografada.

select NAME, CTIME, HOST, PASSWORD from sys.link$;

Criação de um DBLink

A sintaxe SQL para criar um DBLink é assim:

CREATE [PUBLIC] DATABASE LINK <nom de lien de base de données> [CONNECT TO <utilisateur oracle> IDENTIFIED BY <mot de passe utilisateur oracle distant>] USING '<chaîne de base de données>' ;

Ou :

Restrições no nome do banco de dados

O nome do link criado pode não ser gratuito: em um sistema de banco de dados distribuído, cada banco de dados deve ter um nome único globalmente, que o identifica no sistema. O nome do link deve ser o nome global do banco de dados remoto.

Neste caso, no banco de dados remoto, o parâmetro de inicialização dinâmica global_names , do tipo booleano, deve ser definido como 'true' (seu valor padrão é 'false').

O nome global do banco de dados remoto pode ser encontrado na visualização do dicionário de dados GLOBAL_NAME , que normalmente contém apenas uma linha e uma coluna com o mesmo nome. Este nome global inclui dois componentes: o nome do banco de dados e o nome do domínio , determinados respectivamente pelos parâmetros:

Nota: o parâmetro DB_DOMAIN é usado apenas na criação do banco de dados, com o parâmetro DB_NAME. A partir deste momento, o nome global do banco de dados é armazenado no dicionário de dados. Após a criação, a alteração do parâmetro de inicialização DB_DOMAIN não tem efeito no nome do banco de dados global ou na resolução dos nomes dblink. É por isso que, para alterar o domínio em um nome de banco de dados global, você deve alterar o próprio nome global, com o comando:

ALTER DATABASE RENAME GLOBAL_NAME TO <database>.<domain> ;

Após tal mudança, é desejável modificar o parâmetro DB_DOMAIN para que ele reflita a mudança do nome de domínio antes da próxima reinicialização do banco de dados.

Para determinar se a nomenclatura global é forçada em um banco de dados, você pode examinar o arquivo de parâmetro de inicialização do banco de dados ou iniciar o comando sql 'show parameter <name_of_parameter>' ou consultar o parâmetro v $ de visualização dinâmica conforme mostrado na seguinte consulta:

select name, value from v$parameter where name='global_names' ;

Para visualizar o nome de um banco de dados global, usamos a visualização de dicionário de dados GLOBAL_NAME com a seguinte consulta:

select * from GLOBAL_NAME ;

Exemplo

Ter uma base local chamada locale_db e desejar ser capaz de se conectar, a partir desta base local, à base remota distante_db . A definição do nome do serviço (alias) do banco de dados remoto no arquivo tnsnames.ora da máquina local é a seguinte:

db2= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=adresse distante)(PORT=port distant) ) ) (CONNECT_DATA= (SID=distante_db) ) )

Análises no banco de dados remoto dando:

db_name global_names global_name
nomdb verdadeiro em outro lugar.mundo

Para criar um DBLink neste contexto, o usuário pode usar uma das duas sintaxes a seguir:

CREATE [PUBLIC] DATABASE LINK nomdb CONNECT TO scott IDENTIFIED BY tiger USING 'db2' ;

Ou

CREATE [PUBLIC] DATABASE LINK nomdb CONNECT TO scott IDENTIFIED BY tiger USING 'db2.world' ;

Use após a criação

Para usar um link de banco de dados, basta especificar o link usado, precedido do símbolo ' @ ', antes do identificador do objeto remoto.

Exemplo

Por exemplo, desejando obter a lista de códigos de cliente (CLIENT_CODE do esquema MYSCHEMA) da tabela CUSTOMERS localizada em outra instância (acessível pelo link denominado MY_DB_LINK ):

select CLIENT_CODE from MYSCHEMA.CLIENTS@MY_DB_LINK;

Link externo