【发布时间】:2018-02-11 07:16:15
【问题描述】:
我有三个数据库 M,O,S。
M 有两个 DBLINK 到 O 和 S强>.
我可以在连接到 M 时从 O 中进行选择,如下所示:
SELECT * FROM TBL1@O_DBLINK;
并在连接到 M 时从 S 中进行选择,如下所示:
SELECT * FROM TBL2@S_DBLINK;
但是当我尝试在这样的单个脚本中从两个 DBLINK 中进行选择时:
DECLARE
a number;
b number;
BEGIN
SELECT colA into a FROM TBL1@O_DBLINK;
SELECT colB into b FROM TBL2@S_DBLINK;
END;
它返回以下错误:
ORA-04052: error occurred when looking up remote object S.TBLB@S_DBLINK
ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database open for read-only access
很奇怪的是,当我改变选择的顺序时,总是后者返回错误:
DECLARE
a number;
b number;
BEGIN
SELECT colB into b FROM TBL2@S_DBLINK;
SELECT colA into a FROM TBL1@O_DBLINK;
END;
ORA-04052: error occurred when looking up remote object O.TBLA@O_DBLINK
ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database open for read-only access
【问题讨论】:
-
您尝试过吗 - 更改事务只读; - 在执行 plsql 块之前?
-
亲爱的@0xdb:是的,我使用了它(当然是在我看到你的评论之后),但它并没有改变错误。
-
您的远程数据库是否也在 11g 或更低...?
-
@KaushikNayak:他们都在 11g 上。
-
这个帖子 asktom.oracle.com/pls/apex/… 可能会有所帮助。
标签: database oracle plsql oracle11g dblink