我有“PROD-1”数据库,其中包含 2 个模式“Schema-1”,“Schema-2”我在两个模式中创建了私有 dblink“DBLINK-1”,它们指向不同的目标。这是我的配置
数据库名称 -> 源架构 -> 目标数据库 -> 目标架构 -> Dblink 名称
PROD-1 -> Schema-1 -> TPRD-1 -> TSchema-1 -> DBLINK-1
PROD-1 -> Schema-2 -> TPRD-2 -> TSchema-2 -> DBLINK-1
当我在 Schema-1 中编译 proc 时,我在过程中使用这个 dblink 并部署在 Schema-1 和 Schema-2 中,它使 Schema-2 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 和 Schema-2 的私有 dblink;因此它不应该相互冲突。但是,当我在两种模式中同时执行这些程序时,一个程序成功执行,另一个正在等待第一个程序完成然后完成。
这就是可能发生的事情
- Schema-1 proc 首先启动,Proc 状态为 Valid。Schema-2 proc 正在等待
- Schema-1 proc 现已完成。Schema-2 proc 退出等待模式并使 Schema-1 中的 DBLink-1 无效。因此 Schema-1 proc 现在处于无效状态
- Schema-2 proc 运行并完成。Schema-2 proc 现在有效
我的问题是,如何在没有这种冲突的情况下在同一个数据库的两个不同模式中管理同一个 DBLink?
感谢您的帮助