通过两个数据库链接使用 PL/SQL API
use PL/SQL API through two databaselinks
有一个 Oracle 数据库(版本 8)充当 PL/SQL API,提供对该数据库中不同过程和表的访问。
我有另一个 Oracle 数据库(版本 10g),它通过数据库 link.
使用这些过程和表
我将我的数据库升级到版本 12g,但显然在版本 8 和 12g 之间使用数据库 link 存在兼容性问题。
所以想出了一个计划,用 Oracle 版本 10g 创建第三个数据库,并将其放在 8 和 12g 之间作为 "proxy"。
从 v12g 到 v10g 和从 v10g 制作数据库 links到 v8。在 "proxy" (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: synonym translation is no longer valid"。有没有办法我可以通过 v10g 从 v12g 访问 v8 过程和表 - 这意味着通过 2 个数据库links?
假设存在阻止 Oracle 8 (8.0/8.1.x) 数据库升级的主要障碍,我认为您将需要忘记数据库链接。即使你付出很多努力让它的工作时间延长一点,你也不能保证它在下一个补丁中能工作。
我会考虑构建一个 Java 围绕 Oracle 8 功能的包装器。您的 12c 数据库只是调用 Java 层(甚至可能作为 Java 存储过程)。
如果您必须使用 dblinks,您可以尝试查看 DG4ODBC,这样您就可以将 Oracle 8 数据库视为通用 'foreign' 数据库而不是 Oracle 数据库。
有一个 Oracle 数据库(版本 8)充当 PL/SQL API,提供对该数据库中不同过程和表的访问。
我有另一个 Oracle 数据库(版本 10g),它通过数据库 link.
使用这些过程和表
我将我的数据库升级到版本 12g,但显然在版本 8 和 12g 之间使用数据库 link 存在兼容性问题。
所以想出了一个计划,用 Oracle 版本 10g 创建第三个数据库,并将其放在 8 和 12g 之间作为 "proxy"。
从 v12g 到 v10g 和从 v10g 制作数据库 links到 v8。在 "proxy" (v10g) 数据库中为 v8 数据库中的表和过程创建了同义词。
我可以从 v12g:
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: synonym translation is no longer valid"。有没有办法我可以通过 v10g 从 v12g 访问 v8 过程和表 - 这意味着通过 2 个数据库links?
假设存在阻止 Oracle 8 (8.0/8.1.x) 数据库升级的主要障碍,我认为您将需要忘记数据库链接。即使你付出很多努力让它的工作时间延长一点,你也不能保证它在下一个补丁中能工作。
我会考虑构建一个 Java 围绕 Oracle 8 功能的包装器。您的 12c 数据库只是调用 Java 层(甚至可能作为 Java 存储过程)。
如果您必须使用 dblinks,您可以尝试查看 DG4ODBC,这样您就可以将 Oracle 8 数据库视为通用 'foreign' 数据库而不是 Oracle 数据库。