DBサーバーにSQLServerのインスタンスを2つ立ち上げて(仮にAとBとします)、インスタンスAで取得したバックアップファイルを、SQL Server Management Studio(SSMS)でインスタンスBに同じ名前のDB名(=データベースファイル名)で復元しようとしたら、「プロセスが使用しています」と言われて、なんだそりゃ?としばらく悩みました。
バックアップファイルを誰かが掴んでいるのかと調べても、そうでもなさそう。じゃあなんだろ…ってことで、結局はデータベースファイルの復元先がインスタンスAのフォルダになっていて、すでに存在しているデータベースファイルと同じファイルを作ろうとしてたからNGっていました。
SQLServerのデータベースファイルは、デフォルトで作成した場合、Microsoft SQL Server\MSSQLxx_xx.インスタンス名\MSSQL\DATAに作られます。
今回はインスタンスAのデータベースファイルは Microsoft SQL Server\MSSQL10_50.A\MSSQL\DATA\ にあって、それをバックアップして、デフォルト設定でインスタンスBに復元したら Microsoft SQL Server\MSSQL10_50.B\MSSQL\DATA\ に復元されると思っていたのですが、実際には Microsoft SQL Server\MSSQL10_50.A\MSSQL\DATA\ に復元しようとしていました。
データベースのバックアップファイルは、元々どこにあったファイルなのかを保持していて、(何らかの条件で)復元の際のデフォルト設定にそれを使うことがあるのかもしれないです。
つーことで、バックアップ復元の際には、ちゃんと復元先フォルダをチェックしましょうね、というオチです。
これ結構面倒ですよね。
PostgreSQL とか楽なのに。