Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak mogę zamknąć Oracle DbLinks w JDBC ze źródłami danych i transakcjami XA, aby uniknąć błędów ORA-02020?

Każdy rozproszony SQL, nawet wybrany, otworzy transakcję, która musi zostać zamknięta, zanim będzie można zamknąć łącze do bazy danych. Musisz wycofać lub zatwierdzić przed wywołaniem ALTER SESSION CLOSE DATABASE LINK.

Ale wygląda na to, że masz już coś innego do obsługi Twoich transakcji. Jeśli nie jest możliwe ręczne wycofanie lub zatwierdzenie, powinieneś spróbować zwiększyć liczbę otwartych linków. OPEN_LINKS parametr to maksymalna liczba linków na sesję. Liczba potrzebnych linków nie zależy tak naprawdę od obciążenia, powinna być oparta na maksymalnej liczbie odrębnych zdalnych baz danych.

Edytuj:

Sytuacja, którą opisujesz w swoim komentarzu, nie powinna mieć miejsca. Nie rozumiem wystarczająco twojego systemu, aby wiedzieć, co naprawdę dzieje się z transakcjami. W każdym razie, jeśli nie możesz dokładnie określić, co robi system, możesz zastąpić "zmianę łącza do bazy danych zamknięcia sesji" taką procedurą:

create or replace procedure rollback_and_close_db_links authid current_user is
begin
    rollback;
    for links in (select db_link from v$dblink) loop
        execute immediate 'alter session close database link '||links.db_link;
    end loop;
end;
/

Prawdopodobnie będziesz potrzebować tego grantu:

grant select on v_$dblink to [relevant user];



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykonać blok PL SQL w Oracle

  2. Groovy SQL Oracle Array Funkcja/procedura rejestracja parametrów wyjściowych

  3. Oracle 11g:Domyślna wartość statyczna, gdy zapytanie nic nie zwraca

  4. Tabela nie istnieje podczas korzystania z EF 6 i Oracle.ManagedDataAccess

  5. Nie można przesłać połączenia do pliku oracle.jdbc.OracleConnection