sql >> Databáze >  >> RDS >> Oracle

Jak mohu zavřít Oracle DbLinks v JDBC se zdroji dat a transakcemi XA, abych se vyhnul chybám ORA-02020?

Jakýkoli distribuovaný SQL, dokonce i výběr, otevře transakci, která musí být uzavřena, než budete moci zavřít odkaz na databázi. Než zavoláte ALTER SESSION CLOSE DATABASE LINK, musíte se vrátit zpět nebo potvrdit.

Ale zní to, jako byste už své transakce řešili něčím jiným. Pokud není možné ručně vrátit zpět nebo potvrdit, měli byste se pokusit zvýšit počet otevřených odkazů. OPEN_LINKS Parametr je maximální počet odkazů na relaci. Počet odkazů, které potřebujete, ve skutečnosti nezávisí na zatížení, měl by být založen na maximálním počtu různých vzdálených databází.

Upravit:

Situace, kterou popisujete ve svém komentáři, by se neměla stát. Nerozumím vašemu systému natolik, abych věděl, co se s transakcemi skutečně děje. V každém případě, pokud nemůžete přesně zjistit, co systém dělá, možná můžete nahradit "změnit odkaz zavřít relaci databáze" tímto postupem:

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;
/

Pravděpodobně budete potřebovat tento grant:

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



  1. Integrace SQLCipher s greenDAO

  2. Nastavení hodnoty pro jeden sloupec všech záznamů v tabulce

  3. Je možné použít SQL k řazení podle data, ale dát nulová data na konec sady výsledků?

  4. Jak získat přístup k pohledům db pomocí modelů Laravel?