none
SQLServer2000からSQLServer2012へのデータ移行 RRS feed

  • 質問

  • 現在、OS:WindowsServer2012のサーバーにSQLServer2012 StandardEditonSP2をインストールし、

    MicrosoftSQLServer ManagementStudio(Ver.11.0.5058.0)を利用して

    SQLServer2000のDBからSQLServer2012のDBへ以下の手順でデータ移行を行っています。

    1)ManagementStudioを起動し、SQLServer2000のDB①とSQLServer2012のDB②を接続する。

    2)①のDBを選択、右クリック→タスク→データのエクスポートを選択する。

    3)SQLServerインポートおよびエクスポートウィザードを使用し、データを移行する。

     データソース:Microsoft OLE DB Provider for SQL Server

     認証:SQLServer認証

    この結果、エラーは検出されなかったのですが、以下のような警告が出ました。

    「* 警告 0x802092a7: データ フロー タスク 37: 長さ 200 のデータ フロー列 "設定値" から、

    長さ 128 のデータベース列 "設定値" にデータを挿入することにより、切り捨てが行われる可能性があります。
      (SQL Server インポートおよびエクスポート ウィザード)」

    原因が判明出来ずに困っています。

    又、対応方法も合わせて調査していますが、見つかりません。

    もしご存知の方がいらっしゃったら教えて頂けないでしょうか。

    どうぞよろしくお願いします。

    2015年4月28日 10:48

回答

  • 原因はわかりませんが
    エラー内容拝見する限りではテーブル定義で両者の列の定義が違っている
    SQLServer 2000側 … 長さ200のvarchar?
    SQLServer 2012側 … 長さ128のvarchar?
    ようなので、SQLServer2012側の該当列を長さ200にしてデータインポートを
    やり直してみたらいかがでしょうか。

    また、書かれているような方法だと、該当のテーブルがないときはテーブルが勝手に作られると思いますが
    できたものにキーとか制約とかは作られていないと思います。
    単にデータがあれば良いよ、ということなら良いと思いますが
    アプリケーションで使うDBの移行ということだと問題があるように思います。
    私の場合は、テーブルは別の方法で作っておいて、それからデータインポートしています。

    • 回答としてマーク 星 睦美 2015年5月20日 4:34
    2015年4月29日 0:39

すべての返信

  • 原因はわかりませんが
    エラー内容拝見する限りではテーブル定義で両者の列の定義が違っている
    SQLServer 2000側 … 長さ200のvarchar?
    SQLServer 2012側 … 長さ128のvarchar?
    ようなので、SQLServer2012側の該当列を長さ200にしてデータインポートを
    やり直してみたらいかがでしょうか。

    また、書かれているような方法だと、該当のテーブルがないときはテーブルが勝手に作られると思いますが
    できたものにキーとか制約とかは作られていないと思います。
    単にデータがあれば良いよ、ということなら良いと思いますが
    アプリケーションで使うDBの移行ということだと問題があるように思います。
    私の場合は、テーブルは別の方法で作っておいて、それからデータインポートしています。

    • 回答としてマーク 星 睦美 2015年5月20日 4:34
    2015年4月29日 0:39
  • ご回答頂き、ありがとうございます。

    返信が遅くなりまして、大変申し訳ありません。

    移行元であるSQLServer2000側に長さ200を超えるデータ型はありませんでした。

    又、テーブルは移行前にテーブル作成スクリプトを実行し、作成した状態で

    データのインポートを行っています。

    どのテーブルやフィールドに対して、警告が出ているのか解らない状態です。

    情報を頂き、ありがとうございます。

    2015年4月30日 0:21
  • SQL Server 2000の環境が手元に無いので確かめられませんが、エクスポートで列のマッピングを指定のできるところがあり、そこの列長が200になっていないでしょうか?

    #SQL Server同士でデータベースを移行するのであれば、バックアップと復元を使った方が簡単で間違いないように思います。
    ただし、復元後に互換性レベルがそのままで良いのか検討することを忘れないようにして下さい。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年4月30日 1:40
  • ご回答頂きまして、ありがとうございます。

    返信が遅くなり、大変申し訳ありません。

    あの後、調査を進めた結果、

    SQLServer 2000側は、varchar200

    SQLServer 2012側は、varchar128

    のフィールドが存在する事が判明しました。

    2012側をvarchar200に修正し、再度実行したところ、

    問題なく移行する事が出来ました。

    ありがとうございました。

    2015年5月19日 10:49