SQL terdistribusi apa pun, bahkan pilihan, akan membuka transaksi yang harus ditutup sebelum Anda dapat menutup tautan basis data. Anda perlu melakukan rollback atau commit sebelum memanggil ALTER SESSION CLOSE DATABASE LINK.
Tapi sepertinya Anda sudah punya sesuatu yang lain menangani transaksi Anda. Jika tidak memungkinkan untuk melakukan rollback atau commit secara manual, Anda harus mencoba menambah jumlah link yang terbuka. OPEN_LINKS parameter adalah jumlah maksimum tautan per sesi. Jumlah tautan yang Anda butuhkan tidak terlalu bergantung pada beban, tetapi harus didasarkan pada jumlah maksimum basis data jarak jauh yang berbeda.
Sunting:
Situasi yang Anda gambarkan dalam komentar Anda seharusnya tidak terjadi. Saya tidak cukup mengerti tentang sistem Anda untuk mengetahui apa yang sebenarnya terjadi dengan transaksi. Bagaimanapun, jika Anda tidak tahu persis apa yang sedang dilakukan sistem, mungkin Anda dapat mengganti "alter session close database link" dengan prosedur seperti ini:
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;
/
Anda mungkin membutuhkan hibah ini:
grant select on v_$dblink to [relevant user];