SQL Server 2012 では互換性レベルのサポートが [SQL Server 2005 (90)] ~ [SQL Server 2012 (110)] に変更となりました。
そのため、SQL Server 2000 の互換性レベルである [SQL Server 2000 (80)] はサポートされなくなっています。
環境によっては SQL Server 2000 のデータベースを最新の 2012 に移行する必要が出てくると思います。
今回の投稿ではデータベースを移行するためのシンプルな方法についてまとめていきたいと思います。
■SQL Server 2008 R2 を介したデータベースの移行
シンプルなデータベースの移行を行い場合、以下の 2 種類の方法があると思います。
- データベースのデタッチ / アタッチを使用した移行
- データベースのバックアップ / リストアを使用した移行
SQL Server 2012 では SQL Server 2000 のデータベースをアタッチすることができません。
リストアも同様で SQL Server 2000 のデータベースをリストアすることができません。
SQL Server 2008 R2 までは SQL Server 2000 の互換性レベルをサポートしていますので一度 SQL Server 2008 R2 に SQL Server 2000 のデータベースをデタッチ / アタッチまたはバックアップ / リストア を使用して移行し、互換性レベルを変更しそのデータベースを移行することで SQL Server 2012 にデータベースを移行することができます。
■インポート / エクスポートウィザードを使用したデータの移行
SQL Server 2012 から SQL Server 2000 に接続することはできますので、インポート / エクスポートウィザードを使用しての移行は可能です。
SQL Server 2012 の最新の [SQL Server Native Client 11.0] では SQL Server 2000 には接続することができません。
[Microsoft OLE DB Provider for SQL Server] または [SQL Server Native Client 10.0] であれば SQL Server 2000 に接続することができます。
後は通常のインポート / エクスポートを行いテーブルを移行します。
インポート / エクスポート ウィザードでテーブルを作成しデータを移行した場合、インデックス等の情報は移行されていませんので、ウィザードでテーブルを作成するのではなく、スクリプトの生成で一度スクリプトを作成して、移行するのが良いと思います。
# ストアドプロシージャ等の移行も行う必要がありますので。
他にもジョブやログイン DTS パッケージの移行等を考慮する必要がありますが、データベース単体であればこれらの方法で移行できるかと思います。
ありがとうございました。
新しい環境が×64でSQL2012に、10年前のデータのtrnファイルを読み込む必要に迫られ、どうしたものか苦慮していたところでした。
古いSQL2000は×86用のメディアしか持っていないので、インストールできなかったんです。
で、このサイトに辿り着きました。SQL2008R2を介在すればいいんですね。早速試してみます。
ありがとうございました。
つちだ
4 5月 13 at 09:56
SQL-SERVER2000のストアドプロシジャーで使用していた文法はそのまま使用可能でしょうか
例 SELECT、UPDATE時のテーブル結合
池嶋武盛
27 11月 15 at 16:04
SQL Server 2000 の互換しレベルまでしかサポートされていない文法がいくつかありますので、SQL Server 2012 以降に移行し、互換性レベルを SQL Server 2005 (互換性レベル 90) にしたタイミングで、サポートされていない文法を使用しているクエリはエラーとなります。
代表的なものとしては、https://msdn.microsoft.com/ja-jp/library/bb510680(v=sql.100).aspx に記載されているような「*=」の非サポートがあります。
このようなクエリについては、SQL Server 2008 R2 でサポートが終了している「互換性レベル 80」でしか動作しませんので、互換性レベルの変更に伴うクエリの修正が必要となります。
masayuki.ozawa
28 11月 15 at 10:36