2017-01-09 7 views
1

私たちはいくつかの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をマスター/モデルのものに設定することには何らかの欠点がありますか?

答えて

1

あなたは、データベースを復元しているので、彼らは古いcompatabilty level..Newlyは、データベースを作成し維持することは、modelデータベースのcompatabiltyレベルを継承します。..

のでがオンに基づいていない、あなたが望むものにデータベースcompatabiltyレベルを復元変更それは `model` DBを持っているすべてのSQL Serverのために保証されて:あなたはとても新しいものが

+0

愚かな質問を継承し、選択したいずれかのモデル/マスター..

変更モデルデータベースcompatabiltyレベル? – zig

+0

yes、master、model、tempdbはすべてシステムデータベースであり、SQLサーバー – TheGameiswar

+0

のすべてのインスタンスに存在し、 'model'は100に設定され、復元されたdbはレベル80に設定されています。 – zig

関連する問題