- Este tópico contém 5 respostas, 2 vozes e foi atualizado pela última vez 15 anos, 1 mês atrás por burga.
-
AutorPosts
-
4 de dezembro de 2009 às 12:36 am #91338apovoaParticipante
Tenho dois schemas, prod e desenv, ambos tem uma procedure com o mesmo nome ‘prc1’, esta procedure acessa uma tabela em outro banco via dblink.
Criei tambem dois dblinks com o mesmo nome dblnk1, em ambos schemas.
Quando compilo prod.prc1, o objeto desenv.prc1 fica inválido, e vice-versa.
Vale lembrar que estes dblinks, apesar de terem o mesmo nome, apontam para bases diferentes, porém o nome do usuário usado para se conectar em ambas as bases é o mesmo.
-----------------
SCHEMA PROD
-----------------
CREATE DATABASE LINK PROD.DBL1
CONNECT TO USUARIO
IDENTIFIED BYUSING 'EBOP'; CREATE OR REPLACE PROCEDURE PROD.PRC1 IS
I INT;
BEGIN
SELECT COUNT(1) INTO I FROM BOP_CABELOS@EBOP;
END;---------------------
SCHEMA DESENV
---------------------
CREATE DATABASE LINK DESENV.DBL1
CONNECT TO USUARIO
IDENTIFIED BYUSING 'DEVEL'; CREATE OR REPLACE PROCEDURE DESENV.PRC1 IS
I INT;
BEGIN
SELECT COUNT(1) INTO I FROM BOP_CABELOS@EBOP;
END;-----------------
SELECT *
FROM DBA_DEPENDENCIES
WHERE NAME = 'TESTE'
AND TYPE = 'PROCEDURE'
ORDER BY 1, 4OWNER NAME TYPE REFERENCED_OWNER REFERENCED_NAME REFERENCED_TYPE REFERENCED_LINK_NAME DEPENDENCY_TYPE
------ ----- --------- ---------------- ---------------------------- --------------- -------------------- ---------------
DESENV TESTE PROCEDURE EBOP BOP_CABELOS TABLE EBOP HARD
DESENV TESTE PROCEDURE I2 BOP_CABELOS NON-EXISTENT EBOP HARD
DESENV TESTE PROCEDURE PUBLIC BOP_CABELOS SYNONYM EBOP HARD
DESENV TESTE PROCEDURE SYS SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE HARD
DESENV TESTE PROCEDURE SYS STANDARD PACKAGE HARD
SISPES TESTE PROCEDURE EBOP BOP_CABELOS TABLE EBOP HARD
SISPES TESTE PROCEDURE I2 BOP_CABELOS NON-EXISTENT EBOP HARD
SISPES TESTE PROCEDURE PUBLIC BOP_CABELOS SYNONYM EBOP HARD
SISPES TESTE PROCEDURE SYS SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE HARD
SISPES TESTE PROCEDURE SYS STANDARD PACKAGE HARD4 de dezembro de 2009 às 4:28 am #91340burgaParticipanteEsta certo isso?
SELECT COUNT(1) INTO I FROM BOP_CABELOS@EBOP;
Não seria @DBL1 ????? 😀
4 de dezembro de 2009 às 3:14 pm #91349apovoaParticipante[quote=”burga”:2rksy2vb]Esta certo isso?
SELECT COUNT(1) INTO I FROM BOP_CABELOS@EBOP;
Não seria @DBL1 ????? 😀 [/quote]
Burga eu copiei do ambiente real e me esqueci de trocar os nomes, abaixo o código corrigido.
EBOP é o nome do usuário proprietário da tabela BOP_CABELOS, o nome é o mesmo em ambos os ambientes ‘EBOP’ e ‘DEVEL’. Vale lembrar que estes ambientes são em servidores distintos.
Antes que alguém sugira, ainda não tenho permissão para criar uma outra instância, que seria a de desenvolvimento, pois sei que isto seria o correto.
Criar outro schema no próprio banco de produção foi a única maneira que encontrei para não parar o desenvolvimento até que me liberem privilégios de SYSDBA.SCHEMA PROD
CREATE DATABASE LINK PROD.DBL1
CONNECT TO USUARIO
IDENTIFIED BY
USING 'EBOP';CREATE OR REPLACE PROCEDURE PROD.PRC1 IS
I INT;
BEGIN
SELECT COUNT(1) INTO I FROM BOP_CABELOS@DBL1;
END;
SCHEMA DESENV
CREATE DATABASE LINK DESENV.DBL1
CONNECT TO USUARIO
IDENTIFIED BY
USING 'DEVEL';CREATE OR REPLACE PROCEDURE DESENV.PRC1 IS
I INT;
BEGIN
SELECT COUNT(1) INTO I FROM BOP_CABELOS@DBL1;
END;
SELECT *
FROM DBA_DEPENDENCIES
WHERE NAME = 'TESTE'
AND TYPE = 'PROCEDURE'
ORDER BY 1, 4OWNER NAME TYPE REFERENCED_OWNER REFERENCED_NAME REFERENCED_TYPE REFERENCED_LINK_NAME DEPENDENCY_TYPE
DESENV TESTE PROCEDURE EBOP BOP_CABELOS TABLE DBL1 HARD
DESENV TESTE PROCEDURE USUARIO BOP_CABELOS NON-EXISTENT DBL1 HARD
DESENV TESTE PROCEDURE PUBLIC BOP_CABELOS SYNONYM DBL1 HARD
DESENV TESTE PROCEDURE SYS SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE HARD
DESENV TESTE PROCEDURE SYS STANDARD PACKAGE HARD
PROD TESTE PROCEDURE EBOP BOP_CABELOS TABLE DBL1 HARD
PROD TESTE PROCEDURE USUARIO BOP_CABELOS NON-EXISTENT DBL1 HARD
PROD TESTE PROCEDURE PUBLIC BOP_CABELOS SYNONYM DBL1 HARD
PROD TESTE PROCEDURE SYS SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE HARD
PROD TESTE PROCEDURE SYS STANDARD PACKAGE HARD4 de dezembro de 2009 às 5:35 pm #91355burgaParticipanteO nome dos dblinks são PROD.DBL1 e DESENV.DBL1
você deve usar a string inteira (Ex: @PROD.DBL1 ou @DESENV.DBL1)
Restriction on Creating Database Links
You cannot create a database link in another user’s schema, and you cannot qualify dblink with the name of a schema. Periods are permitted in names of database links, so Oracle Database interprets the entire name, such as ralph.linktosales, as the name of a database link in your schema rather than as a database link named linktosales in the schema ralph.)
fonte:
http://download.oracle.com/docs/cd/B12037_01/server.101/b10759/statements_5005.htm14 de dezembro de 2009 às 6:04 pm #91570apovoaParticipante[quote=”burga”:1d35c9iw]O nome dos dblinks são PROD.DBL1 e DESENV.DBL1
você deve usar a string inteira (Ex: @PROD.DBL1 ou @DESENV.DBL1)
Restriction on Creating Database Links
You cannot create a database link in another user’s schema, and you cannot qualify dblink with the name of a schema. Periods are permitted in names of database links, so Oracle Database interprets the entire name, such as ralph.linktosales, as the name of a database link in your schema rather than as a database link named linktosales in the schema ralph.)
fonte:
http://download.oracle.com/docs/cd/B12037_01/server.101/b10759/statements_5005.htmBurga, como está no texto que você mesmo me passou “you cannot qualify dblink with the name of a schema”, mesmo assim tentei @PROD.DBL1, e claro, nem compilou. Alguém teria uma outra sugestão ?
14 de dezembro de 2009 às 6:47 pm #91575burgaParticipanteVocê utilizou o código de criação
CREATE DATABASE LINK DESENV.DBL1
CONNECT TO USUARIO
IDENTIFIED BY
USING 'DEVEL';e
CREATE DATABASE LINK PROD.DBL1
CONNECT TO USUARIO
IDENTIFIED BY
USING 'EBOP';e na verdade o que eu quis destacar foi a sentença
Oracle Database interprets the entire name, such as ralph.linktosales, as the name of a database link in your schema rather than as a database link named linktosales in the schema ralph.
Ou seja, no seu comando create database link os nomes dos links são PROD.DBL1 e DESENV.DBL1 do usuário que o criou, e não DBL1 dos esquemas PROD e DESENV.
Com qual usuário você está criando os links?
Dá uma olhada nesta tabela pra ver como estão os links.
DBA_DB_LINKS
-
AutorPosts
- Você deve fazer login para responder a este tópico.