从 数据库A 通过DBLINK_1 访问 数据库B 上的一个 同义词 , 
这个 同义词 代表的是从 数据库B 通过 DBLINK_2 访问的 数据库C 上的一张表, 
DBLINK_1 在 数据库A 上, DBLINK_2 在 数据库B上, 
现在通过PL/SQL Developer连接数据库A,在SQL Window中直接操作没有任何问题, 
但是如果把SELECE、INSERT、UPDATE等语句写到存储过程或者触发器中,立刻出现问题,报告“DBLINK_2不存在”。 通过PL/SQL Developer直接登录数据库B,有时候去View那个DBLINK_2,会发现在View SQL时最上面一行会多出一条DROP DBLINK_2的语句——奇怪勒,数据库里有幽灵?
  
还有,我在存储过程中如果这样定义变量:variable_1   Synonym@DBLINK_1%ROWTYPE;也会产生同样的错误。 提示:DBLINK_2 not exist! 这个Synonym是数据库B上的。 
但是直接进行:SELECT * FROM Synonym@DBLINK_1;没有任何问题。INSERT、UPDATE、DELETE也行。 
直接用SQL Window执行命令不会有问题,就是没法写成存储过程。 有朋友说是权限问题,但是我登录数据库A和数据库B的用户都是DBA权限。
本人是Oracle初学者,请多指教。

解决方案 »

  1.   

    同事帮我上METALINK查了一把,结果如此,原来是个BUG……Subject:  OERR: ORA 4054 database link does not 
      Doc ID:  Note:19848.1 Type:  REFERENCE 
      Last Revision Date:  10-JUN-1999 Status:  PUBLISHED Error:  ORA 4054 
    Text:   database link <name> does not exist 
    -------------------------------------------------------------------------------
    Cause:  During compilation of a PL/SQL block, an attempt was made to use a non-
            existent database link.
    Action: Use a different database link or create the database link.*** Important: The notes below are for experienced users - See Note 22080.1
    ---------------------------------------------------------------------------
    Known Bugs: Fixed In. Bug No.      Description
    ---------+------------+----------------------------------------------------
    2.3.3.1  | Bug 382696 | GETTING ORA-4054 WHEN TRYING TO USE A SYNONYM WITH
             |            | DATABASE LINK INSIDE PLSQL 
             |            | (Actually a problem using two '@' signs in a database
             |            | link - i.e. a connection qualifier.)
    7.3.4.3  | Bug 374124 | PROCEDURE IMPORT FAILED WITH ERROR "ORA 4054: DATABASE
             |            | LINK DOES NOT EXIST"