在同一数据库的不同模式中使用相同的DBLink名称 - 使Procs无效

时间:2013-04-10 19:52:08

标签: database oracle procedure dblink

我有“PROD-1”db,其中包含2个模式“Schema-1”,“Schema-2” 我在模式和模式中创建了私有dblink“DBLINK-1”。他们指向不同的目标。 这是我的配置

数据库名称 - >源架构 - >目标DB - >目标模式 - > Dblink名称

PROD-1 - > Schema-1 - > TPRD-1 - > TSchema-1 - > DBLINK-1

PROD-1 - > Schema-2 - > TPRD-2 - > TSchema-2 - > DBLINK-1

我在程序中使用此dblink并在Schema-1和&模式2 当我在Schema-1中编译proc时,它使Schema-2 proc& amp;反之亦然。 这是示例proc

CREATE OR REPLACE procedure test_dblink

is    v_cnt number;

begin
   select count(*) into v_cnt from DUAL@DBLINK-1;

end;

根据我的理解,DBLINK-1是Schema-1&的私有dblink。架构-2;因此它不应该相互冲突。但是,当我在两个模式中同时执行这些过程时,一个过程成功地完成了。另一个人正在等待第一个完成然后完成。

这是可能发生的事情

  1. Schema-1 proc首先启动,Proc状态为Valid。 Schema-2 proc正在等待
  2. Schema-1 proc现已完成。 Schema-2 proc退出了等待模式&在Schema-1中使DBLink-1无效。因此,Schema-1 proc现在处于Invalid status
  3. Schema-2 proc运行并完成。 Schema-2 proc现在有效
  4. 我的问题是,如何在没有这种冲突的情况下在同一个数据库的两个不同模式中管理相同的DBLink?

    感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我们使用同义词解决了这个问题。为数据库链接使用唯一名称。然后在每个模式中为您使用的每个远程对象创建同义词。这样,您仍然可以在两个模式中使用相同的PL / SQL代码。