以前は、ServerFaultで 私は質問しました Sql Server 2008ファイルグループのバックアップと復元について。
今日、これらのRESTORE
バックアップの1つをFILEGROUP
しようとすると、次のエラーが発生しました:-
Processed 1895080 pages for database 'XWing', file 'XWing' on file 1.
Processed 4 pages for database 'XWing', file 'XWing_log' on file 1.
The database cannot be recovered because the log was not restored.
The database cannot be recovered because the log was not restored.
The roll forward start point is now at log sequence number (LSN) 221218000000010400001. Additional roll forward past LSN 221218000000010400001 is required to complete the restore sequence.
This RESTORE statement successfully performed some actions, but the database could not be brought online because one or more RESTORE steps are needed. Previous messages indicate reasons why recovery cannot occur at this point.
RESTORE DATABASE ... FILE=<name> successfully processed 1895084 pages in 69.504 seconds (213.014 MB/sec).
次のSQLコードを使用しました...
alter Database [XWing] SET SINGLE_USER With ROLLBACK IMMEDIATE
restore database [XWing] filegroup = 'PRIMARY'
FROM DISK = N'C:\Temp\XWing Manual Full Primary Filegroup.bak'
with
MOVE N'XWing' TO N'D:\XWing.mdf',
MOVE N'XWing_log' TO N'L:\XWing_Log.ldf',
replace, recovery
それで、DBが正しくバックアップされていないと思いますか?
これは、PRIMARY FILEGROUP
をバックアップするために私が作成したスクリプトです
BACKUP DATABASE [XWing] FILEGROUP = N'PRIMARY'
TO DISK = N'F:\Sql DB Backups\XWing Manual Full Primary Filegroup.bak' WITH NOFORMAT, INIT,
NAME = N'XWing-Full Filegroup Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'XWing' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'XWing' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''XWing'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'F:\Sql DB Backups\XWing Manual Full Primary Filegroup.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO
乾杯!
トランザクションログを復元して、データベースの整合性を保つ必要があります。現在、復元したファイルグループは、他のデータベースとは異なる時点にあります。ログがロールフォワードされ、すべてが整合したら、データベースをオンラインにすることができます。
Msdbデータベースのデータを見ると、データベースをオンラインにするために復元する必要があるトランザクションログファイルを確認できます。
バックアップとリカバリの構文に問題はありません。
メッセージに記載されているように、ファイルグループバックアップの時点までのログバックアップを復元する必要があります。データベースをオンラインにするには、データベースの整合性を保つために、ログを同じ時点まで再生する必要があります。ただし、プライマリファイルグループのみを復元するのは特別な状況です。プライマリファイルグループを復元するには、ファイルグループだけでなく、完全な復元を行う必要があります。 (私はそれについて肯定的ではありませんが、以下のテキストがその要件を示していると信じています。)
SQL Serverでのバックアップの復元と回復のしくみについて
一貫性をやり直す
REDOフェーズでは、データは常に、リカバリポイントでのデータベースの状態と一貫性のあるREDOになるポイントまでロールフォワードされます。すべてのデータは、元に戻すことができるポイントまでロールフォワードされました。
データベースの状態は、次のようにプライマリファイルによって定義されます。
プライマリファイルが復元されている場合、リカバリポイントはデータベース全体の状態を決定します。たとえば、テーブルが誤って削除される直前の時点にデータベースを回復している場合、データベース全体を同じ時点に復元する必要があります。
プライマリファイルが復元されていない場合、データベースの状態は既知であり、復元されたデータは、データベースとトランザクションの一貫性がある復旧ポイントにロールフォワードされます。 SQL Serverはこれを強制します。
ただし、データベースには、リカバリポイントでコミットされていないトランザクションによって行われた変更が含まれる場合があります。オンライン復元の場合、データはデータベースのオンライン部分の現在の状態と一致する時点まで回復されます。