Auparavant, sur Serverfault J'ai posé une question À propos de la sauvegarde et de la restauration d'un groupe de fichiers SQL Server 2008.
Aujourd'hui, quand j'ai essayé de RESTORE
une de ces sauvegardes FILEGROUP
, j'ai eu l'erreur suivante: -
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).
J'ai utilisé le code SQL suivant ...
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
Donc, je suppose que le dB n'était pas sauvegardé correctement?
C'est le script que jed pour sauvegarder le 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
Acclamations!
Vous devez restaurer les journaux de transaction afin d'avoir une base de données cohérente. Actuellement, le groupe de fichiers que vous avez restauré est à un point différent de temps que le reste de la base de données. Une fois que les journaux ont été lancés en avant et que tout est cohérent, vous pouvez apporter la base de données en ligne.
Si vous envisagez les données de la base de données MSDB, vous pourrez voir quels fichiers journaux de transaction que vous devez restaurer afin d'apporter la base de données en ligne.
Il n'y a rien de mal à votre syntaxe de sauvegarde et de récupération.
Comme il l'étage dans le message, vous devez restaurer les sauvegardes de journal jusqu'au point à temps de la sauvegarde du groupe de fichiers. Pour apporter la base de données en ligne, il doit lire le journal du même point de temps pour que la base de données soit cohérente. Cependant, la restauration du groupe de fichiers principal est une situation particulière. Je crois que pour restaurer le groupe de fichiers primaire, vous devez tout à fait une restauration complète, pas seulement un groupe de fichiers. (Je ne suis pas positif à ce sujet, mais croyez que le texte ci-dessous indique cette exigence.)
Comprendre comment la restauration et la récupération des sauvegardes fonctionnent dans SQL Server
Refonçant la cohérence
Dans la phase REDO, les données sont toujours renvoyées vers un point rétabli avec l'état de la base de données au point de récupération. Toutes les données ont été renvoyées vers un point auquel une annulation peut se produire.
L'état de la base de données est défini par le fichier principal, comme suit:
Si le fichier principal est en cours de restauration, le point de récupération détermine l'état de l'ensemble de la base de données. Par exemple, si une base de données est récupérée sur un point à temps avant qu'une table a été supprimée accidentellement, toute la base de données doit être restaurée au même moment.
Si le fichier principal n'est pas restauré, l'état de la base de données est connu et que les données restaurées sont renvoyées vers un point de récupération qui est compatible transactionnellement avec la base de données. SQL Server applique ceci.
Toutefois, la base de données peut contenir des modifications apportées par des transactions non engagées au point de récupération. Pour la restauration en ligne, les données sont récupérées à un point à temps cohérent avec l'état actuel de la partie en ligne de la base de données.