私たちはいくつかのSQLサーバーを持っています。つまり、2005年、2008年、2012年、2014年の異なるバージョンを使用しています。 多くの場合、私たちのDBAは単に "テンプレート"クライアントデータベースをバックアップして復元し、復元されたテンプレートから "新しい"データベースを作成します。データベースの復元後に互換性レベルを調整する方法は?
復元後、互換性レベルが80(または90)になることがあるという問題があります。 新しいSQLスクリプトでは、新しいSQL機能に対して少なくとも90レベルが必要です。
したがって、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 @[email protected]_name, @[email protected]_compatibility_level -- deprecated
EXEC('ALTER DATABASE ' + @db_name + ' SET COMPATIBILITY_LEVEL = ' + @sys_compatibility_level)
END
私の質問ですが、このアプローチは正しいですか? master
dbか、おそらくmodel
dbをチェックする必要がありますか?盲目的にクライアントdbをマスター/モデルのものに設定することには何らかの欠点がありますか?
愚かな質問を継承し、選択したいずれかのモデル/マスター..
変更モデルデータベースcompatabiltyレベル? – zig
yes、master、model、tempdbはすべてシステムデータベースであり、SQLサーバー – TheGameiswar
のすべてのインスタンスに存在し、 'model'は100に設定され、復元されたdbはレベル80に設定されています。 – zig