KB2878968 - KHẮC PHỤC: Hỏng chỉ mục không liên cụm có thể xảy ra khi bạn chạy câu lệnh UPDATE phức tạp cùng với gợi ý NOLOCK đối với bảng trong SQL Server

Áp dụng cho
SQL Server 2008 Service Pack 3 SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Standard SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Triệu chứng

Khi bạn chạy câu lệnh UPDATE phức tạp cùng với gợi ý NOLOCK đối với bảng trong Microsoft SQL Server 2008, SQL Server 2012, SQL Server 2008 R2 hoặc SQL Server 2014, chỉ mục không liên cụm có thể xảy ra. Ngoài ra, thông báo lỗi sau có thể được ghi nhật ký trong nhật ký lỗi SQL Server:

Lưu ý

<Ngày Giờ><> spid # Lỗi: 8646, Mức độ nghiêm trọng: 21, Tiểu bang: 1.
<Ngày Giờ><> spid # Không thể tìm thấy mục chỉ mục trong ID chỉ mục 3 của bảng 2102402659 trong cơ sở dữ liệu 'DatabaseName<>'. Chỉ mục được chỉ báo bị hỏng hoặc có vấn đề với gói cập nhật hiện tại. Chạy DBCC CHECKDB hoặc DBCC CHECKTABLE. Nếu sự cố vẫn tiếp diễn, hãy liên hệ với bộ phận hỗ trợ sản phẩm.
<Ngày:><Giờ> spid # Sử dụng 'dbghelp.dll' phiên bản '4.0.5'
<Ngày Giờ><> spid # **Chuỗi hội thoại kết xuất - spid = 0, EC = 0x0000000BD70624C0
<Ngày giờ><, spid> # ***Stack Dump đang được gửi đến Y:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\LOG\SQLDump0003.txt
<Ngày Giờ><> spid # * *******************************************************************************
<Ngày Giờ><> spid # *
<Ngày Giờ><> spid # * BEGIN STACK DUMP:
<Ngày Giờ><> spid # * <Ngày Giờ><spid>#
<Ngày Giờ><> spid # *
<Ngày Giờ><> spid # * CPerIndexMetaQS::ErrorAbort - Hỏng chỉ mục
<Ngày Giờ><> spid # *

Lưu ý: Bạn có thể áp dụng gợi ý NOLOCK cho các bảng nguồn trong một câu lệnh. Tuy nhiên, bạn không thể áp dụng gợi ý NOLOCK cho các bảng đích trong một câu lệnh.

Nguyên nhân

Sự cố này xảy ra vì gợi ý NOLOCK khiến truy vấn đọc sai các giá trị trong bảng khi truy vấn đọc các giá trị giống nhau nhiều lần.

Giải pháp

Sự cố này được khắc phục lần đầu tiên trong bản cập nhật tích lũy tiếp theo của SQL Server.

Cập nhật tích lũy 1 cho SQL Server 2014 /en-us/help/2931693

Cập nhật tích lũy 11 cho SQL Server 2012 /en-us/help/2908007

Bản cập nhật tích lũy 7 cho SQL Server 2012 SP1 /en-us/help/2894115

Cập nhật tích lũy 13 cho SQL Server 2008 SP3 /en-us/help/2880350

Bản cập nhật tích lũy 9 cho SQL Server 2008 R2 SP2 /en-us/help/2887606

Giới thiệu về các bản cập nhật tích lũy cho SQL Server

Mỗi bản cập nhật tích lũy mới dành cho SQL Server chứa tất cả các bản sửa lỗi nóng và bản sửa lỗi bảo mật được tích hợp 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 cho SQL Server:

      

Trạng thái

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