外部 USB ドライブにデータ ファイルとログ ファイルが保存されている SQL Server データベースがあります。オフィスにあるメインの開発マシンと、オフィスにいないときのラップトップの間で外付けドライブを切り替えます。デスクトップ マシンとラップトップ マシンの間を移動するときに、sp_detach_db と sp_attach_db を使用しようとしています。これはデスクトップで問題なく動作することがわかりました。問題なくデータベースを切り離して再接続できます。しかし、ラップトップではデータベースを再アタッチできません (データベースは実際にはラップトップで作成され、最初のデタッチはそこで行われました)。ラップトップに再接続しようとすると、次のエラーが表示されます。
物理ファイル「p:\SQLData\AppManager.mdf」を開けません。オペレーティング システム エラー 5:「5(エラーが見つかりません)」
このエラーへの言及がたくさんありますが、すべて許可の問題であると述べています。そこで、この道をたどり、SQL Server サービス アカウントに適切な権限があることを確認しました。また、この同じパスに新しいデータベースを作成し、正常にデタッチして再アタッチすることができました。したがって、権限は問題ではないと確信しています。
さらに調査すると、SQL Server サービスが停止している場合でも、データ ファイルがロックされていると Windows が認識しているため、データ ファイルの名前変更、コピー、または移動ができないことがわかりました。Process Explorer は、ファイルをロックしているプロセスを表示しません。
ファイルをロックしているものを見つけてロックを解除するにはどうすればよいですか。
データベースが SSMS に表示されないことを確認しました。そのため、SQL Server はデータベースがまだ存在しているとは認識していません。
2008 年 9 月 18 日更新
これまでに提案されたすべての回答を試しましたが、成功しませんでした。ただし、これらの提案を試すことで、状況を明確にすることができました。次のことを確認できます。
- データベースのコピーが復元されるサーバーに外部ドライブが接続されている場合にのみ、データベースを正常に切断して再接続できます-事実上、データベースが「作成」されたサーバー-これを「ソースサーバー」と呼びましょう。
- 外部ドライブをソース サーバーに接続したまま、データベースを切り離した後、データ ファイルとログ ファイルを移動、コピー、または名前変更できます。
- 外部ドライブを別のマシンに移動するとすぐに、データ ファイルとログ ファイルが「ロック」されますが、試した 2 つのツール - Process Explorer と Unlocker の両方で、ファイルに添付されたロック ハンドルが見つかりません。
注意。データベースを切り離した後、外部ドライブを移動する前に、SQL Server サービスの停止とソース サーバーのシャットダウンの両方を試みましたが、まだ成功していません。
したがって、この段階でデスクトップとラップトップの間でデータを移動するためにできることは、データのバックアップを外付けドライブに作成し、外付けドライブを移動して、バックアップからデータを復元することだけです。正常に動作しますが、データベースが妥当なサイズ (1 GB) であるため、もう少し時間がかかります。とにかく、この道をたどらなければならないことを避けようとしていたにもかかわらず、これがこの段階で私が持っている唯一の選択肢です.