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

ORA-08177:không thể tuần tự hóa quyền truy cập cho giao dịch này

Bạn đang sử dụng một giao dịch có thể tuần tự hóa đang chờ một số giao dịch khác khóa cùng một bảng thành ROLLBACK .

Nếu giao dịch khác này không khôi phục nhưng thay vào đó cam kết, bạn sẽ gặp phải lỗi này.

Tình huống có vẻ như sau:

  1. Alice mở phiên trình duyệt của cô ấy gọi DELETE FROM TABLE1 WHERE Version = 'v1'

    • Bob mở phiên của anh ấy gọi DELETE FROM TABLE1 WHERE Version = 'v1' sau Alice đã làm điều đó nhưng trước khi cô ấy cam kết.

    Bob Giao dịch của sẽ đợi kể từ khi Alice đã khóa các hàng bằng Version = 'v1'

    • Alice cam kết giao dịch của cô ấy

    • Bob Giao dịch của không thành công với Cannot serialize access

Để giải quyết vấn đề này, hãy đặt TRANSACTION ISOLATION LEVEL thành READ COMMITTED :

transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)

Trong trường hợp này, Bob Truy vấn của sẽ được phát hành lại sau Alice cam kết những thay đổi của cô ấy, như thể Bob Giao dịch của được bắt đầu sau Alice một trong những đã được cam kết.

Cập nhật

Bạn có thể vui lòng đăng một dấu vết về kết nối của mình không?

Để thực hiện việc này, hãy phát hành lệnh này ngay sau khi kết nối:

(New OracleCommand("ALTER SESSION SET SQL_TRACE=TRUE", connection, transaction)).ExecuteNonQuery();

, sau đó tìm trong $ORACLE_HOME\admin\udump cho một *.trc mới tệp




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu về PL / SQL Thu thập hàng loạt trong Cơ sở dữ liệu Oracle

  2. Tương đương với varchar (max) trong Oracle là gì?

  3. Sử dụng dung lượng cao từ crfclust.bdb

  4. Chọn Thu thập hàng loạt vào Ví dụ Oracle

  5. Hàm INITCAP () trong Oracle