2019年7月のSQL Server 2008/2008 R2の延長サポート終了に伴い、EOS対応としてアップグレードやマイグレーションを準備/実施している方も多いでしょう。「前編」となる今回は、SQL Serverのマイグレーションに必要な作業ステップについて解説します。
本稿は、SQL Serverのデータベースを新しいSQL Serverにマイグレーションする際、「どのような内容を検討する必要があるのか?」「どのようなツールを利用できるのか?」といった疑問の解決に役立つ情報をまとめたものです。
SQL Server 2008/2008 R2のEOS(End Of Support:サポート終了)だけでなく、それ以外のバージョンからマイグレーションする際にも利用できる内容になっています。
「前編」となる今回は、「SQL Serverのマイグレーション」に必要な作業ステップを解説します(以降、「マイグレーション」と記載した場合は、新バージョンのSQL Serverへの移行を表します)。
SQL Serverをマイグレーションする際、一般的には以下のような作業が必要になります(図1)。
それでは、各ステップで検討の必要がある内容について見ていきましょう。
最初に「マイグレーションにより発生する問題点の調査/把握」を行いましょう。環境を変更することでどのような影響があり、どのような作業が必要となるか、全体像を把握することが今後の作業計画を立てる上で重要となります。アセスメントでは、最低限、次のような内容を調査する必要があります。
SQL Serverのバージョンアップにより、動作に大きく影響を与える設定として「データベース互換性レベル」があります(画面1)。SQL Serverでは、データベース互換性レベルにより、データベース単位で特定のバージョンのSQL Serverと互換性のあるクエリの動作を行うようにすることができます。
データベース互換性レベルを利用することで、最新バージョンのSQL Serverでも、サポートされている互換性レベルの範囲で旧バージョンのSQL Serverの動作に近づけることができます。
EOSを迎えるSQL Server 2008/R2では、次の互換性レベルをサポートしています(表1)。
SQL Server 2008/2008 R2がサポートする互換性レベル | |
---|---|
100(SQL Server 2008/2008 R2) | |
90(SQL Server 2005) | |
80(SQL Server 2000) | |
表1 SQL Server 2008/2008 R2がサポートする互換性レベル |
本稿執筆時点で、バージョンアップ時の移行先として検討される可能性の高いSQL Server 2016/2017では、次の互換性レベルをサポートしています(表2)。
SQL Server 2016がサポートする互換性レベル | SQL Server 2017がサポートする互換性レベル | |
---|---|---|
130(SQL Server 2016) | 140(SQL Server 2017) | |
120(SQL Server 2014) | 130(SQL Server 2016) | |
110(SQL Server 2012) | 120(SQL Server 2014) | |
100(SQL Server 2008/2008 R2) | 110(SQL Server 2012) | |
― | 100(SQL Server 2008/2008 R2) | |
表2 SQL Server 2016/2017がサポートする互換性レベル |
SQL Server 2016/2017では、SQL Server 2005以降のユーザーデータベースのバックアップをリストアしたり、デタッチしたデータベースのファイルをアタッチしたりできるようになっています。これらは、異なる環境にデータベースを移行する際に一般的に使用する方法であり、バージョンアップを伴うマイグレーション目的でも利用できます。
SQL Server 2008/2008 R2では互換性レベル「90」「80」を使用できましたが、これらの互換性レベルに関しては、新しいバージョンのSQL Serverではサポートされていません。
それでは、SQL Server 2008 R2で互換性レベル80(SQL Server 2000)を使用しているデータベースを、SQL Server 2017にバックアップ/リストアで移行するとどうなるでしょうか。SQL Server 2008 R2で取得したバックアップは、SQL Server 2017にリストアすることができます。しかし、互換性レベル80は、SQL Server 2017ではサポートされていません。
サポートされていない互換性レベルのデータベースをリストア/アタッチした場合は、移行先でサポートされている互換性レベルの最も低いバージョンに自動的に変更されます。上記の例では、SQL Server 2017に移行後は、移行前のデータベースでは互換性レベルが80だったものが、100に変更された状態となります。
このように互換性レベルが変更されると、クエリの互換性も変わるため、一部のクエリが実行できない可能性が考えられます。有名なものとしては、“「*=」「=*」による結合は互換性レベル90以上ではサポートされていない”があり、データベースの互換性レベルを変更することで、このようなクエリの互換性の問題が発生する可能性があります。
データベースの移行方法によっては、互換性レベルの初期状態が異なる可能性があるので、「マイグレーション後にどの互換性レベルが使用される設定となっているか?」については注意しておきましょう。
クエリの動作については、前項で紹介した互換性レベルの設定を使用することで、下位互換性を持たせることができます。
しかし、以前は使用できていた機能が、バージョンアップした環境では廃止された機能となっている場合は、バージョンアップ後に互換性レベルを下位バージョンに変更しても利用することができません。
アセスメントでは、クエリの互換性だけでなく、新バージョンで廃止される機能を使っていないかどうかを調査する必要もあります。バージョンアップで変更される機能については、以下の情報が公開されていますので確認してください。
「今後のバージョンでは非推奨の機能」については、現在のバージョンでも利用できます。しかし、ドキュメントには、該当の機能はメンテナンス状態となっており、新しい変更は行われず、今後のリリースでも可能な限り、非推奨機能の利用を継続できるように努めているが、将来的な機能拡張を制限するような場合は、廃止する可能性があることが記載されています。
マイグレーションの実施に時間的な余裕がある場合は、今後を見据え、非推奨の機能を改修し、最新の機能を利用するように変更することができるかどうかも検討してください。
Copyright © ITmedia, Inc. All Rights Reserved.