0

Je suis confronté à un problème lors de la restauration des bases de données à partir de sauvegardes différentielles. Voici les étapes que j'effectuéesSauvegardes différentielles dans SQL Server 2008; Capable de restaurer via SSMS mais incapable de restaurer via Transact SQL

DROP DATABASE DBName_delta 
GO 
BACKUP DATABASE DBName TO DISK = 'E:\Fullbak1.bak' 
GO 
RESTORE FILELISTONLY FROM DISK = 'E:\Fullbak.bak' 
GO 
RESTORE DATABASE DBName_delta 
    FROM DISK='E:\Fullbak.bak' 
    WITH MOVE 'DBName_Data' TO 'E:\DBData\DBName_delta.mdf', 
    MOVE 'DBName_Image_Data' TO 'E:\DBData\DBName_delta_Image_Data.mdf', 
    MOVE 'DBName_Log' TO 'D:\DBLog\DBName_delta.ldf', 
    NORECOVERY 

--Made Some changes in the database 
BACKUP DATABASE DBName 
    TO DISK = 'E:\DiffBak1.TRN' 
    WITH DIFFERENTIAL 
GO 

--Made Some more changes in the database  
BACKUP DATABASE DBName 
    TO DISK = 'E:\DiffBak2.TRN' 
    WITH DIFFERENTIAL 
GO 

RESTORE FILELISTONLY FROM DISK = 'E:\DiffBak1.TRN' 
GO 

RESTORE LOG DBName_delta FROM DISK='E:\DiffBak1.TRN' WITH NORECOVERY 
GO 

Msg 4305, niveau 16, état 1, ligne 2
Le journal dans ce jeu de sauvegarde commence à LSN 81125000000059600297, qui est trop récente pour appliquer à la base de données. Une sauvegarde de journal antérieure incluant LSN 81121000000116200001 peut être restaurée.

Msg 3013, niveau 16, état 1, ligne 2
RESTORE LOG se termine de manière anormale.

RESTORE FILELISTONLY FROM DISK = 'E:\DiffBak2.TRN' 
GO 
RESTORE LOG DBName_delta FROM DISK='E:\DiffBak2.TRN' WITH STANDBY = 'c:\undo.ldf' 
GO 

Mais quand j'ai essayé de restaurer la même E: \ DiffBak1.TRN par SSMS en utilisant l'option NORECOVERY, il a rétabli la base de données et encore j'ai pu effectuer la restauration du même fichier en utilisant le Transact SQL. Est-ce que j'ai râté quelque chose? Est-ce que cela a quelque chose à voir avec la base de données RESTORE? Je suis sûr que nous ne manquons aucun des journaux entre. Toute aide sera très appréciée.

Répondre

0

Je suis capable de comprendre cela. Comme je l'ai mentionné, j'ai été capable de restaurer la base de données différentielle via l'assistant SSMS, j'ai pris le script de l'assistant et découvert les différences dans la requête.

j'utilisais le code ci-dessous

RESTORE LOG DBName_delta FROM DISK='E:\DiffBak1.TRN' WITH NORECOVERY 
GO 

J'ai changé le code pour

RESTORE DATABASE [DBrel02t_delta] FROM DISK = N'E:\DiffBak1.TRN' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10 
GO 

Cela a résolu le problème. Utilisez la requête ci-dessous pour connaître les détails de votre sauvegarde.

RESTORE HEADERONLY FROM DISK = N’<backup file>’; 
+0

Cela signifie que vous avez un caractère non anglais dans le chemin du fichier. Le préfixe 'N' signifie que la chaîne est Unicode. Si tous les caractères étaient en anglais, cela ne serait pas nécessaire. –

+0

Pas exactement. Au lieu de restaurer le journal, le deuxième code restaurait la base de données. Cela a fait la différence. J'ai scénarisé l'étape et j'ai découvert la différence. –