Oracle acessar dados de uma tabela de outra base

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Olá,

Estou precisando acessar dados de uma tabela que esta em uma outra base de dados Oracle. como posso fazer?

Ex.: tenho a tab. A que esta no banco de dados X e preciso copiar os dados da tabela B que esta no banco de dados Y.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

via dblink
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Uma dúvida. No TNSNAMES.ORA, coloco no SID o banco que eu conectar?

Selecionar tudo

Exemplo =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.72.0.171)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = Nome_do_BD_Origem???)
 )

  )
O DBlink consegui criar:

Selecionar tudo

CREATE DATABASE LINK DBExemplo 
CONNECT TO bd1 IDENTIFIED BY db1
USING 'Exemplo'
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

TNS

Selecionar tudo

Exemplo = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.72.0.171)(PORT = 1521)) 
) 
(CONNECT_DATA = 
(SID = Nome_do_BD_Origem???) 
) 

) 

quando executo o comando acima, aparece a seguinte mensagem:

Selecionar tudo

ORA-00928: palavra-chave SELECT não encontrada
00928. 00000 -  "missing SELECT keyword"
marcus.kobel
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Qui, 12 Mai 2011 4:54 pm
Localização: Porto Alegre - RS

É pra ser isso mesmo.
Olha na internet sobre como criar DB links ou usa algum wizard do TOAD ou do SQL Developer.

Abraço!
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

SID é o nome da instancia brother..

depois do dblink criado

você faz o select normal so que vai colocar na tabela o arroba e o nome do dblink que você criou ..

Selecionar tudo

select * from sua_tabela_no_outro_banco@DBExemplo
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Olá,

Eu consegui criar o DBlink.
Mas o select não funciona, dá erro.

Meu procedimento foi o seguinte:
1º No banco que eu quero acessar o outro banco, fiz o seguinte:

Selecionar tudo

   CREATE DATABASE LINK exemplo 
   CONNECT TO consulta IDENTIFIED BY teste
   USING 'banco'
-- O nome do banco é banco mesmo e o usuário é consulta e senha teste.

Criou o DBlink normalmente.

2º Tentei fazer um select:

Selecionar tudo

   select * from cidade@exemplo;

O erro é o seguinte:

Selecionar tudo

RA-12154: TNS:não foi possível resolver o identificador de conexão especificado
12154. 00000 -  "TNS:could not resolve the connect identifier specified"
*Cause:    A connection to a database or other service was requested using
           a connect identifier, and the connect identifier specified could not
           be resolved into a connect descriptor using one of the naming methods
           configured. For example, if the type of connect identifier used was a
           net service name then the net service name could not be found in a
           naming method repository, or the repository could not be
           located or reached.
*Action:   
           - If you are using local naming (TNSNAMES.ORA file):
           - Make sure that "TNSNAMES" is listed as one of the values of the
           NAMES.DIRECTORY_PATH parameter in the Oracle Net profile
           (SQLNET.ORA)
           - Verify that a TNSNAMES.ORA file exists and is in the proper
           directory and is accessible.
           - Check that the net service name used as the connect identifier
           exists in the TNSNAMES.ORA file.
           - Make sure there are no syntax errors anywhere in the TNSNAMES.ORA
           file.  Look for unmatched parentheses or stray characters. Errors
           in a TNSNAMES.ORA file may make it unusable.
           - If you are using directory naming:
           - Verify that "LDAP" is listed as one of the values of the
           NAMES.DIRETORY_PATH parameter in the Oracle Net profile
           (SQLNET.ORA).
           - Verify that the LDAP directory server is up and that it is
           accessible.
           - Verify that the net service name or database name used as the
           connect identifier is configured in the directory.
           - Verify that the default context being used is correct by
           specifying a fully qualified net service name or a full LDAP DN
           as the connect identifier
           - If you are using easy connect naming:
           - Verify that "EZCONNECT" is listed as one of the values of the
           NAMES.DIRETORY_PATH parameter in the Oracle Net profile
           (SQLNET.ORA).
           - Make sure the host, port and service name specified
           are correct.
           - Try enclosing the connect identifier in quote marks.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

ta quase la meu camarada.. go ahead and don´t give up

você entendeu que o dblink é uma conexao com outro banco e este banco que vai ser acessado deve ter uma conexao mapeada no seu tnsnames ??
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Isso em entendi.

Mas como eu posso descobrir se o banco já esta mapeado no servidor?
Como posso visualizar o arquivo TNSNAMES.ORA ? Já que ele esta no servidor?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

você tem q achar ele la no servidor..

você está criando esse dblink porque não tem um dba?

e no seu tnsnames, do seu client.. ele ta la?

