2013-08-02 17 views

Trả lời

9

Chúng tôi có thể cấp khóa một cách rõ ràng với lệnh LOCK TABLE. Find out more

Nếu không, chèn sẽ không khóa bất kỳ hàng nào khác. Vì mô hình cách ly đọc của Oracle mà hàng chỉ tồn tại trong phiên của chúng ta cho đến khi chúng ta cam kết nó, nên không ai khác có thể làm bất cứ điều gì với nó. Find out more.

Tuyên bố cập nhật chỉ khóa các hàng bị ảnh hưởng. Trừ khi chúng tôi đã thực hiện một chiến lược khóa bi quan với SELECT ... FOR UPDATE. Find out more.

Cuối cùng, trong các nhà văn Oracle không chặn độc giả. Vì vậy, ngay cả các hàng bị khóa có thể được đọc bởi các phiên khác, chúng không thể thay đổi được. Find out more.

Hành vi này được đưa vào hạt nhân Oracle và không thể định cấu hình được.


Justin làm cho điểm tốt về khóa DDL cấp bảng. Khóa đó sẽ gây ra một phiên thực hiện DDL trên bảng để chờ cho đến khi phiên DML cam kết, trừ khi DDL là một cái gì đó giống như CREATE INDEX trong trường hợp đó nó sẽ thất bại ngay lập tức với ORA-00054.

+0

liên kết bị hỏng! –

+0

@Gab 是 好人 - cảm ơn vì đã cho tôi biết. Tôi đã thay thế chúng bằng các liên kết đến phiên bản tài liệu mới nhất. – APC

5

Điều đó phụ thuộc vào ý bạn là "khóa".

Đối với 99,9% những gì mọi người có thể quan tâm, Oracle sẽ có được khóa cấp hàng khi một hàng được sửa đổi. Khóa cấp hàng vẫn cho phép người đọc đọc hàng (vì có nhiều phiên bản đọc nhất quán, nhà văn không bao giờ chặn độc giả và người đọc không bao giờ đọc sách bẩn).

Nếu bạn poke xung quanh v$lock, bạn sẽ thấy rằng việc cập nhật hàng cũng sẽ đưa ra một khóa trên bàn. Nhưng khóa đó chỉ ngăn cản một phiên khác làm DDL trên bàn. Vì bạn hầu như không bao giờ muốn làm DDL trên một bảng đang hoạt động ở nơi đầu tiên, mà nói chung không phải là cái gì đó thực sự sẽ gây ra một phiên khác chờ đợi cho khóa.

0

Bạn có lẽ nên đọc hướng dẫn khái niệm oracle về khóa. Đối với các hoạt động DML chuẩn (chèn, cập nhật, xóa, hợp nhất), oracle mất khóa DML (loại TM) dùng chung. Điều này cho phép các DML khác trên bàn xảy ra đồng thời (nó là khóa chia sẻ.) Hàng được sửa đổi bằng cách cập nhật hoặc xóa hoạt động DML và chưa được cam kết sẽ có khóa hàng độc quyền (loại TX). Một hoạt động DML khác trong phiên/giao dịch có thể hoạt động trên bảng, nhưng nếu nó sửa đổi cùng một hàng, nó sẽ chặn cho đến khi người giữ khóa hàng phát hành nó bằng cách cam kết hoặc quay trở lại.

Hoạt động DML song song và các thao tác tải trực tiếp chèn nối tiếp có các khóa bảng độc quyền.

5

Khi một DML thông thường được thực thi (UPDATE/DELETE/INSERT, MERGE và SELECT ... FOR UPDATE) oracle có được 2 khóa. Khóa mức hàng (TX) - Điều này có được một khóa trên hàng cụ thể đang được chạm và bất kỳ giao dịch nào khác cố sửa đổi cùng một hàng bị chặn, cho đến khi hàng đã sở hữu nó kết thúc. Khóa mức bảng (TM) - Khi khóa hàng (TX) thu được một khóa bảng bổ sung cũng được lấy để ngăn chặn bất kỳ hoạt động DDL nào xảy ra trong khi tiến hành DML.

Điều quan trọng là ở chế độ nào mà Khóa bảng thu được. Khóa chia sẻ hàng (RS), còn được gọi là khóa bảng con (SS), cho biết giao dịch giữ khóa trên bàn có các hàng bị khóa trong bảng và dự định cập nhật chúng. Khóa SS là chế độ khóa bàn ít hạn chế nhất, cung cấp mức đồng thời cao nhất cho một bảng.

Một khóa độc quyền hàng (RX), còn được gọi là khóa bảng phân giải phụ (SX), cho biết giao dịch giữ khóa đã cập nhật hàng hoặc phát hành SELECT ... FOR UPDATE. Khóa SX cho phép các giao dịch khác truy vấn, chèn, cập nhật, xóa hoặc khóa các hàng đồng thời trong cùng một bảng. Vì vậy, SX khóa cho phép nhiều giao dịch để có được đồng thời SX và SS khóa cho cùng một bảng.

Khóa bảng chia sẻ (S) được tổ chức bởi một giao dịch cho phép các giao dịch khác truy vấn bảng (không sử dụng SELECT ... FOR UPDATE) nhưng chỉ cho phép cập nhật nếu một giao dịch duy nhất giữ khóa bảng chia sẻ. Nhiều giao dịch có thể giữ một khóa bảng chia sẻ đồng thời, do đó, giữ khóa này là không đủ để đảm bảo rằng một giao dịch có thể sửa đổi bảng.

Khóa bảng độc quyền chia sẻ hàng (SRX), còn được gọi là khóa bảng chia sẻ cấp dưới (SSX), hạn chế hơn khóa bảng chia sẻ. Chỉ có một giao dịch tại một thời điểm có thể có được một khóa SSX trên một bảng nhất định. Khóa SSX được tổ chức bởi một giao dịch cho phép các giao dịch khác truy vấn bảng (ngoại trừ SELECT ... FOR UPDATE) nhưng không cập nhật bảng.

Khóa bàn độc quyền (X) là chế độ khóa bàn phím hạn chế nhất, cho phép giao dịch giữ quyền truy cập ghi độc quyền bằng khóa vào bảng. Chỉ một giao dịch mới có thể nhận được khóa X cho một bảng.

+5

Đây là một bản sao nguyên văn của Oracle [tài liệu] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/ap_locks001.htm#SQLRF55502). Người ta nên ít nhất là tín dụng nguồn gốc và đặt nó như là một báo giá. –

Các vấn đề liên quan