数据库恢复后如何调整兼容级别?
How to adjust Compatibility Level after database restore?
我们有几个 SQL 服务器。具有不同的版本,即 2005、2008、2012、2014。(我们计划很快从 2005 年搬走)。
很多时候,我们的 DBA 将简单地备份和恢复一个 "template" 客户端数据库,以从恢复的模板创建一个 "new" 数据库。
问题是恢复后兼容级别有时为 80(或 90)。
我们新的 SQL 脚本需要至少 90 级才能获得新的 SQL 功能。
因此,我编写了一个脚本来检查 master
数据库兼容性级别并调整该服务器上的目标客户端数据库。
DECLARE @sys_compatibility_level tinyint, @db_compatibility_level tinyint;
SELECT @sys_compatibility_level = compatibility_level
FROM sys.databases
WHERE name = 'master';
SELECT @db_compatibility_level = compatibility_level
FROM sys.databases
WHERE name = DB_NAME();
DECLARE @db_name nvarchar(128) = DB_NAME();
IF @db_compatibility_level < @sys_compatibility_level
BEGIN
-- EXEC dbo.sp_dbcmptlevel @dbname=@db_name, @new_cmptlevel=@sys_compatibility_level -- deprecated
EXEC('ALTER DATABASE ' + @db_name + ' SET COMPATIBILITY_LEVEL = ' + @sys_compatibility_level)
END
我的问题是,这种方法正确吗?我应该检查 master
数据库还是 model
数据库?盲目地将客户端数据库设置为 master/model 的数据库有什么缺点吗?
由于您正在恢复数据库,它们会保留旧的兼容性级别。新创建的数据库将继承模型数据库兼容性级别。
因此,将 restored 数据库兼容性级别更改为您希望的级别,而不是基于 model/master..
将模型数据库兼容性级别更改为您选择的级别,因此新的将继承
我们有几个 SQL 服务器。具有不同的版本,即 2005、2008、2012、2014。(我们计划很快从 2005 年搬走)。 很多时候,我们的 DBA 将简单地备份和恢复一个 "template" 客户端数据库,以从恢复的模板创建一个 "new" 数据库。
问题是恢复后兼容级别有时为 80(或 90)。 我们新的 SQL 脚本需要至少 90 级才能获得新的 SQL 功能。
因此,我编写了一个脚本来检查 master
数据库兼容性级别并调整该服务器上的目标客户端数据库。
DECLARE @sys_compatibility_level tinyint, @db_compatibility_level tinyint;
SELECT @sys_compatibility_level = compatibility_level
FROM sys.databases
WHERE name = 'master';
SELECT @db_compatibility_level = compatibility_level
FROM sys.databases
WHERE name = DB_NAME();
DECLARE @db_name nvarchar(128) = DB_NAME();
IF @db_compatibility_level < @sys_compatibility_level
BEGIN
-- EXEC dbo.sp_dbcmptlevel @dbname=@db_name, @new_cmptlevel=@sys_compatibility_level -- deprecated
EXEC('ALTER DATABASE ' + @db_name + ' SET COMPATIBILITY_LEVEL = ' + @sys_compatibility_level)
END
我的问题是,这种方法正确吗?我应该检查 master
数据库还是 model
数据库?盲目地将客户端数据库设置为 master/model 的数据库有什么缺点吗?
由于您正在恢复数据库,它们会保留旧的兼容性级别。新创建的数据库将继承模型数据库兼容性级别。
因此,将 restored 数据库兼容性级别更改为您希望的级别,而不是基于 model/master..
将模型数据库兼容性级别更改为您选择的级别,因此新的将继承