Qui Truong

Ngày Đăng:

31/05/2023 19:55

Ngày Cập Nhật:

31/05/2023 19:56

Tác giả: Qui Truong
Ngày đăng: 31/05/2023 19:55

Chào mừng bạn đến với bài viết của chúng tôi về việc quản lý locks dữ liệu trong Oracle Database. Trong thế giới số hóa hiện đại ngày nay, khi nhiều người dùng truy cập và thay đổi dữ liệu đồng thời, đảm bảo tính đồng thời hiệu quả và đáng tin cậy của dữ liệu là vô cùng quan trọng.

Trong bài viết này, chúng tôi sẽ khám phá sự phức tạp của việc quản lý đồng thời dữ liệu trong cơ sở dữ liệu Oracle và tìm hiểu cơ chế khóa được sử dụng bởi Oracle để duy trì tính nhất quán của dữ liệu. Khi kết thúc bài viết này, bạn sẽ hiểu rõ cách theo dõi và giải quyết xung đột khóa, từ đó cải thiện hiệu suất và độ tin cậy tổng thể của hệ thống cơ sở dữ liệu Oracle của bạn.

Locks dữ liệu trong Oracle Database: Khái quát

lock-du-lieu-trong-oracle

Locks dữ liệu trong Oracle Database: Khái quát

Trước khi máy chủ cơ sở dữ liệu cho phép một phiên làm việc chỉnh sửa dữ liệu, phiên làm việc đó phải khóa dữ liệu đang được chỉnh sửa trước. Một khóa đưa phiên làm việc có quyền kiểm soát độc quyền trên dữ liệu, đồng nghĩa với việc không có giao dịch khác có thể chỉnh sửa dữ liệu bị khóa cho đến khi khóa được giải phóng.

Giao dịch có thể khóa từng hàng dữ liệu, nhiều hàng dữ liệu hoặc ngay cả toàn bộ bảng. Oracle Database hỗ trợ cả khóa thủ công và khóa tự động. Đối với các khóa được tự động thực hiện, cấp độ khóa thấp nhất được chọn để giảm thiểu xung đột tiềm năng với các giao dịch khác.

Chức năng locks trong cơ sở dữ liệu Oracle đem lại những lợi ích sau:

  1. Ngăn chặn xung đột dữ liệu: Locks cho phép ngăn chặn nhiều phiên làm việc đồng thời thay đổi cùng một dữ liệu. Điều này đảm bảo rằng chỉ một phiên làm việc có thể truy cập và thay đổi dữ liệu tại một thời điểm, tránh tình trạng xung đột gây mất mát hoặc sai lệch dữ liệu.
  2. Bảo vệ tính nhất quán của dữ liệu: Bằng cách sử dụng locks, Oracle database đảm bảo tính nhất quán của dữ liệu. Nếu một phiên làm việc đang sử dụng một tài nguyên, các phiên làm việc khác sẽ phải chờ đợi để truy cập tài nguyên đó. Điều này đảm bảo rằng dữ liệu không bị thay đổi trong khi các phiên làm việc khác cố gắng truy cập và đảm bảo tính nhất quán của dữ liệu
  3. Đồng bộ hóa và kiểm soát truy cập: Locks cho phép đồng bộ hóa và kiểm soát truy cập đến các tài nguyên chia sẻ trong cơ sở dữ liệu. Bằng cách sử dụng locks, Oracle database đảm bảo rằng các phiên làm việc không xung đột và không gian nguyên tố được duy trì. Điều này giúp giảm thiểu tình trạng "đọc xanh" (dirty read), "đọc mờ" (fuzzy read) và "ghi mất" (lost update), đảm bảo tính đúng đắn và đáng tin cậy của dữ liệu
  4. Hiệu suất và tối ưu hóa tài nguyên: Locks được thực hiện ở mức thấp nhất có thể cho mỗi câu lệnh, giúp tối ưu hóa tài nguyên hệ thống và cải thiện hiệu suất của cơ sở dữ liệu Oracle. Locks chỉ được áp dụng khi cần thiết và không leo thang, giúp tránh tình trạng trì hoãn không cần thiết và tăng tốc độ xử lý dữ liệu.

Tóm lại, chức năng locks trong cơ sở dữ liệu Oracle đóng vai trò quan trọng trong việc ngăn chặn xung đột dữ liệu, bảo vệ tính nhất quán, đồng bộ hóa và kiểm soát truy cập, cũng như tối ưu hóa hiệu suất và tài nguyên của cơ sở dữ liệu.

Lưu ý: Có nhiều loại khóa được sử dụng bởi máy chủ Oracle để duy trì tính nhất quán nội bộ. Trong bài blog này, bạn sẽ tập trung chỉ vào khóa được sử dụng để bảo vệ các hàng và bảng.

Locking mechainsm trong oracle là gì?

Locking mechanism là một chức năng được thiết kế trong Oracle Database nhằm đảm bảo mức độ đồng thời dữ liệu cao nhất có thể trong hệ thống. Thay vì sử dụng khóa cấp block hoặc khóa cấp bảng, các giao dịch thay đổi dữ liệu sẽ sử dụng row-level locks (khóa cấp hàng).

Đồng thời, khi có các thay đổi đối tượng như di chuyển bảng, object-level locks (khóa cấp đối tượng) sẽ được sử dụng thay vì khóa toàn bộ cơ sở dữ liệu hoặc schema.

Truy vấn dữ liệu không yêu cầu khóa và có thể thành công ngay cả khi có người khác đã khóa dữ liệu đó. Kết quả của truy vấn sẽ hiển thị giá trị ban đầu, trước khi bị khóa, được tái tạo từ thông tin undo.

Trong trường hợp nhiều giao dịch cần khóa cùng một tài nguyên, giao dịch đầu tiên yêu cầu khóa sẽ nhận được khóa, trong khi các giao dịch khác phải chờ đợi cho đến khi giao dịch đầu tiên hoàn thành. Cơ chế hàng đợi là tự động và không đòi hỏi sự tương tác từ quản trị viên.

Tất cả các khóa sẽ được giải phóng khi các giao dịch hoàn thành bằng cách thực hiện COMMIT hoặc ROLLBACK. Trong trường hợp giao dịch thất bại, quá trình nền sẽ tự động hoàn tác các thay đổi từ giao dịch thất bại và giải phóng tất cả các khóa được giữ bởi giao dịch đó.

Data concurrency trong Oracle là gì?

lock-du-lieu-trong-oracle

Data concurrency trong Oracle là gì?

Data concurrency trong Oracle là khả năng cho phép nhiều phiên làm việc hoặc giao dịch truy cập và cập nhật dữ liệu đồng thời mà không gây xung đột hoặc mất mát dữ liệu.

Oracle Database cung cấp cơ chế khóa mặc định là khóa cấp hàng (row-level locks), cho phép các giao dịch khác nhau cập nhật các hàng khác nhau trong cùng một bảng mà không ảnh hưởng lẫn nhau.

Tuy nhiên, Oracle cũng hỗ trợ khóa thủ công ở mức cao hơn nếu cần thiết. Bằng cách sử dụng câu lệnh "LOCK TABLE" với chế độ khóa như "EXCLUSIVE MODE", một giao dịch có thể yêu cầu khóa độc quyền trên một bảng. Trong trường hợp này, các giao dịch khác phải đợi cho đến khi giao dịch yêu cầu khóa hoàn thành.

Oracle cung cấp các chế độ khóa khác nhau như "ROW SHARE", "ROW EXCLUSIVE", "SHARE" và "SHARE ROW EXCLUSIVE". Chế độ khóa "EXCLUSIVE" là chế độ khóa nghiêm ngặt nhất, ngăn chặn mọi hoạt động khác trên bảng đã khóa.

Các chế độ khóa khác như "ROW SHARE" cho phép truy cập đồng thời, "SHARE" cho phép truy vấn đồng thời nhưng ngăn cập nhật, và "SHARE ROW EXCLUSIVE" cho phép truy vấn bảng hoàn chỉnh và cản trở các khóa khác.

Các câu lệnh khóa thủ công trong Oracle chờ cho đến khi tất cả các phiên làm việc khác có khóa đã được giải phóng hoặc yêu cầu khóa trước đó. Tùy chọn "NOWAIT" có thể được sử dụng để trả về quyền điều khiển ngay lập tức nếu bảng đã khóa bởi phiên làm việc khác.

Tuy nhiên, Oracle khuyến nghị tránh sử dụng khóa thủ công và ưu tiên sử dụng cơ chế khóa tự động. Cơ chế khóa tự động cung cấp tính đồng thời dữ liệu cần thiết cho hầu hết các ứng dụng, và việc sử dụng khóa thủ công có thể gây ra vấn đề hiệu suất do mức độ khóa không cần thiết cao.

Thực hành:

Ví dụ về việc sử dụng tùy chọn "NOWAIT" để trả về quyền điều khiển ngay lập tức khi bảng đã bị khóa bởi phiên làm việc khác:

Giả sử chúng ta có hai phiên làm việc đồng thời truy cập vào bảng "orders" trong cơ sở dữ liệu Oracle. Phiên làm việc 1 đang thực hiện một giao dịch cập nhật trên bảng này, trong khi phiên làm việc 2 muốn thực hiện một giao dịch tương tự trên cùng bảng.

Phiên làm việc 1:

```sql
SQL> BEGIN
     2                 UPDATE orders SET status = 'Processed' WHERE order_id = 123;
    3                  COMMIT;
    4     END;
    5 /
```

Phiên làm việc 2 muốn thực hiện một giao dịch cập nhật trên bảng "orders". Tuy nhiên, nếu bảng đã bị khóa bởi phiên làm việc 1, chúng ta có thể sử dụng tùy chọn "NOWAIT" để trả về quyền điều khiển ngay lập tức.

```sql
SQL> BEGIN
     2                  UPDATE orders SET status = 'Shipped' WHERE order_id = 456 NOWAIT;
     3                  COMMIT;
     4 EXCEPTION
     5        WHEN OTHERS THEN
     6                  DBMS_OUTPUT.PUT_LINE('Cannot update the table at the moment.');
     7 END;
     8 /
```

Trong trường hợp bảng "orders" đã bị khóa bởi phiên làm việc 1, tùy chọn "NOWAIT" sẽ ngay lập tức trả về một ngoại lệ và hiển thị thông báo "Cannot update the table at the moment." Bằng cách này, phiên làm việc 2 sẽ không bị chờ đợi và có thể xử lý logic xử lý thích hợp, chẳng hạn thông báo cho người dùng biết rằng họ không thể thực hiện thao tác cập nhật ngay lúc này.

Việc sử dụng tùy chọn "NOWAIT" giúp tránh tình huống phiên làm việc phải chờ đợi lâu và tăng tính đồng thời trong hệ thống cơ sở dữ liệu.

DML Locks dữ liệu trong Oracle Database là gì?

lock-du-lieu-trong-oracle

DML Locks dữ liệu trong Oracle Database là gì?

DML Locks (Data Manipulation Language Locks) trong Oracle Database là các khóa được áp dụng để bảo đảm tính nhất quán và an toàn của dữ liệu trong quá trình thực hiện các thao tác DML như INSERT, UPDATE và DELETE.

Khi một giao dịch thực hiện một thao tác DML trên một bảng, Oracle Database sẽ áp dụng DML Locks để đảm bảo rằng dữ liệu đang được truy cập và thay đổi không bị xung đột với các giao dịch khác đang thực hiện các thao tác tương tự. Các DML Locks giúp đồng bộ hóa và kiểm soát quyền truy cập vào các hàng và trang dữ liệu.

Có ba loại DML Locks chính trong Oracle Database

  1. Row Locks (Khóa cấp hàng): Khóa được áp dụng lên từng hàng dữ liệu trong bảng. Khi một giao dịch thực hiện thao tác DML trên một hàng, một row lock sẽ được áp dụng lên hàng đó, ngăn các giao dịch khác cập nhật hoặc xóa hàng đó cho đến khi row lock được giải phóng.
  2. Table Locks (Khóa cấp bảng): Khóa được áp dụng lên toàn bộ bảng. Khi một giao dịch thực hiện thao tác DML trên một bảng, một table lock sẽ được áp dụng lên bảng đó, ngăn các giao dịch khác thực hiện bất kỳ thao tác DML nào trên bảng đó cho đến khi table lock được giải phóng. Table locks có mức độ khóa lớn hơn row locks và có thể gây hiệu suất kém nếu nhiều giao dịch cần truy cập cùng một bảng.
  3. Transaction Locks (Khóa cấp giao dịch): Khóa được áp dụng lên toàn bộ giao dịch. Khi một giao dịch bắt đầu, một transaction lock sẽ được áp dụng lên giao dịch đó, ngăn các giao dịch khác xâm nhập và thực hiện thay đổi trong giao dịch đó cho đến khi transaction lock được giải phóng.

DML Locks đảm bảo tính nhất quán và an toàn của dữ liệu trong Oracle Database bằng cách đồng bộ hóa quyền truy cập và thay đổi dữ liệu giữa các giao dịch đồng thời.

Tuy nhiên, việc sử dụng quá nhiều khóa có thể ảnh hưởng đến hiệu suất của hệ thống, vì vậy cần xem xét và tối ưu hóa việc áp dụng DML Locks trong các ứng dụng cụ thể.

Ví dụ về ba loại DML Locks trong Oracle Database

  1. Row Locks (Khóa cấp hàng):
    Giả sử có bảng "Employees" với các cột "EmployeeID" và "Salary". Hai giao dịch A và B cùng cố gắng thay đổi mức lương của nhân viên có EmployeeID là 100. Giao dịch A đã khóa hàng đó và đang thực hiện thay đổi.

    Khi giao dịch B cố gắng thực hiện thay đổi mức lương cho nhân viên này, row lock sẽ được áp dụng và giao dịch B sẽ phải đợi cho đến khi row lock được giải phóng bởi giao dịch A.
  2. Table Locks (Khóa cấp bảng):
    Giả sử có bảng "Products" với các cột "ProductID" và "Quantity". Giao dịch A đang thực hiện việc thay đổi số lượng của một sản phẩm trong bảng "Products".

    Trong khi đó, giao dịch B cố gắng thêm một sản phẩm mới vào bảng này. Vì giao dịch A đã khóa toàn bộ bảng bằng table lock, giao dịch B sẽ phải đợi cho đến khi table lock được giải phóng để thực hiện thao tác của mình.
  3. Transaction Locks (Khóa cấp giao dịch):
    Giả sử có hai giao dịch A và B đang chạy song song trên cùng một cơ sở dữ liệu. Giao dịch A đã bắt đầu và đang thực hiện nhiều thao tác DML khác nhau, trong khi giao dịch B cố gắng thực hiện một giao dịch lớn hơn.

    Khi giao dịch A đã bắt đầu, transaction lock sẽ được áp dụng trên giao dịch đó, ngăn giao dịch B can thiệp vào và thực hiện các thay đổi trong giao dịch của mình cho đến khi transaction lock được giải phóng.

Các ví dụ trên giải thích cách DML Locks đảm bảo tính nhất quán và an toàn của dữ liệu bằng cách ngăn chặn xung đột giữa các giao dịch trong quá trình thực hiện các thao tác DML trên cơ sở dữ liệu.

Các chức năng lock trong Oracle Database được tự động thực thi bởi hệ thống. Khi bạn thực hiện các thao tác DML (Data Manipulation Language) như INSERT, UPDATE, DELETE trên cơ sở dữ liệu, Oracle Database sẽ áp dụng các loại lock tương ứng để đảm bảo tính nhất quán và an toàn của dữ liệu.

Hệ thống Oracle sử dụng mô hình khóa hỗn hợp (hybrid locking) để quản lý và thực thi các loại lock. Điều này có nghĩa là nó sẽ tự động áp dụng các loại lock phù hợp dựa trên yêu cầu và tình huống cụ thể của giao dịch và truy vấn dữ liệu.

Cơ chế khóa tự động của Oracle cung cấp tính đồng thời dữ liệu cần thiết cho hầu hết các ứng dụng mà không yêu cầu sự tương tác từ người quản trị hệ thống. Hệ thống tự động áp dụng và giải phóng các lock khi các giao dịch hoàn thành (khi thực hiện COMMIT hoặc ROLLBACK) hoặc khi xảy ra lỗi và quá trình nền tự động hoàn tác các thay đổi từ giao dịch thất bại.

Tuy nhiên, trong một số trường hợp đặc biệt, bạn cũng có thể sử dụng các câu lệnh khóa thủ công như LOCK TABLE để kiểm soát rõ ràng quá trình khóa và giải phóng lock trong các tình huống cụ thể.

Enqueu mechainsm trong oracle database là gì?

lock-du-lieu-trong-oracle

Enqueu mechainsm trong oracle database là gì?

Enqueue mechanism trong Oracle Database là một cơ chế hệ thống để quản lý và đồng bộ hóa truy cập đến các tài nguyên chia sẻ, như các đối tượng, khóa, lệnh SQL và các hoạt động khác. Nó giúp đảm bảo tính nhất quán và an toàn của dữ liệu trong môi trường đa người dùng.

Enqueue mechanism hoạt động dựa trên nguyên tắc của hàng đợi (queue) và khóa (lock). Khi một phiên làm việc cần truy cập đến một tài nguyên được bảo vệ, nó phải yêu cầu một enqueue (vào hàng đợi) trước khi có quyền truy cập.

Enqueue mechanism sẽ quản lý các enqueue và đảm bảo rằng một phiên làm việc chỉ nhận được quyền truy cập vào tài nguyên khi không có phiên làm việc khác đang sử dụng hoặc thay đổi nó.

Có nhiều loại enqueue trong Oracle Database, bao gồm:

  1. TX enqueue: Được sử dụng để quản lý và đồng bộ hóa các hoạt động giao dịch, bao gồm COMMIT và ROLLBACK. Một phiên làm việc cần có TX enqueue trước khi thực hiện các hoạt động giao dịch để đảm bảo tính nhất quán của dữ liệu.
  2. TM enqueue: Được sử dụng để quản lý và đồng bộ hóa truy cập đến các đối tượng trong cơ sở dữ liệu, chẳng hạn như bảng, chỉ mục và các đối tượng khác. Một phiên làm việc cần có TM enqueue trước khi thực hiện các hoạt động trên các đối tượng này để ngăn chặn xung đột và đảm bảo tính nhất quán của dữ liệu.
  3. TX - Row Lock enqueue: Được sử dụng để quản lý và đồng bộ hóa việc khóa các hàng dữ liệu trong quá trình thực hiện các thao tác DML (INSERT, UPDATE, DELETE). Một phiên làm việc cần có TX - Row Lock enqueue trước khi khóa một hàng dữ liệu để đảm bảo rằng không có phiên làm việc khác có thể thay đổi hoặc truy cập vào hàng đó trong khi nó đang được khóa.

Enqueue mechanism đóng vai trò quan trọng trong việc đảm bảo tính nhất quán và an toàn của dữ liệu trong Oracle Database. Nó được quản lý và tự động thực thi bởi hệ thống, nhưng cũng có thể được điều chỉnh và kiểm soát bằng cách sử dụng các cơ chế và lệnh hệ thống của Oracle.

Xung đột khóa - Locks conflict

lock-du-lieu-trong-oracle

Xung đột khóa - Locks conflict

Xung đột khóa xảy ra thường xuyên nhưng thường được giải quyết thông qua thời gian và cơ chế enqueue. Trong một số trường hợp hiếm, một xung đột khóa có thể yêu cầu sự can thiệp của quản trị viên hệ thống.

