SQL Server 2012 CTP3 では、互換性レベルとして [80 (SQL Server 2000)] のサポートがなくなっています。
この変更が、データベースのリストア / アタッチに対してどのように影響するか軽くまとめてみたいと思います。
今回は SQL Server 2000 をインストールすると導入されている Northwind データベースを使用して検証をしています。
この投稿は CTP3 で実施していますので、RTM になった場合も同様の動作になるかの保証はありません。
予めご了承ください。
■SQL Server 2000 のデータベースをリストア
まずは、SQL Server 2000 のデータベースを SQL Server 2012 CTP3 でリストアできるかを確認してみたいと思います。
SQL Server 2000 のバックアップを SQL Server 2012 CTP3 にリストアしようとすると、以下のエラーが発生し、リストアをすることができません。
SQL Server 2000 に対しての互換性がサポート外となっているため、バックアップをリストアすることでバージョンアップをするという手法は使えなさそうですね。
■SQL Server 2000 のデータベースをアタッチ
次はデータベースのアタッチを試してみたいと思います。
SQL Server 2000 のデータベースをアタッチするとこちらもエラーになります。
先ほどとメッセージは違うのですが、互換性がないデータベースとして認識されているようですね。
SQL Server の移行を行う際には、インプレースアップグレードではなく待ち受けの環境として SQL Server を構築し、データベースのリストアやアタッチで移行を行うと手順が簡略化できるのですが、2000 → 2012 ではこれらの方法は厳しそうですね。
バックアップのリストやアタッチができないだけで、SQL Server 2012 CTP3 の環境から SQL Server 2000 の環境に接続ができないということはありません。
下の画像は、SQL Server 2012 CTP3 の SSMS で SQL Server 2000 に接続した画面になります。
SQL Server 2000 のデータベースのスクリプトの生成や、データのインポートは可能ですので、リストアやアタッチではなくこれらの機能を利用しての移行を検討する必要がありそうですね。
データのインポートに関しては、SQL Server Native Client 11.0 が SQL Server 2000 への接続をサポートしていませんので、Microsoft OLE DB Provider for SQL Server で接続をする必要がありそうです。
Identity を使用している列への挿入 / FOREIGN KEY を設定している場合の挿入するテーブルの順序等を気を付ける必要がありますので十分な検証が必要ですが。
SQL Server 2008 R2 のような SQL Server 2000 の互換性レベルをサポートしているバージョンに一度バックアップのリストア / アタッチを行い互換性レベルを変更し、そこから SQL Server 2012 に移行を行うという考えもあるかもしれないですね。
最新の SQL Server への移行を検討している場合、早めに移行の流れを検証しておくのが重要になりそうです。