Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Симптомы

Рассмотрим следующий сценарий:

  • Связанный сервер настроен между локальным сервером и удаленным сервером, которые имеют экземпляров Microsoft SQL Server 2012.

  • Локальный сервер настраивается с помощью параметров сортировки, такие как параметры сортировки без учета регистра.

  • Удаленный сервер имеет объекта, настроенного в другие параметры сортировки с локального сервера, такие как параметры сортировки с учетом регистра.

  • Соединение от драйвера Microsoft JDBC для SQL Server драйвер Microsoft ODBC для SQL Server, поставщик SQL OLE DB или собственного клиента SQL на локальном сервере.

  • Драйвер выполняет запрос Transact-SQL update как подготовленной инструкции, которая вызывает процедуру sp_prepexec хранятся на локальном сервере.

  • Запрос обновляет таблицу на удаленном сервере. Это включает в себя объект столбца, который использует различные параметры сортировки локального сервера.

В этом случае может наблюдаться снижение производительности выполнения запросов. При проверке плана выполнения запроса update может появиться без фильтрации, что удаленное сканирование выполняется в таблице на удаленном сервере. Таким образом запрос может выполнять много операций чтения, если он просматривает удаленную таблицу и затем извлекает все строки на локальный сервер.

Например запрос подготовлен на локальном сервере, который имеет параметры сортировки без учета регистра по умолчанию, а удаленный сервер имеет таблицы T1 , который содержит столбец, в котором учитывается регистр знаков. Обновление будет проверять все строки T1.
DECLARE @p1 INTEXEC sp_prepexec @p1 output, N'@P0 NVARCHAR(16), @P1 NVARCHAR(16)',
N'UPDATE RemoteServer.RemoteDatabase.dbo.T1 SET COL1=@P0 WHERE COL2=@P1',
N'a', N'a'
SELECT @p1

Причина

Эта проблема возникает, так как запрос на обновление подготовленных отсканирует удаленной таблицы, если параметры сортировки не соответствует на обоих серверах.

Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и все исправления безопасности, входившие в состав предыдущего накопительного обновления. Извлечь последние накопительные обновления для SQL Server:


Сведения об исправленииСуществует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте данное исправление только в тех системах, которые имеют данную проблему.

Если исправление доступно для скачивания, имеется раздел "Пакет исправлений доступен для скачивания" в верхней части этой статьи базы знаний. Если этого раздела нет, отправьте запрос в службу технической поддержки для получения исправления.

Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание посетите следующий веб-узел корпорации Майкрософт:

http://support.microsoft.com/contactus/?ws=supportПримечание. В форме "Пакет исправлений доступен для скачивания" отображаются языки, для которых доступно исправление. Если нужный язык не отображается, значит исправление для данного языка отсутствует.

Предварительные условияДля установки этого исправления необходимо установлена SQL Server 2012.

Сведения о реестреИзменение реестра после установки исправления не требуется.

Сведения о замене исправленийЭто исправление не заменяет других исправлений.


Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Временное решение

Для работы существует множество проблему, воспользуйтесь одним из следующих способов:

  • Не используйте подготовленных инструкций в исходный код приложения клиента. Можно использовать нерегламентированные инструкции или вызываемой инструкции, такие как хранимые процедуры вместо Если драйвер поддерживает эти интерфейсы.

  • Используйте соответствующие параметры сортировки на обоих серверах.

Дополнительные сведения

Чтобы включить флаг трассировки, добавьте параметр загрузки -T4199 или DBCC TRACEON(4199,-1) перед компиляцией подготовленной инструкции для включения поведения.

Чтобы включить флаг трассировки можно использовать один из следующих методов:

  • Перед запуском SQL Server используйте диспетчер конфигурации Microsoft SQL Server, щелкните правой кнопкой мыши экземпляр уязвимых и добавить параметр загрузки -T4199 , чтобы оно сохранялось перезагружается и все подключения к экземпляру в будущем.

  • Динамически включен во время выполнения, когда служба запускается, а глобально для всех подключений "(-1).» Не забудьте освободить кэша процедур, если планируется выполнение тестирования с параметром включен или выключен.

    Чтобы включить параметр используйте следующий глобально и динамически:
    DBCC TRACEON(4199,-1)DBCC TRACESTATUS(-1)
    DBCC FREEPROCCACHE
    Чтобы отключить параметр используйте следующий глобально и динамически:
    DBCC TRACEOFF(4199,-1)DBCC TRACESTATUS(-1)
    DBCC FREEPROCCACHE


Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×