você consegue acessar esse banco que esta tentando criar o dblink, por alguma ide (pl sql developer da vida)?
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Acesso aos dois bancos pelo SQL Developer
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

rsalbano,

Você está quase lá. Vamos fazer de conta que o servidor remoto/destino (no qual você precisa consultar
a tabela por meio de um DBLINK criado em outro banco) apresenta as seguintes configurações abaixo (exemplo):

Selecionar tudo

SID                            = DBDESTINO
IP                             = 10.75.0.200
PORT                           = 1529
SCHEMA                         = SCOTT
PASSWORD                       = TIGER
NOME_TABELA_QUE_DESEJA_ACESSAR = EMP
De posse destas informações, siga os passos abaixo para criar seu DBLINK:

1) No servidor de banco (DBORIGEM), a partir do qual você pretende acessar a tabela remota, edite o tnsnames.ora
dele e configure o nome de serviço para acessar o banco remoto (DBDESTINO):

Selecionar tudo

 
banco_destino.world = 
(description = 
(address_list = 
(address = (protocol = tcp)(host = 10.75.0.200)(port = 1528))) 
(connect_data = 
(sid = DBDESTINO)) 

obs: o ".world" é opcional, dependendo de como estiver configurado seu SQLNET.ORA
2) No servidor de banco (DBORIGEM), faça um teste para verificar se consegue acessar o banco remoto (DBDESTINO). Use:

Selecionar tudo

$>   sqlplus scott/tiger@banco_destino.world
SQL> select count(*) from emp;

obs: o ".WORLD" é opcional, dependendo de como estiver configurado seu SQLNET.ORA
3) O teste do passo 2 é MUITO importante, pois você assegura que consegue se conectar no servidor remoto a partir do servidor de
origem e também que não existe nenhum problema de usuário, senha ou permissão de acesso à tabela. Se você tiver sucesso no
passo 2 e conseguir acessar a tabela, ótimo. Você já resolveu metade do problema. Se o seu teste não teve sucesso, revise
o TNSNAMES.ORA ou procure pesquisar mais sobre a eventual mensagem de erro que ocorreu;
4) No servidor de banco DBORIGEM) crie o seu DBLINK, apontando para o servidor onde se encontra DBDESTINO.
Ele pode ser um DBLINK público ou privado. Se optar pelo privado, crie ele no schema a partir do qual deseja acessar
o banco de dados. Se for público, crie ele através do usuário SYSTEM, por exemplo:

Selecionar tudo

create database link DB_SERVIDOR_DESTINO
connect to SCOTT identified by TIGER
using 'BANCO_DESTINO.WORLD' 
OU
create PUBLIC database link DB_SERVIDOR_DESTINO
connect to SCOTT identified by TIGER
using 'BANCO_DESTINO.WORLD' 

obs: o ".WORLD" é opcional, dependendo de como estiver configurado seu SQLNET.ORA
5) Pronto, agora basta você fazer um teste para verificar se está tudo OK. No servidor de banco DBORIGEM)
faça a seguinte querie:

Selecionar tudo

SQL> select * from EMP@DB_SERVIDOR_DESTINO;
     << resultados>>
SQL> commit; <- só pra não deixar pendente uma sessão no servidor de destino

6) Se neste ponto não deu certo, veja se você está executando o comando no schema certo (caso o DBLINK seja privado)

Abraços e boa sorte,

Sergio
rsalbano
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 76
Registrado em: Seg, 11 Jul 2011 9:55 am
Localização: Curitiba

Funcionou.

O erro estava no nome do banco no tnsnames.ora


Valeu a todos pela ajuda.
Francisco Fábio
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 24 Mar 2022 3:17 pm
Localização: Goias

Olá! Colega estou tentando criar um link para acessar banco Oracle no PostgreSQL.

Quando executo o seguinte scripts no Postgres

CREATE DATABASE LINK bd_geop
CONNECT TO geop IDENTIFIED BY lf2012
USING 'GEOP';

Recebo o erro:
ERROR: syntax error at or near "TO"
LINE 2: CONNECT TO geop IDENTIFIED BY lf20oh

Preciso fazer algum comando no Postgresql para aceitar esse comando?
Francisco Fábio
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 24 Mar 2022 3:17 pm
Localização: Goias

Olá, Estou tentando acessar uma tabela do banco Oracle a partir do SGBD do PostgreSQL. Estou tentando fazer essa conexão através de Db_link, quando executo recebo a mensagem:

ERROR: could not establish connection DETAIL: could not connect to server: Connection timed out (0x0000274C/10060) Is the server running on host "10.138.100.109 and accepting TCP/IP connections on port 5432?

Como faço a conexão entre esses dois bancos?
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes