Pur*_*ome 7 sql-server-2008 sql-server backup filegroups restore
以前,在 ServerFault 上,我问了一个关于备份和恢复 Sql Server 2008 文件组的问题。
今天,当我尝试RESTORE这些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).
Run Code Online (Sandbox Code Playgroud)
我使用了以下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
Run Code Online (Sandbox Code Playgroud)
所以我假设数据库没有正确备份?
这是我用来备份的脚本 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
Run Code Online (Sandbox Code Playgroud)
干杯!
小智 2
正如消息中所述,您必须将日志备份还原到文件组备份的时间点。为了使数据库联机,需要将日志回放到同一时间点,以使数据库保持一致。然而,仅恢复主文件组是一种特殊情况。我相信为了恢复主文件组,您几乎必须执行完整恢复,而不仅仅是文件组。(我对此并不乐观,但相信下面的文字指出了这一要求。)
重做一致性
在重做阶段,数据总是前滚到与恢复点数据库状态重做一致的点。所有数据都已前滚到可以进行撤消的点。
数据库的状态由主文件定义,如下:
如果正在恢复主文件,则恢复点决定整个数据库的状态。例如,如果将数据库恢复到表被意外删除之前的某个时间点,则整个数据库必须恢复到同一时间点。
如果未还原主文件,则数据库状态已知,并且还原的数据将前滚到与数据库事务一致的恢复点。SQL Server 强制执行此操作。
但是,数据库可能包含在恢复点未提交的事务所做的更改。对于在线恢复,数据被恢复到与数据库在线部分的当前状态一致的时间点。