sql >> Database teknologi >  >> RDS >> Oracle

Hvordan kan jeg lukke Oracle DbLinks i JDBC med XA-datakilder og transaktioner for at undgå ORA-02020-fejl?

Enhver distribueret SQL, selv en udvalgt, vil åbne en transaktion, der skal lukkes, før du kan lukke databaselinket. Du skal enten rulle tilbage eller forpligte dig, før du ringer til ALTER SESSION LUK DATABASE LINK.

Men det lyder som om, at du allerede har noget andet til at håndtere dine transaktioner. Hvis det ikke er muligt manuelt at rulle tilbage eller commit, bør du prøve at øge antallet af åbne links. OPEN_LINKS parameter er det maksimale antal links pr. session. Antallet af links, du har brug for, afhænger ikke rigtig af belastningen, det bør være baseret på det maksimale antal forskellige fjerndatabaser.

Rediger:

Den situation, du beskriver i din kommentar, burde ikke ske. Jeg forstår ikke nok af dit system til at vide, hvad der virkelig sker med transaktionerne. I hvert fald, hvis du ikke kan finde ud af præcis, hvad systemet gør, kan du måske erstatte "ændre sessionsluk databaselink" med en procedure som denne:

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

Du får sandsynligvis brug for denne bevilling:

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



  1. Sammenlign datoer i MySQL

  2. randomisering af stort datasæt

  3. Sådan fungerer INSTR()-funktionen i MySQL

  4. PHP Søgning med flere input