12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL Serverのバージョンが異なるため復元に失敗する

Posted at

#SQL Serverで古いバージョンへDB構造を移したい
##古いバージョンへは直接復元ができない
開発環境から実行環境へ、テーブル構造を移し込みたい。
開発環境のSQL Server Management Studioでバックアップを作成し、実行環境でDBを復元しようとしたところ、エラーが出た。

データベース ××× の復元に失敗しました。(Microsoft.SqlServer.Management.RelationalEngineTasks)
追加情報:System.Data.SqlClient。SqlError:データベースはバージョン ××× を実行中のサーバーにバックアップされました。このバージョンは、このサーバー(バージョン ××× を実行)とは互換性がありません。(略)(Microsoft.SqlServer.SmoExtended)

このエラーが出た手順は、以下の通り。
リストア先で新しいDBを作成する(以下の例ではProduct_MngというDBを作成した)。
タスク → 復元 → データベース を選択する。

restore1.png

データベースの復元ウィンドウが開かれるので、バックアップデバイスを選択して、OKをクリックする。

restore2.png

すると前述のエラーが表示された。

restore3.png

##原因
SQL Serverのバージョンが異なることが原因。上位互換がなく、新しいバージョンのバックアップを古いバージョンでリストアすることはできない。バックアップを作った開発環境のSQL Serverと、リストアする実行環境のSQL Serverのバージョンを調べてみる。
###SQL Serverのバージョンの調べ方

SQL Server Management Studioのヘルプ → バージョン情報から表示されるバージョンは、Management Studioのバージョンであって、SQL Serverのバージョンではない。SQL Serverのバージョンを調べるには、Management Studioにて以下のコマンドを入力するとよい。

SQLQuery1.sql
SELECT @@VERSION

バックアップしたSQL Serverのバージョンは、2016 SP1だった。
restore-4.PNG

リストアするSQL Serverのバージョンは、2014だった。
restore5.PNG

このような場合は直接復元ができない。SQL Serverのバージョンを最新に統一すれば問題ないのだが、実行環境を変更できない事情があるため、該当の2014をバージョンアップするわけにはいかない。
##復元方法
直接復元ができないので、テーブルごとに作成スクリプトを保存し、それをリストア先で実行することにした。
バックアップ元のSQL Server Management Studioで、各テーブルごとに右クリックからテーブルをスクリプト化 → 新規作成 → ファイル を選択する。その後、適当なファイル名を付けて保存する。

restore10.png

次に、リストア先で、保存したファイルを開き、Product_Mngのデータベースを選択して実行する。テーブル作成に成功すれば「コマンドは正常に完了しました。」と表示される。

restore11.PNG

作成できたテーブルを確認すると、正しく構造が正しく移し込まれている。

restore12.PNG

12
15
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?