CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.
Bài đăng blog CFSDN DBA_2PC_PENDING này được tác giả thu thập và biên soạn. Nếu bạn quan tâm đến bài viết này, vui lòng thích nó.
DBA_2PC_ĐANG CHỜ .
Oracle sẽ tự động xử lý các giao dịch phân tán để đảm bảo tính nhất quán của các giao dịch phân tán và tất cả các trang web sẽ cam kết hoặc hủy bỏ. Thông thường, quá trình xử lý được hoàn tất trong thời gian ngắn đến mức không thể nhận thấy được. Tuy nhiên, nếu kết nối bị gián đoạn hoặc trang web cơ sở dữ liệu bị sập trong quá trình cam kết hoặc khôi phục, hoạt động cam kết có thể không thể tiếp tục. Trong trường hợp này, DBA_2PC_PENDING và DBA_2PC_NEIGHBORS sẽ chứa các giao dịch phân tán chưa được giải quyết.
Trong hầu hết các trường hợp, khi kết nối được khôi phục hoặc cơ sở dữ liệu bị sập được khởi động lại, giao dịch phân tán sẽ tự động được giải quyết mà không cần can thiệp thủ công. Các thao tác thủ công chỉ được sử dụng để duy trì các giao dịch phân tán khi các đối tượng bị khóa bởi các giao dịch phân tán cần được truy cập khẩn cấp, các phân đoạn khôi phục bị khóa ngăn cản việc sử dụng các giao dịch khác và việc khôi phục lỗi mạng hoặc cơ sở dữ liệu bị sập mất nhiều thời gian.
Việc ép buộc commit hoặc rollback thủ công sẽ mất đi tính năng commit hai cấp và Oracle không còn có thể đảm bảo tính nhất quán của giao dịch. Tính nhất quán của giao dịch phải được đảm bảo bởi người vận hành thủ công.
Đối với các giao dịch phân tán, đặt tên cho các giao dịch là một thói quen tốt. Hơn nữa, trong quá trình thực hiện giao dịch, bạn có thể sử dụng câu lệnh ALTERSESSIONADVISECOMMIT(ROLLBACK); để cung cấp thông tin tham chiếu nhằm giải quyết thủ công các giao dịch phân tán.
Khi giải quyết thủ công các giao dịch phân tán có xung đột, chẳng hạn như một trang web cam kết và một trang web khác thực hiện ROLLBACK, các bản ghi trong DBA_2PC_PENDING sẽ không bị xóa và phải được xóa bằng quy trình DBMS_TRANSACTION.PURGE_MIXED.
Nếu cơ sở dữ liệu bị sập phải được xây dựng lại hoặc không thể khởi động lại, các bản ghi trong DBA_2PC_PENDING không thể tự động xóa và phải được xóa bằng quy trình DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY.
Trong Oracle9i, khi sử dụng hai thủ tục trên, bạn phải ở chế độ UNDO_MANAGEMENT=MANUAL. Oracle không ghi lại hạn chế này. Nói chung, chế độ AUTO được sử dụng khi sử dụng 9i (Oracle cũng khuyến nghị chế độ này). Nói cách khác, nếu bạn muốn xóa thông tin trong DBA_2PC_PENDING, bạn phải khởi động lại cơ sở dữ liệu hai lần. Tôi cảm thấy rằng hai quy trình này không hữu ích lắm.
Khi xảy ra giao dịch phân tán không thể giải quyết, bảng liên quan đến giao dịch phân tán có thể bị khóa. Vì Oracle không thể xác định dữ liệu nào đã được gửi và dữ liệu nào chưa được gửi nên không thể xác định tập kết quả hiển thị cho thao tác truy vấn. Do đó, ngay cả thao tác truy vấn cũng không thể thực hiện trên bảng.
Sử dụng ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY để ngăn Oracle tự động giải quyết các giao dịch phân tán, ngay cả khi kết nối mạng được khôi phục hoặc cơ sở dữ liệu CRASH được khởi động lại. ALTERSYSTEMENABLEDISTRIBUTEDRECOVERY tự động giải quyết các giao dịch phân tán.
Để đảm bảo đồng bộ hóa SCN giữa các cơ sở dữ liệu, có thể sử dụng hai phương pháp: trước khi truy vấn dữ liệu, thực hiện SELECT * FROM DUAL @ REMOTE hoặc xác nhận hoặc hoàn nguyên giao dịch hiện tại trước khi thực hiện truy vấn.
Cuối cùng, bài viết này về phần giới thiệu DBA_2PC_PENDING kết thúc tại đây. Nếu bạn muốn biết thêm về phần giới thiệu DBA_2PC_PENDING, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!