Поделиться через


Критические изменения в функциях компонента Database Engine в SQL Server 2008

В этом разделе описываются критические изменения компонента Database Engine. Эти изменения могут привести к сбоям в работе приложений, сценариев или функций, основанных на более ранних версиях SQL Server. Пользователи могут сталкиваться с этими проблемами при обновлениях. Дополнительные сведения см. в разделе Использование помощника по обновлению для подготовки к обновлениям.

Параметры сортировки

Функция

Описание

Новые параметры сортировки

В SQL Server 2008 были добавлены новые параметры сортировки, полностью согласованные с параметрами, предоставляемыми Windows Server 2008. Эти 80 новых параметров сортировки имеют улучшенную точность индексирования и отмечены пометками версии *_100. При выборе новых параметров сортировки для сервера или базы данных помните, что они могут не распознаваться клиентами со старыми драйверами. Нераспознанные параметры сортировки могут привести к возвращению ошибок и сбою приложения. Рассмотрите следующие решения.

  • Обновление клиентской операционной системы, что приведет к обновлению базовых параметров сортировки.

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

  • Выберите существующие параметры сортировки, соответствующие кодовой странице клиента.

Дополнительные сведения см. в разделе Установка и изменение параметров сортировки.

Среда CLR

Функция

Описание

Сборки среды CLR

При обновлении базы данных до версии SQL Server 2008, для поддержки новых типов данных автоматически устанавливается сборка Microsoft.SqlServer.Types. Правила помощника по обновлению обнаружат все пользовательские типы данных или сборки с конфликтующими именами. Помощник по обновлению посоветует переименовать все конфликтующие сборки и либо переименовать все конфликтующие типы данных, либо использовать в программном коде двухкомпонентные имена для ссылок на существующие определяемые пользователем типы данных.

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

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

Сборки среды CLR

SQL Server 2008 устанавливает платформу .NET Framework 3.5 с пакетом обновления 1 (SP1), которая обновляет библиотеки в глобальном кэше сборок. При наличии неподдерживаемых библиотек, зарегистрированных в базе данных SQL Server, приложение SQL Server может прекратить работу после обновления до версии SQL Server 2008. Это происходит вследствие того, что обслуживание или обновление библиотек в глобальном кэше сборок не обновляет сборки внутри SQL Server. Если сборка существует и в базе данных SQL Server, и в глобальном кэше сборок, то обе копии сборки должны полностью совпадать. Если они не совпадают, то при использовании сборки с интеграцией со средой SQL Server CLR возникает ошибка. Дополнительные сведения см. в разделе Поддерживаемые библиотеки платформы .NET Framework.

После обновления базы данных следует выполнить обслуживание или обновление копии сборки внутри баз данных SQL Server с помощью инструкции ALTER ASSEMBLY. Дополнительные сведения см. в статье 949080 базы знаний Майкрософт.

Чтобы определить, используется ли в приложении неподдерживаемая библиотека платформы .NET Framework, в базе данных следует выполнить следующий запрос:

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';

Подпрограммы CLR

Использование олицетворения в определяемых пользователем функциях CLR, определяемых пользователем статистических функциях CLR или определяемых пользователем типах CLR после обновления до SQL Server 2008 может вызвать завершение приложений с ошибкой 6522.

Следующие сценарии выполняются успешно в SQL Server 2005, но завершаются ошибкой в SQL Server 2008. Для каждого сценария указаны способы разрешения.

  1. Определяемая пользователем функция CLR, определяемая пользователем статистическая функция CLR или метод определяемого пользователем типа, использующие олицетворение, имеют параметр типа nvarchar(max), varchar(max), varbinary(max), ntext, text, image или определяемый пользователем тип больших значений, но при этом метод не обладает атрибутом DataAccessKind.Read.

    Чтобы устранить эту проблему, добавьте в метод атрибут DataAccessKind.Read, повторно скомпилируйте сборку и выполните повторное развертывание подпрограммы и сборки.

  2. Возвращающая табличное значение функция CLR обладает методом Init, который выполняет олицетворение.

    Чтобы устранить эту проблему, добавьте в метод атрибут DataAccessKind.Read, повторно скомпилируйте сборку и выполните повторное развертывание подпрограммы и сборки.

  3. Возвращающая табличное значение функция CLR обладает методом FillRow, который выполняет олицетворение.

    Чтобы устранить эту проблему, удалите олицетворение из метода FillRow. Не используйте метод FillRow для доступа к внешним ресурсам. Вместо этого используйте метод Init.

Динамические административные представления

Представление

Описание

sys.dm_os_sys_info

Удалены столбцы cpu_ticks_in_ms и sqlserver_start_time_cpu_ticks.

sys.dm_exec_query_resource_semaphores sys.dm_exec_query_memory_grants

Столбец resource_semaphore_id не является уникальным идентификатором в SQL Server 2008. Данное изменение может повлиять на устранение неполадок при выполнении запроса. Дополнительные сведения см. в разделе sys.dm_exec_query_resource_semaphores.

Ошибки и события

Функция

Описание

Ошибки имени входа

В SQL Server 2005 ошибка 18452 возвращается при использовании имени входа SQL для соединения с сервером, настроенным для использования проверки подлинности Windows. В SQL Server 2008 вместо этого возвращается ошибка 18456.

Showplan

Функция

Описание

Схема XML Showplan

В схему XML Showplan добавляется новый элемент SeekPredicateNew, и заключенная XSD-последовательность (SqlPredicatesType) преобразуется в элемент <xsd:choice>. Теперь вместо одного или нескольких элементов SeekPredicate в схеме XML Showplan может появиться один или несколько элементов SeekPredicateNew. Эти два элемента являются взаимоисключающими. Элемент SeekPredicate поддерживается в схеме XML Showplan для обратной совместимости. Однако планы запросов, созданные в SQL Server 2008, могут содержать элемент SeekPredicateNew. Приложения, ожидающие получения только дочернего элемента SeekPredicate из узла ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicatesShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates, могут завершиться с ошибкой в случае отсутствия элемента SeekPredicate. Необходимо переписать приложение, чтобы оно ожидало в этом узле элемент SeekPredicate или элемент SeekPredicateNew. Дополнительные сведения см. в разделе Улучшенные возможности обработки запросов для секционированных таблиц и индексов.

Схема XML Showplan

Новый атрибут IndexKind добавляется в сложный тип ObjectType схемы XML Showplan. Работа приложений, выполняющих строгую проверку планов SQL Server по отношению к схеме SQL Server 2005, будет завершаться с ошибкой.

Язык Transact-SQL

Функция

Описание

DDL-событие ALTER_AUTHORIZATION_DATABASE

Если тип сущности защищаемого объекта в операции языка описания данных DDL является объектом, то в SQL Server 2005 при срабатывании DDL-события ALTER_AUTHORIZATION_DATABASE значение 'object' возвращается в элемент ObjectType EVENTDATA XML для данного события. В SQL Server 2008 возвращается действительный тип (например, 'table' или 'function').

CONVERT

Если в функцию CONVERT передан недопустимый стиль, при преобразовании двоичного типа в символьный или символьного в двоичный возвращается ошибка. В предыдущих версиях SQL Server недопустимый стиль устанавливается на стиль по умолчанию для преобразований «двоичный в символьный» и «символьный в двоичный».

Разрешения GRANT/DENY/REVOKE EXECUTE для сборок

Для сборок разрешение EXECUTE нельзя предоставить, запретить или отменить. Это разрешение не оказывает влияния и вызывает ошибку. Вместо этого можно предоставить, запретить или отменить разрешение EXECUTE для хранимых процедур или функций, ссылающихся на метод сборки.

Разрешения GRANT/DENY/REVOKE на системные типы

Разрешения на системные типы нельзя предоставить, запретить или отменить. В предыдущих версиях SQL Server данные инструкции завершаются успешно, но не оказывают влияния. В SQL Server 2008 также возвращается ошибка.

Предложение OUTPUT

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

  • Вложенный запрос.

  • Определяемая пользователем функция, которая осуществляет или может осуществлять доступ к пользовательским или системным данным.

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

При обнаружении SQL Server такого столбца в предложении OUTPUT возвращается ошибка 4186. Дополнительные сведения см. в разделе MSSQLSERVER_4186.

Предложение OUTPUT INTO

Целевая таблица предложения OUTPUT INTO не может иметь какие-либо включенные триггеры.

Параметр уровня сервера precompute rank

Этот параметр не поддерживается в SQL Server 2008. Как можно скорее измените приложения, в настоящее время использующие эту функцию.

Табличная подсказка READPAST

Табличная подсказка READPAST не может быть указана, если параметр базы данных READ_COMMITTED_SNAPSHOT установлен в ON и выполняется одно из следующих условий.

  • Уровень изоляции транзакции сеанса имеет значение READ COMMITTED.

  • В запросе также указана табличная подсказка READCOMMITTED.

Чтобы в этих случаях указать подсказку READPAST, удалите табличную подсказку READCOMMITTED (если существует) и включите в запрос табличную подсказку READCOMMITTEDLOCK.

sp_helpuser

Изменены следующие имена столбцов, возвращаемые в результирующем наборе хранимой процедуры sp_helpuser.

Предыдущее имя столбцаНовое имя столбца
GroupNameRoleName
Group_nameRole_name
Group_idRole_id
Users_in_groupUsers_in_role

Прозрачное шифрование данных

Прозрачное шифрование данных выполняется на уровне ввода-вывода: структура страницы не шифруется в памяти и зашифровывается только при записи страницы на диск. Зашифровываются и файлы базы данных, и файлы журнала. Приложения сторонних производителей, которые обходят обычный механизм SQL Server при доступе к страницам (например, путем прямого просмотра данных или файлов журнала), будут завершены с ошибкой при использовании базой данных прозрачного шифрования данных, так как данные в файлах зашифрованы. Для таких приложений можно эффективно использовать API шифрования Window, чтобы разработать решения для расшифровки данных за пределами SQL Server.

XQuery

Функция

Описание

Поддержка типа данных datetime

В SQL Server 2005 типы данных xs:time, xs:date и xs:dateTime не поддерживают часовой пояс. Данные часового пояса сопоставляются с часовым поясом времени в формате UTC. SQL Server 2008 обеспечивает соответствующее стандартное поведение, приводящее к следующим изменениям.

  • Данные без часового пояса проходят проверку подлинности.

  • Предоставленный часовой пояс или его отсутствие сохраняются.

  • Изменяется представление внутреннего хранилища.

  • Увеличивается разрешение хранимых значений.

  • Отрицательные значения года запрещены.

Внесите изменения в приложения и выражения языка XQuery для учета новых значений типа. Дополнительные сведения см. в разделе Использование XML с типами данных time, date, datetime2 и datetimeoffset.

Выражения XQuery и Xpath

В SQL Server 2005 в выражении XQuery и XPath допускаются шаги, начинающиеся с двоеточия (:). Например, следующая инструкция содержит в пределах выражения пути проверку имени (CTR02), которая начинается с двоеточия.

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

В SQL Server 2008 такое использование не допускается, поскольку это не соответствует стандартам XML. Возвращается ошибка 9341. Удалите начальное двоеточие или укажите префикс для проверки имени, например (n$/CTR02) или (n$/p1:CTR02).

Журнал изменений

Обновления

Добавлено критическое изменение в выражениях XQuery и Xpath.