Oracle 11g使用两个dblink从三个数据库中进行选择

时间:2017-09-02 11:58:42

标签: database oracle plsql oracle11g dblink

我有三个数据库 M,O,S
M 有两个DBLINK到 O S
我可以选择 O 连接到 M ,如下所示:

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

1 个答案:

答案 0 :(得分:0)

请尝试这种方法,

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

现在你可以做所有的操作了。

例如:

create table table1 (col1); -- database M

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

然后现在您可以使用DB_Link访问该表,并且数据也会反映到所有数据库。

  

请参阅CREATE SYNONYM

的链接