通过两个数据库链接使用 PL/SQL API

Posted

技术标签:

【中文标题】通过两个数据库链接使用 PL/SQL API【英文标题】:use PL/SQL API through two databaselinks 【发布时间】:2016-05-08 19:49:56 【问题描述】:

有一个 Oracle 数据库(版本 8)充当 PL/SQL API,提供对该数据库中不同过程和表的访问。 我有另一个 Oracle 数据库(版本 10g),它通过数据库链接使用这些过程和表。 我将数据库升级到版本 12g,但显然使用版本 8 和 12g 之间的数据库链接存在兼容性问题。 所以想出了一个计划,用 Oracle 10g 版本创建第三个数据库,并将它放在 8 到 12g 之间作为“代理”。 制作了从 v12g 到 v10g 以及从 v10g 到 v8 的数据库链接。在“代理”(v10g)数据库中为 v8 数据库中的表和过程创建了同义词。 我可以从 v12g 创建一个标准的 SELECT 子句:

    select column from table@dblink;

但将其放入匿名块中:

    declare
     sVar varchar2(200);
    begin
      select column into sVar from table@dblink;
      dbms_output.put_line(sVar);
    end;

给出错误:“PL/SQL:ORA-00980:同义词翻译不再有效”。有没有办法我可以通过 v10g 从 v12g 访问 v8 过程和表 - 这意味着通过 2 个数据库链接?

【问题讨论】:

而你无法将v8数据库升级到千禧年版本的原因是......? 它属于另一家公司:) 另一个解决方案,取决于数据需要的最新程度,是在 10g 数据库上创建物化视图,定期通过其 db 链接从 8 中提取数据,然后从 12g 中查询这些 MV。 【参考方案1】:

假设升级 Oracle 8 (8.0/8.1.x) 数据库存在重大障碍,我认为您需要忘记数据库链接。即使你付出了很多努力让它工作得更久一点,你也不能保证它会在下一个补丁中工作。

我会考虑围绕 Oracle 8 功能构建 Java 包装器。您的 12c 数据库只是调用 Java 层(甚至可能作为 Java 存储过程)。

如果您必须使用 dblinks,您可以尝试查看 DG4ODBC,因此您会将 Oracle 8 DB 视为通用的“外部”数据库,而不是 Oracle DB。

【讨论】:

感谢您的意见。在这种情况下,“忘记数据库链接”(也就是说,通过 2 个 db 的 dblinks 不起作用)似乎是正确的答案。

以上是关于通过两个数据库链接使用 PL/SQL API的主要内容,如果未能解决你的问题,请参考以下文章

使用 sqoop 的两个 (PL)/SQL 查询

简单的PL/SQl链接远程ORACLE数据库方法

oracle数据库中有数据,通过pl/sql查询不到,用sqlplus能查到,PL/SQL developer会对数据进行本地缓存

在 Oracle PL/SQL 视图中管理 DB 链接

SQL Plus和PL/SQL

Oracle dblink