【问题标题】:Oracle 11g select from three databases using two dblinksOracle 11g 使用两个 dblink 从三个数据库中选择
【发布时间】:2018-02-11 07:16:15
【问题描述】:

我有三个数据库 M,O,S
M 有两个 DBLINK 到 OS强>.
我可以在连接到 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


【解决方案1】:

请尝试这种方法,

在数据库 M 中创建 table1,并在剩余的数据库 O 和 S 中创建同一张表(table1)的 SYNONYM。

现在您可以进行所有操作了。

例如:

create table table1 (col1); -- database M

create public synonym table1 for table1; -- database O & S

那么现在您可以使用 DB_Link 访问表,数据也会反映到所有 DB。

参考CREATE SYNONYM的链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多