Проблемы
При выполнении запроса, содержащего данные больших объектов (LOB) для загрузки в переменную Transact-SQL в Microsoft SQL Server 2008, Microsoft SQL Server 2012 или Microsoft SQL Server 2008 R2, возникает повреждение данных. Например, чтобы скопировать данные XML из столбца базы данных в XML-переменную, выполните следующий запрос: Declare @OUTXML as XMLSELECT @OUTXML = DataXml FROM Table_1 WHERE id=1 В этой ситуации инструкция SELECT выполняется, когда другие потоки пытаются обновить один и тот же столбец XML. Такое поведение может привести к повреждению данных. Кроме того, при выполнении операции чтения и записи с поврежденным XML-столбцом появляется одно из следующих сообщений об ошибке:
-
Тип данных XML поврежден.
-
Обнаружен неожиданный конец файла.
Примечания.
-
Как правило, эта проблема возникает при выполнении высокоскоростных операций загрузки.
-
При использовании агента чтения журнала для чтения поврежденных данных XML из таблицы, которая является частью списка статей публикации для репликации транзакций, появляется следующее сообщение об ошибке:
Тип данных XML поврежден. (Источник: MSSQLServer; номер ошибки: 6611)
Причина
Эта проблема возникает из-за того, что блокировка столбца данных LOB освобождается до тех пор, пока данные LOB не будут скопированы из столбца базы данных в переменную типа LOB. Любой параллельный запрос может обновлять те же данные LOB перед завершением процесса копирования во время копирования. Таким образом, возникает повреждение данных.
Решение
Сведения о накопительном пакете обновления
Накопительное обновление 7 для SQL Server 2012
Исправление для этой проблемы впервые выпущено в накопительном обновлении 7. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2012, щелкните следующий номер статьи базы знаний Майкрософт:
2823247 Накопительный пакет обновления 7 для SQL Server 2012Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2012. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2692828 Сборки SQL Server 2012, выпущенные после выпуска SQL Server 2012
Накопительное обновление 12 для SQL Server 2008 R2 с пакетом обновления 1 (SP1)
Исправление для этой проблемы впервые выпущено в накопительном обновлении 12. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2 с пакетом обновления 1 (SP1), щелкните следующий номер статьи базы знаний Майкрософт:
2828727 Накопительный пакет обновления 12 для SQL Server 2008 R2 с пакетом обновления 1 (SP1)Примечание. Поскольку сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления системы безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 R2 с пакетом обновления 1 (SP1). Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2567616 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2 с пакетом обновления 1 (SP1)
Накопительное обновление 10 для SQL Server 2008 с пакетом обновления 3 (SP3)
Исправление для этой проблемы впервые было выпущено в накопительном обновлении 10. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2008 с пакетом обновления 3 (SP3), щелкните следующий номер статьи базы знаний Майкрософт:
2814783 Накопительный пакет обновления 10 для SQL Server 2008 с пакетом обновления 3 (SP3)Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 с пакетом обновления 3 (SP3). Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2629969 Сборки SQL Server 2008, выпущенные после выпуска пакета обновления 3 (SP3) для SQL Server 2008
Накопительное обновление 5 для SQL Server 2008 R2 с пакетом обновления 2 (SP2)
Исправление для этой проблемы впервые выпущено в накопительном обновлении 5. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2 S2008 R2 с пакетом обновления 2 (SP2), щелкните следующий номер статьи базы знаний Майкрософт:
2797460 Накопительный пакет обновления 5 для SQL Server 2008 R2 S2008 R2 SP2Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в пакет исправлений для S2008 для 2008 R2 для Microsoft SQL Server, выпущенный ранее. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2730301 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2 с пакетом обновления 2 (SP2)
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".