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.