Использовать PL/SQL API через две ссылки на базу данных
Существует база данных Oracle (версия 8), выполняющая роль API PL/SQL, обеспечивающая доступ к различным процедурам и таблицам в этой базе данных.
У меня есть другая база данных Oracle (версия 10g), которая использует эти процедуры и таблицы через ссылку на базу данных.
Я обновил свою базу данных до версии 12g, но, по-видимому, существуют проблемы совместимости при использовании связи базы данных между версиями 8 и 12g. Поэтому мы разработали план создания третьей базы данных с версией Oracle 10g и поместили ее между 8 и 12g в качестве "прокси".
Сделаны ссылки на базы данных от v12g до v10g и от v10g до v8. Созданы синонимы в базе данных "proxy" (v10g) для таблиц и процедур в базе данных v8. Я могу сделать стандартное предложение SELECT из 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: перевод синонима больше не действителен". Есть ли способ, которым я мог бы получить доступ к процедурам и таблицам v8 из v12g через v10g - что означает через 2 ссылки на базу данных?
1 ответ
Предполагая, что существует серьезное препятствие, мешающее обновлению базы данных Oracle 8 (8.0/8.1.x), я думаю, вам придется забыть о связях с базой данных. Даже если вы приложите немало усилий, чтобы заставить его работать немного дольше, у вас нет гарантии, что он сработает в следующем патче.
Я бы посмотрел на создание оболочки Java вокруг функциональности Oracle 8. Ваша база данных 12c просто делает вызовы к слою Java (возможно, даже как хранимая процедура Java).
Если вам нужно использовать dblinks, вы можете попытаться взглянуть на DG4ODBC, так что вы будете рассматривать БД Oracle 8 как общую "чужую" базу данных, а не как БД Oracle.