Trong ví dụ trên, giao dịch 2 nhận được một khóa trên một hàng duy nhất vào lúc 9:00:00 và không commit, để lại khóa đó. Giao dịch 1 cố gắng cập nhật toàn bộ bảng, yêu cầu khóa trên tất cả các hàng, vào lúc 9:00:05. Giao dịch 1 bị chặn bởi giao dịch 2 cho đến khi giao dịch 2 commit vào lúc 16:30:01.

 Người dùng cố gắng thực hiện giao dịch 1 hầu như chắc chắn sẽ liên hệ với quản trị viên để được giúp đỡ trong trường hợp này, và người quản trị cơ sở dữ liệu (DBA) sẽ phải phát hiện và giải quyết xung đột.

Nguyên nhân có thể xãy ra xung đột khóa - Possible cause of locks conflicts

Nguyên nhân phổ biến nhất gây ra xung đột khóa là sự thay đổi chưa được commit, nhưng còn một số nguyên nhân khác có thể gây ra xung đột:

  • Giao dịch kéo dài: Nhiều ứng dụng sử dụng quá trình xử lý hàng loạt để thực hiện các cập nhật hàng loạt.

    Những công việc hàng loạt này thường được lên lịch trong các khoảng thời gian ít hoặc không có hoạt động người dùng, nhưng trong một số trường hợp, chúng có thể chưa hoàn thành hoặc mất quá nhiều thời gian để chạy trong khoảng thời gian ít hoạt động. Xung đột khóa thường xảy ra khi giao dịch và quá trình xử lý hàng loạt được thực hiện đồng thời.

  • Mức độ khóa không cần thiết cao: Không phải tất cả các cơ sở dữ liệu đều hỗ trợ khóa cấp hàng (Oracle đã thêm hỗ trợ khóa cấp hàng vào năm 1988 với phiên bản 6). Một số cơ sở dữ liệu vẫn khóa cấp trang hoặc cấp bảng.

    Nhà phát triển viết ứng dụng được thiết kế để chạy trên nhiều cơ sở dữ liệu khác nhau thường viết ứng dụng của họ với mức độ khóa cao nhân tạo để Oracle Database hoạt động tương tự như các hệ thống cơ sở dữ liệu ít khả năng hơn này.

    Nhà phát triển mới sử dụng Oracle cũng đôi khi viết mã với mức độ khóa cao hơn không cần thiết so với yêu cầu của Oracle Database.

Làm thế nào phát hiện xung đột khóa

Để xác định các xung đột khóa, bạn có thể sử dụng trang "Blocking Sessions" trong Enterprise Manager Cloud Control. Trang này hiển thị các yêu cầu khóa xung đột theo cấu trúc phân cấp, với phiên làm việc nắm giữ khóa hiển thị ở phía trên và các phiên làm việc đang đợi khóa hiển thị bên dưới.

Đối với mỗi phiên liên quan đến xung đột, bạn sẽ được cung cấp tên người dùng, ID phiên và thời gian đợi của phiên. Bạn cũng có thể điều chỉnh xuống SQL ID để xem các câu lệnh SQL đang được thực thi hoặc yêu cầu bởi phiên đó.

Dưới đây là một ví dụ truy vấn SQL để xác định các phiên đang gặp xung đột khóa:

SELECT blocking_session, sid, serial#, username, machine, program
FROM v$session
WHERE blocking_session IS NOT NULL;

Truy vấn trên sử dụng bảng v$session để lấy thông tin về các phiên đang gặp xung đột khóa. Cột blocking_session chứa ID phiên của phiên đang chặn. Bằng cách truy vấn các phiên có giá trị blocking_session khác NULL, bạn sẽ nhận được danh sách các phiên đang gặp xung đột.

