Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #91338
    apovoa
    Participante

      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 BY USING '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 BY USING '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, 4

      OWNER 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 HARD

      #91340
      burga
      Participante

        Esta certo isso?

        SELECT COUNT(1) INTO I FROM BOP_CABELOS@EBOP;

        Não seria @DBL1 ????? 😀

        #91349
        apovoa
        Participante

          [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, 4

          OWNER 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 HARD

          #91355
          burga
          Participante

            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.htm

            #91570
            apovoa
            Participante

              [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.htm

              Burga, 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 ?

              #91575
              burga
              Participante

                Você 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

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.
              plugins premium WordPress