web-dev-qa-db-ja.com

フルバックアップからSQL Serverデータベースを復元できない、ログ処理が失敗する、データベースが「復元中」の状態

PCのローカルSQL Server Developer Edition 12.0.2000.8に開発用のデータベースを設定しようとしています。ネットワーク経由で送信された完全なデータベースバックアップと個別のトランザクションログのみのバックアップファイルが利用可能です。

フルバックアップから復元しようとすると、しばらくして(おそらく1時間程度、データベースのサイズは270 GBになります)、エラーが発生します。

System.Data.SqlClient.SqlError:データベース 'データベース名'のログの処理中にエラーが発生しました。可能であれば、バックアップから復元します。バックアップが利用できない場合は、ログを再構築する必要があるかもしれません。 (Microsoft.SqlServer.SmoExtended)

この後、dbは「Restoring ..」状態になります。

私は( this の質問からそれを得た)のようなものを実行したかった

ALTER DATABASE recovery_test_2 SET EMERGENCY;
ALTER DATABASE recovery_test_2 SET SINGLE_USER;

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;

それに対して、しかし、データベースが 'Restoring ..'状態にあるため、当然のことながらできません。データベースで復元プロセスを再起動すると、同じエラーメッセージが表示され、削除して再度復元しても、あまり役に立ちませんでした。

どうすればデータベースを稼働させることができますか?トランザクションの一貫性は私には関係ありません。

SSMS自動生成復元スクリプト:

  USE [master]
  RESTORE DATABASE [database_name] FROM  DISK = N'D:\database_name.bak' WITH  FILE = 1,
  MOVE N'database_name' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name.mdf',
  MOVE N'database_name_index' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_index.ndf',
  MOVE N'database_name_log' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_log.ldf',
  NOUNLOAD,
  STATS = 5

  GO

@Craig Efreinによって提案されたクエリの結果

データベースのシャットダウン時に開いているトランザクション/ユーザーがあったか、データベースにチェックポイントが発生しなかったか、データベースが読み取り専用だったため、ログを再構築できません。このエラーは、ハードウェアまたは環境の障害が原因でトランザクションログファイルが手動で削除されたか失われた場合に発生する可能性があります。

14
evictednoise

チャットに移動したコメントから、OPからのこのメモ:

GUIで接続してみました。 .mdfファイルを選択したとき、SSMSはデータベースが3つのファイル(データ、インデックス、ログ)で構成されていることを識別しましたが、WITH MOVEを復元しているにもかかわらず、ファイルパスに関するデータベースの詳細が間違っていると言っていました。古いログ/データ/インデックスファイルを指定しただけです。データベースはオンラインです。

2
RDFozz