Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm cách nào để đóng Oracle DbLinks trong JDBC với nguồn dữ liệu XA và các giao dịch để tránh lỗi ORA-02020?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng SYS_REFCURSUR được chọn để cập nhật trong pl / sql

  2. Mệnh đề USING trong oracle 11g

  3. Vấn đề kỳ lạ về tư cách thành viên ASP

  4. PHP, IIS, Oracle (OCI) không hoạt động

  5. Cần trợ giúp trong việc thực hiện truy vấn cập nhật ngay lập tức