608

データベースをバックアップしました:

BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing

そして、それを復元しようとしました:

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE --force restore over specified database

そして今、データベースは復元状態でスタックしています。

一部の人々は、バックアップにログ ファイルがなく、以下を使用してロール フォワードする必要があるためだと理論付けています。

RESTORE DATABASE MyDatabase
WITH RECOVERY 

もちろん、失敗することを除いて:

Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

そして、破滅的な状況で必要なのは、機能しない復元です。


バックアップには、データ ファイルとログ ファイルの両方が含まれます。

RESTORE FILELISTONLY 
FROM DISK = 'MyDatabase.bak'

Logical Name    PhysicalName
=============   ===============
MyDatabase    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF
4

27 に答える 27

790

Symantec Backup Exec 11d を使用して、データベースを SQL Server 2005 Standard Edition インスタンスに復元しているときに、この状況が発生しました。復元ジョブが完了した後、データベースは「復元中」状態のままでした。ディスク容量の問題はありませんでした。単にデータベースが「復元中」の状態から抜け出せなかったのです。

SQL Server インスタンスに対して次のクエリを実行したところ、データベースがすぐに使用可能になったことがわかりました。

RESTORE DATABASE <database name> WITH RECOVERY
于 2009-07-28T15:21:16.210 に答える
462

WITH RECOVERYデータベースコマンドでオプションを使用しRESTOREて、復元プロセスの一部としてデータベースをオンラインにする必要があります。

もちろん、これは、トランザクション ログのバックアップを復元する予定がない場合、つまり、データベースのバックアップのみを復元して、データベースにアクセスできるようにしたい場合に限られます。

コマンドは次のようになります。

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

SQL Server Management Studio のデータベースの復元ウィザードを使用すると、より多くの成功を収めることができます。このようにして、特定のファイルの場所、上書きオプション、WITH リカバリ オプションを選択できます。

于 2009-02-06T16:39:44.100 に答える
109

方法は次のとおりです。

  1. サービス (MSSQLSERVER) を停止します。
  2. データベースおよびログ ファイル (C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data...) またはファイルがある場所の名前を変更または削除します。
  3. サービス (MSSQLSERVER) を開始します。
  4. 問題のあるデータベースを削除します。
  5. データベースを再度復元します。
于 2009-05-07T21:50:36.620 に答える
88

ログ配布のセカンダリ サーバーを停止することで、同様のインシデントが発生しました。ログ配布からサーバーを削除し、プライマリ サーバーからのログ配布を停止するコマンドの後、セカンダリ サーバーのデータベースは、コマンドの後にステータスの復元でスタックしました。

RESTORE DATABASE <database name> WITH RECOVERY

データベース メッセージ:

RESTORE DATABASE は、18.530 秒 (0.000 MB/秒) で 0 ページを正常に処理しました。

その 18 秒後に、データベースは再び使用可能になりました。

于 2011-01-11T13:51:04.230 に答える
85

SQL Management Studio を使用した復元で同様の問題が発生しました。データベースのバックアップを別の名前の新しいバックアップに復元しようとしました。最初はこれが失敗し、新しいデータベースのファイル名を修正した後、正常に実行されました. そのため、復元後、元のデータベースの名前の横に (復元中...) が残りました。上記のフォーラム(ブーサン)の回答を考慮して、次の側のクエリエディターで実行してみました:

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

問題を修正しました。データベース名に特殊文字が含まれていたため、最初は問題がありました。二重引用符を追加することでこれを解決しました-単一引用符は機能せず、「近くの構文が正しくありません...」というエラーが発生します。

これは、私がこの問題 (復元状態でスタックしたデータベース) を解決しようとした最小限の解決策であり、より多くのケースに適用できることを願っています。

于 2014-09-05T11:25:56.240 に答える
36

OK、私も同様の問題を抱えており、Pauk の場合とまったく同じように、復元中にサーバーのディスク容量が不足したことが原因で、永続的な復元状態が発生しました。SQL Server サービスを停止せずにこの状態を終了するにはどうすればよいですか?

私は解決策を見つけました:)

Drop database *dbname*
于 2009-06-26T10:11:54.470 に答える
30

RESTORE DATABASE/RESTORE LOG コマンドを実行すると、WITH RECOVERY オプションがデフォルトで使用されます。「復元」プロセスで行き詰まった場合は、次のコマンドを実行してデータベースをオンライン状態に戻すことができます。

RESTORE DATABASE YourDB WITH RECOVERY
GO

複数のファイルを復元する必要がある場合、CLI コマンドにはそれぞれ WITH NORECOVERY と WITH RECOVERY が必要です。データベースをオンラインに戻すには、コマンドの最後のファイルにのみ WITH RECOVERY を指定する必要があります。

RESTORE DATABASE YourDB FROM DISK = 'Z:\YourDB.bak'
WITH NORECOVERY
GO
RESTORE LOG YourDB FROM DISK = 'Z:\YourDB.trn'
WITH RECOVERY
GO

SQL Server Management Studio ウィザードも使用できます。

ここに画像の説明を入力

仮想復元プロセスもありますが、サード パーティのソリューションを使用する必要があります。通常、データベースのバックアップをライブのオンライン データベースとして使用できます。ApexSQL と Idera には独自のソリューションがあります。ApexSQL Restore に関するSQL Hammer によるレビュー。多数のバックアップを扱っている場合は、仮想復元が適切なソリューションです。復元プロセスははるかに高速で、ディスク ドライブのスペースも大幅に節約できます。比較のために、こちらのインフォグラフィックをご覧ください。

