1. ホーム
  2. sql-server

[解決済み] SQL Serverです。データベースが "復元" 状態で停止している

2022-03-16 19:33:39

質問

データベースのバックアップをとりました。

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

解決方法は?

を使用する必要があります。 WITH RECOVERY オプションを使用し、データベースの RESTORE コマンドを使用して、リストア処理の一部としてデータベースをオンラインにすることができます。

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

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

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

SQL Server Management Studio のデータベース復元ウィザードを使用すると、より成功する可能性があります。この方法では、特定のファイルの場所、上書きオプション、WITHリカバリーオプションを選択することができます。