[MSSQL]バックアップ セットは、既存のデータベース ~ 以外のデータベースのバックアップを保持しています。

SQL Server を使っていると、データベースを移行する際にバックアップ→リストアの手順を敬遠する人がいます。なぜかというと、リストア中に難解かつ不思議なエラーが出るからです。

バックアップ セットは、既存のデータベース ~ 以外のデータベースのバックアップを保持しています。

まず、リストア時のオプションで「WITH REPLACE」がついているかどうかを確認します。これはデータベースを丸ごと入れ替えるかどうかのオプションです。

これでも解決しない場合がありますが、ここからが本題です。データベースのパス名を指定します。Management Studio ではできないので、以下のクエリを実行します。

RESTORE DATABASE TEST
FROM FILE='C:\MSSQLData\TEST.bak'
WITH REPLACE,
MOVE 'TEST' TO 'C:\MSSQLData\TEST.mdf',
MOVE 'TEST_ldf' TO 'C:\MSSQLData\TEST.ldf'

バックアップファイルの中にデータベースのパスが書いてあり、それとデータベースのパス名と合っていないからと原因推測します。MOVE でデータベースのパス名と合うように指定すれば解決です。