2013-04-10 57 views
0

我有包含2个架构“架构-1”,“架构-2”的“PROD-1”数据库 我创建了专用dblink“DBLINK-1 “在两个模式&他们指向不同的目标。 这里是我的配置在相同数据库的不同架构中使用的相同DBLink名称 - 使Procs失效

DB名称 - >源架构 - >目标DB - >目标模式 - > DBLINK名称

PROD-1 - >架构 - 1 - > TPRD-1 - > TSchema-1 - > DBLINK-1

PROD -1 - >模式-2 - > TPRD -2 - > TSchema -2 - > DBLINK-1

我用这DBLINK在过程和部署在两种模式-1 & Schema-2 当我在Schema-1中编译过程时,它是invali约会Schema-2 proc &反之亦然。 这里是样品PROC

CREATE OR REPLACE procedure test_dblink 

is v_cnt number;

begin 
    select count(*) into v_cnt from [email protected]; 

end;

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

这是可能会发生

  1. 架构-1 PROC开始第一和PROC状态是有效的。 Schema-2 proc正在等待
  2. Schema-1 proc现已完成。 Schema-2 proc出现等待模式&使Schema-1中的DBLink-1失效。因此Schema-1 proc现在处于无效状态
  3. Schema-2 proc运行并完成。模式2 PROC现在是有效的

我的问题是,我该如何管理两个不同的架构相同的DB同DBLINK没有这个矛盾呢?

欣赏你帮

+0

这是不好的做法,以不同的模式命名对象相同,但是......你是对的 - dblinks是私人对象。你是从用户自己创建程序吗? (我的意思是,你在运行'create procedure'时登录为schema-1?) – haki 2013-04-11 07:22:33

+0

Hello Haki,谢谢你的回应。最后,我通过使用Oracle创建P1票证来发现问题。错误7395995 – Lava 2013-04-17 19:22:48

回答

0

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

相关问题