于 2014-01-17T17:24:33.563 に答える
17

私はその理由を理解しました。

コマンドを発行したクライアントがRESTORE DATABASE復元中に切断すると、復元がスタックします。

クライアント接続によってデータベースを復元するように指示されたときに、クライアントが常に接続されたままになっていない限り、サーバーが復元を完了しないのは奇妙なことです。

于 2009-02-11T19:04:41.203 に答える
10

これはうまくいきました:

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/8dd1b91d-3e14-4486-abe6-e3a550bfe457

データベースが復元状態を示し、クエリを実行できず、ソフトウェアに接続できないという状況がありました。

この状況から抜け出すために私がしたことは次のとおりです。

  1. Windows サービスからすべての SQL 関連サービスを停止します。

  2. Ldf および Mdf ファイルが SQL ディレクトリにある DATA フォルダーを開きました。通常は、「C:\Program Files************\MSSQL\DATA」

  3. 次に、データベースの Ldf ファイルと Mdf ファイルの両方をコピーしました: [db name].mdf と [db name]_log.ldf

これらのファイルを両方とも別のフォルダーにコピーしました。

  1. 次に、すべての SQL 関連サービス (手順 1) を Windows サービスから再度開始しました。

  2. 通常のログインでMS SQL管理スタジオを開始しました。

  3. 問題のデータベースを右クリックし、[削除] をクリックします (データベースを完全に削除します)。

  4. このデータベースに関連するすべての LDF および MDF ファイルは、DATA フォルダーから削除されています (手順 2 で説明)。

  5. 同じ名前の新しいデータベースを作成しました(手順6で削除したものと同じ名前-原因データベース)。

  6. [データベース名] -> 右クリック -> タスク -> オフラインにする。

  7. 次に、両方のファイルを (手順 3 から) DATA フォルダー (手順 2) にコピーしました。

  8. [データベース名] -> 右クリック -> タスク -> オンラインにする。

于 2012-10-03T10:55:02.850 に答える
8

持っていた 。データベース名に が含まれていて、そのためにクエリが機能しませんでした (「.」の近くに間違った構文があると言っています)。次に、名前にブラケットが必要であることに気付きました。

RESTORE DATABASE [My.DB.Name] WITH RECOVERY
于 2016-07-28T13:17:40.123 に答える
2

スナップショットが有効になっている場合は、スタックしたデータベースの削除で問題が発生する可能性もあります。私にとってこれはうまくいきました:

  1. 最初に私はTipuDelacabluの手順に従いました(いくつかの投稿を読んでください)
  2. コマンドを実行します:drop database [your database]、これにより、スナップショットデータベースの名前を示すエラーが表示されます
  3. コマンドの実行:データベース[スナップショットデータベース]を削除してから、手順2のコマンドを再度実行します。
于 2009-08-28T05:42:02.360 に答える
1

SQL Express のライセンス制限により、MyDbName (復元中...)のケースが発生しました。

ログファイルで、これを見つけました:

CREATE DATABASE または ALTER DATABASEが失敗しました。これは、データベースの累積サイズが データベースあたりのライセンス制限である 10240 MB を超えるためです。

たとえば、より大きなデータベースを復元しようとしている場合は、SQL Express サーバーを Developer エディションに切り替える必要があります。

于 2016-09-02T13:48:24.163 に答える
1

VERIFY ONLY を実行してみましたか? それが健全なバックアップであることを確認するためだけに。

http://msdn.microsoft.com/en-us/library/ms188902.aspx

于 2009-02-06T20:25:17.187 に答える
0

WITH RECOVERY ベースのオプションはすべて機能しませんでした。

何をしたかは、Management Studio から完全な復元を行うことでした。

USE [master]
RESTORE DATABASE Sales_SSD
FROM  DISK = N'D:\databaseBackups02\Daily_Sales_20150309_0941.bak' 
WITH  FILE = 1,  
MOVE N'Sales_Data' TO N'C:\Data\SSD\Sales.mdf',  
MOVE N'Sales_Log' TO N'C:\Data\SSD\Sales_1.ldf',  
NOUNLOAD,  REPLACE,  STATS = 5
于 2015-03-26T09:31:01.903 に答える
0
  1. 最初に SQL Agent Service を確認して実行します。
  2. 次の T-SQL を使用します。

    SELECT filename FROM master.sys.sysaltfiles WHERE dbid = DB_ID('db_name');

  3. T-SQL を継続的に使用する:

    RESTORE DATABASE FROM DISK = 'DB_path' WITH RESTART, REPLACE;

この助けを願っています!

于 2013-05-14T08:04:32.940 に答える
0

私は同じ問題を抱えていました...ドライブがいっぱいではなかったので、データベースがこの問題を経験した理由はわかりません...破損したか何かのようです。上記のすべてを試しましたが、どれも完全には機能しませんでした。特に、サービスを停止して mdf および ldf ファイルを削除するという提案が機能すると思いました...しかし、復元時にまだフリーズしますか?

前述のようにファイルを削除することでこれを解決しましたが、DB を再度復元しようとする代わりに、新しい .mdf および .ldf ファイルをコピーし、フロント エンド アタッチメント ウィザードを使用してこれらをアタッチしました。ほっと、効きました!!

仮想マシンを使用しているため、新しいファイルをコピーするのに永遠にかかりました...クリップボードを使用したコピーと貼り付けには1時間ほどかかるため、これは最後の試みとしてのみお勧めします.

于 2015-09-18T21:07:07.407 に答える