#sql #sql-server #tsql #compatibility-level
#sql #sql-сервер #tsql #уровень совместимости
Вопрос:
В настоящее время мы обновляем несколько экземпляров SQL Server с SQL Server 2008 R2 до SQL Server 2012.
Это временное решение (поскольку скоро появится поддержка Microsoft EOL для 2008 R2).
Я заметил, что после обновления для всех системных баз данных, КРОМЕ master, устанавливается значение new compatibility_level
(110).
Кто-нибудь знает, почему [master]
не получает new compatibility_level
в рамках обновления?
Я знаю, что могу установить его вручную, но интересно, почему он не установлен по умолчанию в качестве другой системной базы данных.
Спасибо,
Ответ №1:
Из документации SQL Server 2017, однако, такое же поведение можно наблюдать и в SQL Server 2012: изменить уровень совместимости БАЗЫ ДАННЫХ (Transact-SQL)
Описанное ниже поведение ожидается для SQL Server 2017 (14.x) при подключении или восстановлении базы данных и после обновления на месте:
- Если уровень совместимости пользовательской базы данных был 100 или выше до обновления, он остается неизменным после обновления.
- Если уровень совместимости пользовательской базы данных до обновления составлял 90, в обновленной базе данных уровень совместимости устанавливается равным 100, что является самым низким поддерживаемым уровнем совместимости в SQL Server 2017 (14.x).
- Уровни совместимости баз данных tempdb, model, msdb и Resource устанавливаются на текущий уровень совместимости после обновления.
- База данных главной системы сохраняет уровень совместимости, который был у нее до обновления.
Итак, это поведение по замыслу.
Комментарии:
1. Спасибо, Алекс. Я рад видеть, что это дизайн.
2. В рамках наших усилий по минимизации рисков мы решили сохранить базы данных пользователей на старом уровне совместимости (100). Но в случае с [master] есть ли какой-либо риск изменения его на новый уровень совместимости?
3. Это обычная практика — сохранять базы данных после обновления на исходном уровне совместимости, а затем в конечном итоге переключать их все на текущий. Когда дело доходит до системных баз данных, включая master, лично я не вижу никакого риска в том, чтобы напрямую устанавливать для них текущий уровень совместимости.