Bất kỳ SQL phân tán nào, ngay cả một lựa chọn, sẽ mở một giao dịch phải được đóng trước khi bạn có thể đóng liên kết cơ sở dữ liệu. Bạn cần khôi phục hoặc cam kết trước khi gọi ALTER SESSION ĐÓNG LIÊN KẾT CƠ SỞ DỮ LIỆU.
Nhưng có vẻ như bạn đã có một thứ gì đó khác xử lý các giao dịch của mình. Nếu không thể khôi phục hoặc cam kết theo cách thủ công, bạn nên cố gắng tăng số lượng liên kết đang mở. OPEN_LINKS là số lượng liên kết tối đa cho mỗi phiên. Số lượng liên kết bạn cần không thực sự phụ thuộc vào tải, nó phải dựa trên số lượng tối đa cơ sở dữ liệu từ xa riêng biệt.
Chỉnh sửa:
Tình huống bạn mô tả trong bình luận của bạn sẽ không xảy ra. Tôi không hiểu đủ về hệ thống của bạn để biết điều gì đang thực sự xảy ra với các giao dịch. Dù sao, nếu bạn không thể tìm ra chính xác hệ thống đang làm gì, bạn có thể thay thế "liên kết cơ sở dữ liệu đóng phiên thay đổi" bằng một thủ tục như sau:
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;
/
Có thể bạn sẽ cần khoản trợ cấp này:
grant select on v_$dblink to [relevant user];