SQL Server и уровень совместимости (compatibility level) по умолчанию

imageЕсть некоторые древние приложения, которые в процессе установки делают обращение к экземпляру SQL Server, создают там базу данных и выполняют её первоначальное наполнение. В случае, если такие приложения хотят, чтобы их база данных имела определённый уровень совместимости (compatibility level), но сами при этом не выполняют настройку этого уровня в процессе создания и инициализации БД, может возникнуть необходимость изменения уровня совместимости, используемого по умолчанию в экземпляре SQL Server. Рассмотрим пример того, как это можно "провернуть".

Предположим, у нас есть экземпляр SQL Server 2012, на котором должна быть развернута БД некоторого старого приложения, которое хочет чтобы эта БД имела уровень совместимости с SQL Server 2005. Однако при создании для новых баз в нашем случае будет назначаться уровень совместимости SQL Server 2012 (110). Попробуем сделать так, чтобы по умолчанию уровень совместимости выставлялся в SQL Server 2005 (90).

Для начала на нашем экземпляре SQL Server выполним запрос, который покажет установленный уровень совместимости для всех баз:

SELECT [name],[compatibility_level] FROM [model].[sys].[databases]

image
Как видим, уровень совместимости по умолчанию для новых баз в нашем экземпляре установлен в 110, так как он определяется уровнем базы model. Информацию о возможных уровнях совместимости на разных версиях SQL Server можно найти в онлайн-документе:
MSDN Library - Transact-SQL Reference (Database Engine) - ALTER DATABASE Compatibility Level

Соответственно, чтобы изменить уровень совместимости по умолчанию для вновь создаваемых баз до уровня SQL Server 2005, выполним запрос: 

ALTER DATABASE [model] SET compatibility_level =  90
SELECT [name],[compatibility_level] FROM [model].[sys].[databases]

Обратите внимание на то, что такой запрос изменит на указанный уровень совместимости не только базу model, но и базу tempdb
image

После этого снова запустим наше приложение создающее новую базу и убедимся в том, что теперь уровень базы установлен в SQL Server 2005 (90).

Чтобы снова вернуть изначально установленный уровень совместимости выполним запрос:

ALTER DATABASE [model] SET compatibility_level =  110

Чем такие манипуляции могут обернуться на продуктивных экземплярах SQL Server с некоторым количеством разных БД предсказывать не возьмусь Smile

Всего комментариев: 2 Комментировать

  1. Aleksandr /

    Альтернативный вариант извращения) поставить sql2005 на windows server 2012r2 как в этой статье: https://www.linkedin.com/pulse/20141124213344-99052643-how-to-successfully-install-sql-server-2005-in-windows-8

    1. Алексей Максимов / Автор записи

      Ну это уже наверно через чур.

Добавить комментарий