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

Cách tìm các hàng bị khóa trong Oracle

Oracle Khái niệm khóa của hệ thống khác hoàn toàn so với các hệ thống khác.

Khi một hàng trong Oracle bị khóa, bản ghi tự được cập nhật với giá trị mới (nếu có) và ngoài ra, một khóa (về cơ bản là một con trỏ đến khóa giao dịch nằm trong phân đoạn khôi phục) được đặt ngay vào bản ghi.

Điều này có nghĩa là khóa một bản ghi trong Oracle có nghĩa là cập nhật siêu dữ liệu của bản ghi và ghi trang hợp lý. Ví dụ:bạn không thể thực hiện SELECT FOR UPDATE trên không gian bảng chỉ đọc.

Hơn nữa, bản thân các bản ghi không được cập nhật sau khi cam kết:thay vào đó, phân đoạn khôi phục được cập nhật.

Điều này có nghĩa là mỗi bản ghi lưu giữ một số thông tin về giao dịch được cập nhật lần cuối, ngay cả khi bản thân giao dịch đó đã chết từ lâu. Để tìm hiểu xem giao dịch có còn tồn tại hay không (và do đó, nếu bản ghi còn tồn tại hay không), bạn cần phải truy cập phân đoạn khôi phục.

Oracle không có trình quản lý khóa truyền thống và điều này có nghĩa là để có được danh sách tất cả các khóa yêu cầu phải quét tất cả các bản ghi trong tất cả các đối tượng. Quá trình này sẽ mất quá nhiều thời gian.

Bạn có thể lấy một số khóa đặc biệt, chẳng hạn như các đối tượng siêu dữ liệu bị khóa (sử dụng v$locked_object ), khóa chờ (sử dụng v$session ) vv, nhưng không phải danh sách tất cả các khóa trên tất cả các đối tượng trong cơ sở dữ liệu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thứ tự của các bảng được tham chiếu trong mệnh đề ON của hàm JOIN có quan trọng không?

  2. Tách tệp văn bản / CSV lớn thành nhiều tệp trong PL SQL

  3. Khắc phục lỗi cột thả trong Oracle 18c và 19c

  4. Thay đổi định nghĩa TYPE trong Oracle 21c

  5. Bạn có thể sử dụng Microsoft Entity Framework với Oracle không?