開発部の新坂です。
前回のエントリでは実際にデータの移行手順を行いましたが、移行ツールだけではデータベースを正確に移行できないことがわかりました。
今回は上記問題の対応も含めて、全体の流れをおさらいします。
2. 移行先に一時保存用データベースを手動で作成(テーブルは作成しない)
3. SQL Serverインポートエクスポートツールで移行先の一時保存用データベースへテーブルをコピー
4. 移行先の一時保存用データベースから、移行先の最終データベーステーブルへデータをコピー
プライマリキーや制約情報を含むテーブル作成のためには、SQL Management Studioの機能を使えば簡単にCREATE TABLE SQL が生成できます。
テーブルは次のステップで作成します。
このステップではデータのみのテーブルを一時保存用データベースへ作成します。
「
上記を除けば、同じ列を持つテーブルの全行をINSERTするだけの単純なSQL文となります。
外部キー制約があるため、実行順序は留意します。この例では、personテーブルはprefectureテーブルを外部キー参照するため、prefectureテーブルを先にINSERTしています。
ちょっと手順が複雑になってしまいましたが、もっとスマートな手順を紹介できるように精進してまいりたいと思います。
移行って簡単ではありませんね。お疲れさまでした。
今回は上記問題の対応も含めて、全体の流れをおさらいします。
移行手順全体の流れ
全体の流れを再確認しましょう。 1. 移行先に(プライマリキーや制約情報が正しく設定された)最終データベースとテーブルを手動で作成2. 移行先に一時保存用データベースを手動で作成(テーブルは作成しない)
3. SQL Serverインポートエクスポートツールで移行先の一時保存用データベースへテーブルをコピー
4. 移行先の一時保存用データベースから、移行先の最終データベーステーブルへデータをコピー
移行先に(プライマリキーや制約情報が正しく設定された)最終データベースとテーブルを手動で作成
データベースの作成は 記事(1/3) を参照してください。プライマリキーや制約情報を含むテーブル作成のためには、SQL Management Studioの機能を使えば簡単にCREATE TABLE SQL が生成できます。
移行先に一時保存用データベースを手動で作成(テーブルは作成しない)
データベースの作成については 旧バージョンからSQL Server2012への移行(1/3) を参照してください。データの一時保存用ですので、適切なデータベース名で作成しましょう。テーブルは次のステップで作成します。
SQL Serverインポートエクスポートツールで移行先の一時保存用データベースへテーブルをコピー
SQL Serverインポートエクスポートツールの操作については、旧バージョンからSQL Server2012への移行(2/3) を参照してください。このステップではデータのみのテーブルを一時保存用データベースへ作成します。
移行先の一時保存用データベースから、移行先の最終データベーステーブルへデータをコピー
ここが今回のポイントになります。今回の2テーブルの場合、下記のように記述すればコピーできます。-- prefectureテーブルINSERT
SET IDENTITY_INSERT newdb_prod..prefecture ON;
INSERT INTO newdb_prod..prefecture (id, name, prefecture_id) SELECT id, name, prefecture_id FROM newdb..person;
SET IDENTITY_INSERT newdb_prod..person OFF;
-- personテーブルINSERT
SET IDENTITY_INSERT newdb_prod..person ON;
INSERT INTO newdb_prod..person (id, name, prefecture_id) SELECT id, name, prefecture_id FROM newdb..person;
SET IDENTITY_INSERT newdb_prod..person OFF;
今回は、一時保存用データベースを 「newdb」、最終データベースを「newdb_prod」としています。「
SET IDENTITY_INSERT <データベース名>..<テーブル名> {ON|OFF}」
という記述があります。SQL Serverでは、自動的に連番を割り振るよう指定した列へ、値を指定したINSERTすることは制約されているのですが、この制約を一時的に解除/再開する文です。上記を除けば、同じ列を持つテーブルの全行をINSERTするだけの単純なSQL文となります。
外部キー制約があるため、実行順序は留意します。この例では、personテーブルはprefectureテーブルを外部キー参照するため、prefectureテーブルを先にINSERTしています。
移行完了
テーブルのプライマリキーや制約情報が移行元と同じように設定されていること、データ内容が同一であることを確認して、データベースを移行完了です。まとめ
全3回に渡って旧バージョンからSQL Server2012への移行手順を紹介しました。ちょっと手順が複雑になってしまいましたが、もっとスマートな手順を紹介できるように精進してまいりたいと思います。
移行って簡単ではありませんね。お疲れさまでした。