有人对 10g 和 11g 之间的数据库链接有经验吗?
这是受支持的设置/操作吗?是否可以?有什么问题吗?注意事项?
我一直在使用从 11g 到 10g 的 DB Links。没有什么大问题。
唯一需要注意的是 11g 可以使用大小写混合的密码,如果您尝试从 10g 数据库连接到 11g 数据库,您可能希望将其关闭。
不能再通过同义词从另一个模式访问选择列表中带有 dblink 的视图(用于在 Oracle 10 中工作)
风景
create or replace foo_view as
select foo.id@link id --yes, I know this is stupid... legacy code
from foo@link
在其他数据库用户上
create synonym foo_synonym for otherdb.foo_view
选择 foo_synonym:“未找到远程数据库的 ORA-02019 连接描述”
解决方案是从底层视图的 select 子句中删除 dblinks(首先不应该存在):
create or replace foo_view as
select foo.id id
from foo@lin foo
有时会出现问题,当从 11G 链接到 10.2.0.4 时。
Oracle 支持文档 ID 730423.1:使用 Dblink 选择本地函数和远程表由于 Enq DX 而挂起。
如果您在 11g 中有一个也使用 IN 或 OR 的外连接查询,并且通过 db_link 到 10g 引用表,则也可能引发 ORA-01719。
11g 到 11g 的工作原理与 10g 到 10g 一样 - 如果您将 db_link 从 11g 链接到 10g,就会出现。
具体来说,我目前使用 11.2.0.1 到 10.2.0.3 看到这个问题;和 11.2.0.2 到 10.2.0.4。以及不同的操作系统版本:Windows 和 Solaris。
在目标 10g 和 11g 数据库中运行:
create table u1 (c1 number);
create table u2 (c1 number, c2 number);
insert into u1 values (1);
insert into u1 values (2);
insert into u2 values (1,1);
insert into u2 values (1,2);
commit;
在 11g 链接数据库中创建 db_links (DB10, DB11) 到 10g 和 11g 链接数据库。
在 11g 链接数据库中运行这些查询:
/* this will fail 11g to 10g*/
SELECT *
FROM u1@DB10 a,
(SELECT *
FROM u2@DB10
WHERE c1 IN (1, 2, 3)) b
WHERE a.c1 = b.c1(+);
/* this will work 11g to 11g*/
SELECT *
FROM u1@DB11 a,
(SELECT *
FROM u2@DB11
WHERE c1 IN (1, 2, 3)) b
WHERE a.c1 = b.c1(+);