【问题标题】:Oracle database links between 10g and 11g10g和11g之间的Oracle数据库链接
【发布时间】:2011-01-29 06:41:47
【问题描述】:

有人对 10g 和 11g 之间的数据库链接有经验吗?

这是受支持的设置/操作吗?可能吗?有什么问题吗?注意事项?

【问题讨论】:

  • 将在接下来的几周内安装 11g 以测试此设置。仍然会感谢有关此体验的更多回复。

标签: database oracle oracle10g oracle11g


【解决方案1】:

我一直在使用从 11g 到 10g 的 DB Links。没有什么大问题。

唯一需要注意的是,11g 可以使用大小写混合的密码,如果您尝试从 10g 数据库连接到 11g 数据库,您可能希望将其关闭。

【讨论】:

  • 谢谢。您是否考虑过仅使用大写密码来连接 10g 到 11g 以仍然允许混合大小写密码?
【解决方案2】:

有时会出现问题,当从 11G 链接到 10.2.0.4 时。

Oracle 支持文档 ID 730423.1:使用 Dblink 选择本地函数和远程表由于 Enq DX 而挂起。

【解决方案3】:

如果您在 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(+);

【讨论】:

    【解决方案4】:

    不能再通过同义词从另一个模式访问选择列表中带有 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
    

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2011-04-10
      • 1970-01-01
      • 2015-04-25
      • 2014-02-22
      • 1970-01-01
      • 2011-04-24
      • 2018-03-27
      • 1970-01-01
      相关资源
      最近更新 更多