投稿

ラベル(SQLServer)が付いた投稿を表示しています

SQLServerのバックアップファイルは上位互換がないよって話と、なんとかデータコピーしたらいろいろ躓いたよって話【SQLServer】

 先日、業務にて何気なくSQLServer2016の環境から取得したバックアップファイルを SQLServer2012の環境へ復元(RESTORE DATABASE)したところエラーになった。 メッセージは確か 「SqlError:データベースはバージョン(13.xxx)実行中のサーバーにバックアップされました。このバージョンは、このサーバー(バージョン11.xxxを実行)とは互換性がありません。」 みたいな感じだった。 調べてみると普通にSQLServerには上位互換がないため、新しいバージョンのバックアップファイルでは古いバージョンで復元できない様子。  参考: SQL Serverのバージョンが異なるため復元に失敗する しかし、何とかSQLServer2012上のDBに対象データを復元したかったのでいろいろ試行錯誤をしてみました。 その結果、SSMSを使ってデータの複製が行えたのでその時の作業内容と詰まったことを書きます。 まず、試したこと。 SQLServer2016のDBへ接続し、「タスク > データのエクスポート」から 元「SQLServer2016」→先「SQLServer2012」を指定しエクスポートを実行した。 このとき、エクスポート先のDBにはテーブルを未作成の状態だったのでデータエクスポート時にテーブルの作成も合わせて行うよう指定していた。 簡単に行けそうだと思った矢先、不思議なことが起こった。 まず、datetime型のカラムのエクスポートにてエラーが発生した。  ※エラーメッセージは、型変換失敗みたいな感じのやつだった?と思う。 調べてみると、エクスポートの設定(マッピングの設定)でdatatimeのカラムがsmalldatetimeと定義されており、作成されたテーブルの型に元データが格納できずエラーになった。 検証としてSQLServer2012からSQLServer2012に対してデータエクスポートをしたが事象は発生せず、SQLServer2016からSQLServer2012に対してのみ発生した。 意味がわからないので、SQLServerの不具合と勝手に考えるようにした。 (ちなみに、numeric型がdecimal型に変わっていたりもした。) 対応としては、マッピングで正しい型を定義してあげることでエラーなくエクスポートが行...