Oracle: активировать DBLINK перед транзакцией - PullRequest
0 голосов
/ 28 июня 2018

Рассмотрим две системы: A (исходная система) и B (система получателя) У нас есть хранимая процедура Oracle для загрузки некоторых деталей из A в B. У нас есть DBLINK для вставки данных из A в B. Мы получаем ошибку DBLINK

ORA-01012: не зарегистрирован ORA-02063: предыдущая строка из A_B_DBLINKORA-06512

Согласно моему пониманию, если DBLINK неактивен более 30 минут (как настроено в системе B), и система A пытается подключиться к B, она выдает эту ошибку.

Чтобы решить эту проблему, мы подходим к ней, как показано ниже:

UPLOAD PROCEDURE
begin
if A_B_DBLINK='Active' then
    enter procedure;
    upload data;
else
    //attempt to trigger DBLINK as active
    //calling UPLOAD PROCEDURE
end;

Мне нужна помощь для реализации этого, в настоящее время я использую select * from dual@A_B_DBLINK;, чтобы проверить, активно ли соединение, но не могу активировать его (неспособно проверить сценарий сбоя). Пожалуйста, ведите меня вперед.

Спасибо

1 Ответ

0 голосов
/ 28 июня 2018
DECLARE
   v_my_value        NUMBER := NULL;
   v_dblink_status   VARCHAR2 (10) := 'INACTIVE';
BEGIN
   SELECT COUNT (1) INTO v_my_value FROM DUAL@A_B_DBLINK;

   v_dblink_status := 'ACTIVE';
EXCEPTION
   WHEN OTHERS
   THEN
      BEGIN
         v_dblink_status := 'INACTIVE';
      END;
END;
...