3

外部 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 日更新

これまでに提案されたすべての回答を試しましたが、成功しませんでした。ただし、これらの提案を試すことで、状況を明確にすることができました。次のことを確認できます。

  1. データベースのコピーが復元されるサーバーに外部ドライブが接続されている場合にのみ、データベースを正常に切断して再接続できます-事実上、データベースが「作成」されたサーバー-これを「ソースサーバー」と呼びましょう。
  2. 外部ドライブをソース サーバーに接続したまま、データベースを切り離した後、データ ファイルとログ ファイルを移動、コピー、または名前変更できます。
  3. 外部ドライブを別のマシンに移動するとすぐに、データ ファイルとログ ファイルが「ロック」されますが、試した 2 つのツール - Process Explorer と Unlocker の両方で、ファイルに添付されたロック ハンドルが見つかりません。

注意。データベースを切り離した後、外部ドライブを移動する前に、SQL Server サービスの停止とソース サーバーのシャットダウンの両方を試みましたが、まだ成功していません。

したがって、この段階でデスクトップとラップトップの間でデータを移動するためにできることは、データのバックアップを外付けドライブに作成し、外付けドライブを移動して、バックアップからデータを復元することだけです。正常に動作しますが、データベースが妥当なサイズ (1 GB) であるため、もう少し時間がかかります。とにかく、この道をたどらなければならないことを避けようとしていたにもかかわらず、これがこの段階で私が持っている唯一の選択肢です.

4

10 に答える 10

4

クレイジーに聞こえますが、右クリック/プロパティ/セキュリティを介してファイルに手動で権限を付与しようとしましたか?SQL Server 2005は、デタッチされたファイルのアクセス許可を、デタッチを行ったプリンシパル(おそらく、あなたのアカウント、SQL Serverサービスが実行されているアカウント)に排他的に設定し、他の誰もファイルを操作できないと思います。これを回避するには、MDFファイルとLDFファイルを移動または削除する前に、それらのファイルに対するファイルのアクセス許可を手動で付与する必要がありました。onupdatecascade.comのブログ投稿も参照してください。

于 2009-07-17T05:48:23.533 に答える
1

ファイルをコピーできますか?ファイルをラップトップにコピーして添付できるかどうか知りたいです。ある種の権限エラーでもあると思いますが、これを修正する作業を行ったようです。

ファイルに属性はありますか?

更新: ファイルをコピーできない場合は、何かがファイルをロックしている必要があります。Unlockerはまだ試していませんが、良い出発点のように思えますまた、ファイル許可の下でファイルの所有権を取得してみてください。

于 2008-09-17T00:22:11.393 に答える
0

同様の問題が発生しました。何も解決されていないようでした-マシンを完全に再起動しようとしたり、SQLサービスを再起動したりしました。ProcMonとProcessExplorerは何も表示していなかったので、私は考えました-「ロック」はOSによって行われます。

ファイルを削除し、別のドライブ文字でマウントされたドライブから復元することで解決しました。

PS。私のデータベースファイルはUSBドライブではなく、TrueCryptドライブにありました(「リムーバブルドライブ」と言うこともできます)

于 2011-04-03T09:52:19.447 に答える
0

デスクトップでデータベースをバックアップしてから、ラップトップで正常に復元されるかどうかを確認します。あなたの問題を説明していませんが、少なくとも前進することができます。

于 2008-09-17T00:22:15.543 に答える
0

/c スイッチを使用してデバッグ モードで sqlservr.exe を実行し、起動時に何が起こるかを確認します。ファイルのコピーを作成し、そのコピーを元のファイルに転送することで、ロックやアクセス許可の問題を解決できます。

関連するログ ファイル (.ldf) も確認してください。そのファイルが見つからないか、利用できない場合は、緊急バイパス モードに頼らない限り、データベースを正常な/一貫性のある状態にマウントすることはできません。

于 2008-09-17T00:25:44.257 に答える
0

Enterprise Manager または SSMS を使用しているときに、対象のデータベースの名前を確認できますか? ファンキーな状態でデータベースが残っている可能性があります。MDF のバックアップまたはコピーを安全な場所に保管してください。このような場合は、データベースを削除してから再接続してみてください。

于 2008-09-17T00:15:36.823 に答える
0

SQL Server 構成マネージャー内で、SQL Server サービスを調べます。すべての SQL Server インスタンスについて、[ログオン] タブの [ログオン:] でどのアカウントが選択されているかを確認します。たとえば、ローカル システム アカウントに変更すると、問題が解決することがわかりました。それは私にとって実際にうまくいった唯一のものでした.そして確かに、同じ問題を抱えている人は少なくありません.

于 2013-01-29T22:49:19.627 に答える
0

これは、ファイル レベルのセキュリティに関するセキュリティ上の問題です。データベースを別の資格情報で切り離し、別の資格情報でアタッチしています。記事http://www.sqlservermanagementstudio.net/2013/12/troubleshooting-with-attaching-and を参照してください。 html をコピーして別の場所に貼り付けてみてください。

于 2013-12-26T06:40:49.493 に答える
-2

同じ問題がありました。誰かがファイルを切り離して立ち去ったため、別のドライブに移動できませんでした。しかし、ファイルの所有権を取得した後(セキュリティ->詳細->ログインIDの所有権を取得)、ログインIDをセキュリティタブに追加してファイルへのアクセスを許可すると、移動できました。

于 2018-08-11T18:25:39.063 に答える