web-dev-qa-db-ja.com

SQL Serverの互換性レベルを2005から2012にアップグレード

SQLServer 2012 Enterpriseの互換モードの古いデータベースは90-SQL Server 2005です。データベース互換モードを90から110-SQL Server 2012に変更した結果はどうなりますか?多くのレガシーアプリケーションはデータベースを利用します。 QA自動化ユニットと統合テストでは何も問題はありませんが、不足している可能性のある潜在的なアイテムを確認しようとしています。

下位互換性に問題があることを理解し、データベースを110から90に変更します。たとえば、新しい構文またはtempdbを適用するクエリは失敗します。

しかし、90から110までの間、どのような問題が発生する可能性がありますか?壊れる可能性のあるアイテムは何ですか?

1
user129291

マイクロソフトの以下の記事を読むのが最善です。

  • 「互換性レベル90とレベル100の違い」 ここ
  • 「下位互換性レベルとレベル110および120の違い」 ここ

発生する可能性が最も高い問題は次のとおりです。

互換性レベル90から100へ:

  • QUOTED IDENTIFIERセッション設定は、複数ステートメントのテーブル値関数が作成されるときに適用されます。
  • 現在の言語設定は、パーティション関数のdatetimeおよびsmalldatetimeリテラルを評価するために使用されます。
  • FOR BROWSE句は、INSERTおよびSELECT INTOステートメントでは使用できません。

互換性レベル100から110へ:

  • PIVOTは、再帰的共通テーブル式(CTE)クエリでは使用できません。エラーが返されます。
  • 互換性レベル110では、timeおよびdatetime2データ型のCASTおよびCONVERT操作のデフォルトスタイルは常に121です。クエリが古い動作に依存している場合は、110未満の互換性レベルを使用するか、影響を受けるクエリで0スタイルを明示的に指定します。データベースを互換性レベル110にアップグレードしても、ディスクに保存されているユーザーデータは変更されません。必要に応じて、このデータを手動で修正する必要があります。たとえば、SELECT INTOを使用して、計算列を含むソースからテーブルを作成した場合
0
Milan

しかし、90から110までの間にどのような問題が発生する可能性がありますか?壊れる可能性のあるアイテムは何ですか?

まあ、これは基本的に非常に主観的ですが、コード側から何が壊れるのかはわかりませんが、すべての重大な変更をリストアップした記事に間違いなくあなたを向けることができます。 SQL Server 2012でのデータベースエンジンの変更の破壊 を参照してください。

私の過去の経験では、データベースの互換性レベルを変更しても、データベースが完全に機能しなくなるわけではありません。互換性レベルは、特定の機能が特定の互換性レベルでどのように機能するかを定義するだけです。再び参考にするために、MSはこのような変更を ALTER DATABASE(Transact-SQL)互換性レベル に記載しています。この記事は詳細で、SQLサーバーのすべてのバージョンの詳細が含まれています

上記の2つのリンクを使用する場合、シナリオで失敗する可能性のあるものを書き留め、事前に修正する必要があります。これが完了したら、コマンドを実行するプロセスは簡単です

ALTER DATABASE database_name   
SET COMPATIBILITY_LEVEL = 110

運用時間外に実行するようにしてください。これで、何かが失敗したかどうかをテストするようユーザーに要求できます。コマンドを再度実行して互換性レベルを90に戻すことが重要です。そのため、プロセス全体にヒットと試行の方法が少し含まれています。

2
Shanky

参照しているバージョン間に導入された変更を確認する必要があります。変更のいずれかがワークロードに影響を与える場合は、それを徹底的にテストし、必要な調整を行う必要があります。コードを破壊する可能性のある構文の変更とは別に、SQLオプティマイザーやその他の機能が変更され、以前とは異なるクエリプランが生成される可能性があるため、パフォーマンスもテストする必要があります。

以下は、MSDNページに関連する互換性レベルに関するいくつかの情報へのリンクです。 [〜#〜] link [〜#〜]

1