Bỏ qua để tới nội dung chính
Đăng nhập với Microsoft
Đăng nhập hoặc tạo một tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

Triệu chứng

Giả sử bạn tạo Nhóm Sẵn sàng bằng cách sử dụng mệnh đề WITH DTC_SUPPORT = PER_DB trong Microsoft SQL Server. Khi bạn cố gắng thực hiện một tuyên bố SAVE TRANSACTION trong một giao dịch hoặc hệ thống lưu trữ thủ tục như sp_executesql, bạn nhận được một trong các thông báo lỗi sau đây:

Msg 627, Mức 16, Tiểu bang 0, Số Dòng
Không thể sử dụng SAVE TRANSACTION trong một giao dịch được phân phối.
Msg 12324, Cấp 16, Tiểu bang 100, Số Dòng
Các giao dịch được phân phối (DTC) không được hỗ trợ với bảng tối ưu hóa bộ nhớ.
Lỗi: 3933, Mức độ nghiêm trọng: 16, Tiểu bang: 1.
Không thể thúc đẩy giao dịch cho giao dịch được phân phối vì có một điểm lưu hiện hoạt trong giao dịch này.

Nguyên nhân

Khi một cơ sở dữ liệu trong Nhóm Luôn Bật Sẵn sàng được kích hoạt cho WITH DTC_SUPPORT = PER_DB, miễn là một giao dịch liên quan đến nhiều cơ sở dữ liệu, giao dịch đó sẽ được tăng cấp thành giao dịch MSDTC trong SQL Server 2016 SP2 và SQL Server 2017. Có những hạn chế trong giao dịch MSDTC, ví dụ: không thể sử dụng điểm lưu, không thể sử dụng bảng tối ưu hóa bộ nhớ.

Trong một số tình huống giao dịch cơ sở dữ liệu chéo xảy ra không phải vì người dùng có các giao dịch liên quan đến hai cơ sở dữ liệu người dùng, nhưng vì các giao dịch liên quan đến cơ sở dữ liệu hiện tại và cơ sở dữ liệu hệ thống (master, tempdb, mô hình, cơ sở dữ liệu tài nguyên hệ thống). Bởi vì cơ sở dữ liệu tài nguyên hệ thống thực sự là chỉ đọc, nó không phải là cần thiết để thúc đẩy để MSDTC giao dịch nếu một giao dịch chéo cơ sở dữ liệu liên quan đến cơ sở dữ liệu tài nguyên hệ thống nhưng không cơ sở dữ liệu hệ thống khác. 

Giải pháp

Bản sửa lỗi được giới thiệu trong KB này bỏ qua khuyến mãi cho giao dịch MSDTC nếu cơ sở dữ liệu tài nguyên hệ thống và cơ sở dữ liệu người dùng là một phần của Nhóm Sẵn sàng được bật cho PER_DB DTC sẽ tham gia vào một giao dịch cơ sở dữ liệu chéo trong cùng một phiên bản SQL Server.

Vì vậy, nếu nguyên nhân ban đầu của các lỗi được liệt kê ở trên là chéo cơ sở dữ liệu giao dịch liên quan đến cơ sở dữ liệu tài nguyên hệ thống, sửa lỗi này sẽ giải quyết nó. Đôi khi, người dùng có thể thấy các lỗi được liệt kê ở trên cùng với cùng một nguyên nhân cơ bản. Sau đây là danh sách các điều kiện áp dụng bản sửa lỗi này:

  • Cơ sở dữ liệu là một phần của Nhóm Luôn Sẵn sàng được bật WITH DTC_SUPPORT = PER_DB.

  • Một giao dịch cơ sở dữ liệu chéo liên quan đến cơ sở dữ liệu này và cơ sở dữ liệu tài nguyên hệ thống SQL Server bản.

  • Bên trong giao dịch cơ sở dữ liệu chéo, SAVE TRANSACTION được sử dụng hoặc tham gia vào các bảng được tối ưu hóa bộ nhớ.

Giao dịch này sẽ không thành công với các lỗi được liệt kê ở trên mà không có bản sửa lỗi này. Với bản sửa lỗi này, giao dịch đó sẽ tiếp tục.

Lưu ý: Bản sửa lỗi này khắc phục các giao dịch chéo cơ sở dữ liệu liên quan đến cơ sở dữ liệu tài nguyên hệ thống, nhưng bất kỳ giao dịch chéo cơ sở dữ liệu liên quan đến cơ sở dữ liệu người dùng và có chứa một câu lệnh SAVE TRANSACTION vẫn sẽ thất bại và phải được viết lại.

Sự cố này đã được khắc phục trong bản cập nhật tích lũy sau đây dành SQL Server:

Mỗi bản cập nhật tích lũy mới dành cho SQL Server sẽ chứa tất cả các bản cập nhật nóng và tất cả các bản sửa lỗi bảo mật được bao gồm trong bản cập nhật tích lũy trước đó. Xem các bản cập nhật tích lũy mới nhất dành cho doanh SQL Server:

Thông tin Bổ sung

Thông tin bổ sung về DTC_SUPPORT = PER_DB, bảng được tối ưu hóa bộ nhớ, SAVE TRANSACTION có thể tìm thấy ở các liên kết sau.

Các giao dịch cơ sở dữ liệu trong cùng một SQL Server thể hiện liên kết phần này https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instance
bảng tối ưu hóa bộ nhớ liên kết phần này đến https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitations nối
kết SAVE TRANSACTION phần này để https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks

https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

Trạng thái

Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".

Tham khảo

Tìm hiểu về thuật ngữ mà Microsoft sử dụng để mô tả các bản cập nhật phần mềm.

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?
Khi nhấn gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Người quản trị CNTT của bạn sẽ có thể thu thập dữ liệu này. Điều khoản về quyền riêng tư.

Cảm ơn phản hồi của bạn!

×