SQL Serverの復元エラー-アクセスが拒否されました


167

ローカルマシンにデータベースを作成してから、tables.baktable というバックアップを作成しましたDataLabTables

そのバックアップをそのテーブルのないリモートマシンに移動し、復元を試みましたが、次のエラーが発生しました。

System.Data.SqlClient.SqlError: 'c:\ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ DataLabTablesで' RestoreContainer :: ValidateTargetForCreation 'を試行中に、オペレーティングシステムがエラー' 5(Access is denied。) 'を返しました.mdf '。

それが問題である場合、どうすれば私の権利を修正できますか?

回答:


539

SQL Server 2012でこの問題が発生しました。

[ファイル]セクションで[すべてのファイルをフォルダに再配置する]チェックボックスをオンにするだけで済みました。

ここに画像の説明を入力してください

(クリックしてフルサイズの画像を表示)

もちろん、これはSQL Serverの正しいバージョンがインストールされていることを前提としています。


13
私のためにも働いた。なぜ誰かが説明できます
magnattic

3
また、UIの代わりにスクリプトを使用してこれを実行する方法を教えてください。
FMFF 2015

9
私は2014年に同じ問題を修正しました。
DaneEdw

3
また、これはSQL Expressからのバックアップと完全なSQL Serverに復元する私のためのソリューションだった
tarrball

10
私はあなたに抱擁を与える必要があります。今真剣に、私はクライアントにノーと言っていました、あなたの答えは私のプロジェクトを救いました。
Marco Scabbiolo 2017年

30

エラーメッセージから、復元操作のターゲットc:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables.mdf)を検証するときにエラーが発生したことが示されます。

それは次のように聞こえます:

a)そのファイルはすでに存在しており(以前にすでに復元しているため)、SQL Serverによって使用されています

または

b)そのディレクトリはまったく存在しない

あなたの質問では、そのテーブルのバックアップを作成したとおっしゃっていましたが、それはSQL Serverのバックアップの仕組みではありません。これらのバックアップは常にデータベース全体(またはそのデータベースからの少なくとも1つまたは複数のファイルグループ)です。

私の直感は次のとおりです。以前にそのデータベースを既に復元していて、2回目の復元で、復元ウィザードの[既存のデータベースを上書きする]チェックボックスをオンにしなかったため、既存のファイルを上書きできず、復元が失敗します。

リモートサーバーで復元を実行しているユーザーは、リモートサーバー上のそのディレクトリにアクセスできないことは明らかです。

C:\program files\.... は保護されたディレクトリです-通常の(非管理者)ユーザーはこのディレクトリ(およびそのサブディレクトリ)にアクセスできません。

最も簡単な解決策:BAKファイルを別の場所(などC:\temp)に置いて、そこから復元して みてください


私はC:\ tempの下で試しましたが、エラーは上記と同じです。最初に述べたのと同じパスが奇妙です
cdub

SQL Management Studioで[データベース]を右クリックし、次に[タスク]-> [復元]
cdub

1
@marc_s thx、そのファイルのディレクトリがないため、オプションを編集するのを忘れました... ... MSSQL \ DataLabTables.mdfではなく... MSSQL \ Data \ DataLabTables.mdf
cdub

2
@marc_s:上記のオプションAの「and is in use in SQL Server」の部分に関するマイナーコメント:RESTOREファイルが存在する場合、SQL Serverで使用されていなくても標準コマンドが失敗することわかります(例:MDF / LDFファイルは、前回の切り離し後もそのまま残ります)。私は、過去数週間にわたる数百のDBの主要な移行のためのカスタムT-SQLベースのログ配布の実装でこれに遭遇しました。エラーメッセージが「アクセスが拒否されました」であったかどうかはわかりませんが、具体的ではない可能性があります。
Tao

2
バックアップを使用して復元する前に、既存のMDF / LDFファイルの名前を手動で変更する必要がありました。「上書き」をチェックするだけでは不十分でした。
ジェイミーキーリング2014

26

私も同じ問題を抱えていました。私SQL ServerSQL Server Agentサービスlogon asNetwork Services、バックアップの復元を実行するための書き込みアクセス権を持っていないアカウントで実行されていることがわかりました。

これらのサービスを両方ともログオンに変更してLocal System Account、問題を修正しました。


これは良い考えではありません。それはあなたが復元しようとしているファイルの場所があなたが意図したものではないという本当の問題を覆い隠します。
2016年

2
SQL Serverサービスは "NT Service \ MSSQLSERVER"で実行されていましたが、このユーザーのアクセス許可をデータとログフォルダーに追加するとうまくいきました。
Tim Newton

結構

9

最近、SQL 2008 R2でこの問題に直面し、以下の解決策がうまくいきました:

1)復元しようとしているデータベースと同じ名前で新しいデータベースを作成します2)復元中は、上記で使用したのと同じ名前を使用し、オプションで上書きオプションをクリックします

他の解決策がうまくいかない場合は、上記を試してみてください。


6

バックアップ作成者にはMSSqlバージョン10がインストールされているため、バックアップを作成すると、元のファイルパスも保存されます(同じ場所に復元できるようにするため)。バージョン11を使用していたため、宛先ディレクトリを見つけることができませんでした。

そのため、出力ファイルのディレクトリをC:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \に変更すると、データベースを正常に復元できました。

ソース


6

同様の問題がありました。2005の.bakファイルを復元しようとしたところ、まったく同じエラーが発生しました。上書きオプションも選択しましたが、役に立ちませんでした。

私の解決策は、フォルダーに移動し、プロパティ画面でアクセス権を編集することにより、SQLユーザーに問題のディレクトリへのアクセスを許可することでした。


2

この問題でも数時間を失った。それを行ってもらった:

私の場合の「アクセス拒否」は、実際には「アクセス拒否」を意味していました。Windowsデバイス上のmssqlstudioのユーザーアカウントには、エラーメッセージで指定されたフォルダーのフルコントロールがありませんでした。私はそれを完全に制御しました。アクセスは拒否されなくなり、復元は成功しました。

フォルダーがスタジオ用にロックされたのはなぜですか?知るか ?これ以上答えようとせず、現状のままで十分な質問に答えました。



0

別のシナリオとして、複数のデータベースパスの存在が考えられます。まず、新しいデータベースが現在保存されているパスを書き留めます。したがって、新しい空のデータベースを作成してからを実行する場合Tasks/Restoreは、復元で使用しようとしているパスが、空のデータベースが作成されたディレクトリと同じであることを確認してください。復元パスが有効であっても、アクセスが拒否されます。作業中の現在のパスでない場合はエラーになります。パスが合法でない場合は非常に簡単に見つけることができます。パスが合法な場合は見つけるのがはるかに困難ですが、現在のパスはわかりません。


0

コメントできないので申し訳ありません...

私も同じ問題を抱えていました。私の場合、問題は古いsqlサーバーフォルダー(サーバー上に存在していた)に復元しようとしたことに関連しています。これは、新しいSQLサーバー(SQL Server 2014)で復元された古いSQLサーバーのバックアップ(SQL Server 2012バックアップ)が原因です。実際の問題は@marc_sの回答とそれほど変わらない。とにかく、ターゲットフォルダーのみを新しいSQL Server DATAフォルダーに変更しました。


0

これは最善の解決策ではないかもしれませんが、SQL Server 2005で復元を実行しようとしていましたが、SQL Server 2008に変更して、うまくいきました。



0

Frnds ...データベースの再構築中に同じ問題が発生し、すべての解決策を試しましたが、解決できませんでした。次に、SQL 2005を再インストールしようとしましたが、問題は解決しました。前回、SQLのインストール中にカスタマイズオプションをチェックするのを忘れていました。


0

私の場合-復元元のデータベースのバックアップパスを再確認する必要がありました。以前に別のパスから復元したときは、最初にそれを実行しました。初めて使用したバックアップパスを使用するようにバックアップパスを修正しましたが、うまくいきました!


0

データとログ用の新しいフォルダーを作成することになりましたが、正しく機能しました。フォルダー/ファイルのアクセス許可の問題であったに違いありません。


0

これは、パスが正しい場合でも発生しますが、サービスアカウントはデータファイルの所有者ではありません(まだ読み取り/書き込みアクセスのための十分な権限があります)。これは、ファイルのアクセス許可がフォルダーのアクセス許可と一致するようにリセットされた場合(もちろん、サービスが停止している場合)に発生する可能性があります。

この場合の最も簡単な解決策は、各データベースをデタッチして再度アタッチすることです(所有者をアタッチするとサービスアカウントに変更されるため)。


-1

これを試して:

DBの復元ウィザードウィンドウで、[ファイル]タブに移動し、[すべてのファイルをフォルダに再配置する]チェックボックスをオフにして、復元先をC:から他のドライブに変更します。次に、通常の復元プロセスに進みます。正常に復元されます。


-1

同じ問題がありましたが、SQLサーバー2008 r2を使用しました。オプションをチェックインし、SQLが.mdfファイルと.ldfファイルを保存するパスを確認する必要があります。SQLサーバーインストールのパスを選択する必要があります。私はこれで私の問題を解決しました。


-2

次に、それをC:の下のサブフォルダーに移動してみますが、使用しているフォルダーに対する完全な権限がユーザーにあることを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.