Kết quả truy vấn sẽ cung cấp các thông tin như ID phiên (sid), số serial (serial#), tên người dùng (username), máy tính (machine) và chương trình (program) của các phiên đang gặp xung đột khóa. Bạn có thể sử dụng các thông tin này để phân tích và xử lý xung đột phiên.

Ngoài ra, Automatic Database Diagnostic Monitor (ADDM) cũng tự động phát hiện các xung đột khóa và có thể cung cấp lời khuyên về cách khóa không hiệu quả.

Làm thế nào giải quyết xung đột khóa

Để giải quyết xung đột khóa, phiên nắm giữ khóa đó cần phải thả nó. Cách tốt nhất để phiên thả khóa là liên hệ với người dùng và yêu cầu hoàn thành giao dịch. Trong tình huống khẩn cấp, người quản trị viên có thể kết thúc phiên đang nắm giữ khóa.

Tuy nhiên, cần lưu ý rằng khi một phiên bị kết thúc, tất cả công việc trong giao dịch hiện tại sẽ bị mất (rollback). Người dùng có phiên bị kết thúc sẽ phải đăng nhập lại và làm lại toàn bộ công việc từ lần commit cuối cùng của phiên bị kết thúc.

Người dùng sẽ gặp phải lỗi ORA-03135: mất kết nối liên lạc khi họ cố gắng thực hiện một câu lệnh SQL trong trường hợp phiên của họ bị kết thúc.

Lưu ý: PMON (Process Monitor) có thể tự động kết thúc các phiên vì thời gian chờ không hoạt động. Điều này có thể được thực hiện bằng cách sử dụng các hồ sơ hoặc Bộ quản lý nguồn (Resource Manager).

Giải quyết xung đột khóa bằng câu lệnh SQL

lock-du-lieu-trong-oracle

Giải quyết xung đột khóa bằng câu lệnh SQL

Bạn cũng có thể thao tác với phiên bằng cách sử dụng các câu lệnh SQL. Bảng V$SESSION chứa thông tin về tất cả các phiên đã kết nối. Trường BLOCKING_SESSION chứa ID phiên của phiên đang chặn. Nếu bạn truy vấn theo SIDSERIAL# (trong đó SID khớp với ID của phiên đang chặn), bạn sẽ có đủ thông tin để thực hiện việc chấm dứt phiên đó.

Lưu ý: Bạn có thể sử dụng Quản lý Tài nguyên Cơ sở dữ liệu để tự động đăng xuất các phiên đang chặn người khác và không hoạt động.

Deadlocks trong Oracle Database

lock-du-lieu-trong-oracle

Deadlocks trong Oracle Database

Một tình trạng "deadlock" là một ví dụ đặc biệt của xung đột khóa. Deadlock xảy ra khi hai hoặc nhiều phiên chờ dữ liệu đã bị khóa bởi các phiên khác. Vì mỗi phiên đang chờ phiên khác, không ai có thể hoàn thành giao dịch của mình để giải quyết xung đột.

Oracle Database tự động phát hiện deadlock và chấm dứt câu lệnh với một lỗi. Phản ứng đúng với lỗi đó là tiến hành commit hoặc rollback, để giải phóng bất kỳ khóa nào khác trong phiên đó để phiên khác có thể tiếp tục giao dịch của mình.

Trong ví dụ trên, giao dịch 1 phải thực hiện commit hoặc rollback để phản ứng với lỗi deadlock đã được phát hiện. Nếu nó thực hiện commit, nó phải gửi lại câu lệnh cập nhật thứ hai để hoàn thành giao dịch của mình. Nếu nó thực hiện rollback, nó phải gửi lại cả hai câu lệnh để hoàn thành giao dịch của mình.

Chia sẽ bài viết này

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

Qui Truong

Thông tin tác giả:

Xin chào mọi người, mình là Qui Trương. Hiện tại, ngoài công việc là một DBA thì mình còn là một người sáng tạo nội dung trên trang blog caitrang.com. Mỗi ngày, mình luôn tìm kiếm cách để chia sẻ những nội dung độc đáo, ý nghĩa và mang tính cảm hứng tới mọi người. Mình tin rằng qua từng dòng viết, mình có thể kết nối và tạo dựng một cộng đồng đọc giả thú vị và ý nghĩa.

Page [tcb_pagination_current_page] of [tcb_pagination_total_pages]

>