Хотя я понимаю, что этому вопросу уже более 3 лет, кому-то может быть полезен другой ответ в будущем.
Давайте представим, что у меня есть 4 базы данных, 2 для производства и 2 для разработки/тестирования.
Prod DB: PRDAPP1DB1 и PRDAPP2DB1 Dev DB: DEVAPP1DB1 и DEVAPP2DB1
Базы данных "APP2" выполняют процедуры для извлечения и импорта данных из баз данных APP1. В этих процедурах есть различные операторы выбора, такие как:
declare
iCount INTEGER;
begin
insert into tbl_impdata1
select sysdate, col1, col2, substr(col3,1,10), substr(col3,15,3)
from tbl1@dblink2; -- Where dblink2 points to DEVAPP1DB1
...
<more statements here>
...
EXCEPTION
<exception handling code here>
end;
Теперь это нормально для разработки, но dblink2 необходимо постоянно менять на dblink1 при развертывании обновленной процедуры в рабочей среде.
Как было указано, для этой цели нельзя использовать синонимы. Но вместо этого создайте ссылки БД с тем же именем и другой строкой подключения.
Например. на производстве:
CREATE DATABASE LINK "MyDBLINK" USING 'PRDAPP1DB1';
И на разработчике:
CREATE DATABASE LINK "MyDBLINK" USING 'DEVAPP1DB1';
А потом в процедурах поменять все "@dblink1" и "@dblink2" на "@mydblink" и оттуда все должно быть прозрачно.
person
Peter T.
schedule
28.02.2019
create synonym dual_dblink2 for dual@dblink1
- person Boneist   schedule 01.12.2015