web-dev-qa-db-ja.com

復元でデータベースを開始できませんでした

サーバー「servername」の復元に失敗しました。 (Microsoft.SqlServer.SmoExtended)
System.Data.SqlClient.SqlError:RESTOREはデータベース 'ECP'を開始できませんでした。 (Microsoft.SqlServer.Smo)

データベースが作成されますが、オブジェクトエクスプローラーを使用してアクセスできません。

データベースECPにアクセスできません。 (ObjectExplorer)

データベースを機能させる方法についてアドバイスをありがとう。

編集:このクエリ

select state_desc from sys.databases where name = 'ECP';

戻り値 RECOVERY_PENDING

私はもう一度データベースを削除して、もう一度試してみました

restore verifyonly from disk = 'path\file';

これは戻ります

このバックアップを復元しようとすると、ストレージ領域の問題が発生する可能性があります。後続のメッセージで詳細が提供されます。
「F:\ ECPDATA1\ECPDATA1.mdf」で指定されたパスが有効なディレクトリにありません。
ファイル「F:\ ECPDATA2\ECPDATA2.ndf」のディレクトリ検索は、オペレーティングシステムエラー3(このエラーのテキストを取得できませんでした。理由:15100)で失敗しました。
ファイル「F:\ ECPDATA3\ECPDATA3.ndf」のディレクトリ検索は、オペレーティングシステムエラー3(このエラーのテキストを取得できませんでした。理由:15105)で失敗しました。
ファイル「F:\ ECPDATA4\ECPDATA4.ndf」のディレクトリ検索は、オペレーティングシステムエラー3(このエラーのテキストを取得できませんでした。理由:15105)で失敗しました。
オペレーティングシステムエラー21(このエラーのテキストを取得できませんでした。理由:15105)により、ファイル "E:\ ECPLOG1\ECPLOG1.ldf"のディレクトリ検索が失敗しました。
ファイル1のバックアップセットは有効です。

バックアップセットは有効であると表示されているので、指定したファイルを取得するだけで機能します。 しかしこのサーバーにはドライブがありませんE:またはF:。バックアップファイルでこれをどのように調整できますか?または、Linuxのようなある種のシンボリックリンクを持つことは可能ですか(windows-server-2008-r2にはそれほど詳しくありません)。

2
tombom

マシンにE:\またはF:\がないため、復元は失敗します。

  1. RESTORE FILELISTONLY FROM DISK = 'path\file';を実行します。これにより、データファイルとログファイルの論理名がわかります。
  2. これに基づいてRESTORE DATABASEコマンドを作成します。例(データファイルの名前がECP_DataECP_Data_2などであると仮定):

    RESTORE DATABASE ECO FROM DISK = 'path\file'
      WITH REPLACE, RECOVERY,
      MOVE 'ECP_Data'   TO 'C:\...path to MSSQL\Data\ECP_Data.mdf',
      MOVE 'ECP_Data_2' TO 'C:\...path to MSSQL\Data\ECP_Data2.ndf',
      MOVE 'ECP_Data_3' TO 'C:\...path to MSSQL\Data\ECP_Data3.ndf',
      MOVE 'ECP_Data_4' TO 'C:\...path to MSSQL\Data\ECP_Data4.ndf',
      MOVE 'ECP_Log'    TO 'C:\...path to MSSQL\Data\ECP_Log.ldf';
    

    論理ファイル名を修正することに加えて、C:\...path to MSSQL\Data\を、データ/ログファイルを格納するために使用する任意のパスに置き換えますdo。ファイルごとに個別のフォルダーは必要ありませんが、データとログファイルを別のディスクに分離することもできます。選択したドライブに復元を実行するための十分なスペースがない場合でも、失敗する可能性があることに注意してください。

7
Aaron Bertrand

E:ドライブとF:ドライブを持つサーバーからデータベースを復元しているようです。 RESTORE中に実際に存在する場所にファイルを移動する必要があります。これにより、次のような復元コマンドが提供されます(SQL Server BOLから削除されます)。

RESTORE DATABASE MyAdvWorks
  FROM AdventureWorks2008R2_Backup
  WITH RECOVERY,
  MOVE 'AdventureWorks2008R2_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf', 
  MOVE 'AdventureWorks2008R2_Log' TO 'D:\MyLog\MyAdvWorks_Log.ldf'

復元ダイアログの[オプション]タブに移動し、[名前を付けて復元]列に新しいパスを入力することで、UIからもこれを行うことができます。

5
RLF

サーバーから別のサーバーにデータベースを復元しようとしていて、復元サーバーにデータベースが存在しない場合は、以下の方法を試すことができます。

この問題が発生する可能性があるのは、この理由によって異なります。 DBファイルは、復元サーバーに存在しない別のディスク名に配置される可能性があります。

復元サーバーの問題を解決するには、 create a dbおよびdbに添付されているdbファイル。 DBとファイル名は、バックアップサーバー上のdbと同じである必要があります(dbを置き換えるため)。次に、置換モードtrueです。

0
Emrah Saglam