Après avoir fait des recherches, je ne peux pas sembler trouver une réponse à cette question.
Contexte Je tente de configurer un plan de sauvegarde qui correspond aux trois exigences suivantes:
Donc, pour répondre à ces besoins, je pense que les sauvegardes complètes hebdomadaires, différentielles quotidiennes et transactions horaires. Ensuite, chaque nuit, une sauvegarde de copy_only fonctionnerait qui peut être expédiée hors site, cette sauvegarde est terminée de manière à ce que la chaîne de journal ne soit pas cassée et que nous avons des sauvegardes complètes soigneusement fiables, sans avoir à manger autant d'espace de disque local.
La question est qu'il est possible de restaurer à partir de la sauvegarde de copy_only et de restaurer les journaux de transaction après.
Permettez-moi de donner un exemple pour que vous sachiez de quoi je parle.
En utilisant la liste ci-dessous, je me demande s'il est possible de restaurer FullBackupCopy_onlyc.onlyc.bak suivi de transactionBackupg.trn, transactionbackuph.trn, enfin transactionbackupi.trn
> ---List of Backups---
FullbackupA.bak 01/01/2013 00:00:00
> DifferntialbackupA.bak 02/01/2013 00:00:00
FullbackupCOPY_ONLYA.bak 02/01/2013 00:00:00
> TransactionbackupA.trn 02/01/2013 01:00:00
> TransactionbackupB.trn 02/01/2013 02:00:00
> TransactionbackupC.trn 02/01/2013 03:00:00
> DifferntialbackupB.bak 03/01/2013 00:00:00
FullbackupCOPY_ONLYB.bak 03/01/2013 00:00:00
> TransactionbackupD.trn 03/01/2013 01:00:00
> TransactionbackupE.trn 03/01/2013 02:00:00
> TransactionbackupF.trn 03/01/2013 03:00:00
> DifferntialbackupC.bak 04/01/2013 00:00:00
FullbackupCOPY_ONLYC.bak 04/01/2013 00:00:00
> TransactionbackupG.trn 04/01/2013 01:00:00
> TransactionbackupH.trn 04/01/2013 02:00:00
> TransactionbackupI.trn 04/01/2013 03:00:00
Peut-être que toute cette configuration n'est pas raisonnable, je suis assez nouveau à SQL Server et j'essaie d'apprendre comme je vais. Tout conseil/aide serait apprécié.
Voici ce qui se passe lorsque les différentiels sont impliqués:
CREATE DATABASE BakTst13;
GO
ALTER DATABASE BakTst13 SET RECOVERY FULL;
GO
USE BakTst13;
GO
CREATE TABLE dbo.tst(id INT IDENTITY(1,1));
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10 -- 10 rows so far
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10 -- 20 rows so far
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_1' WITH INIT,FORMAT,DIFFERENTIAL
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10 -- 30 rows so far
BACKUP LOG BakTst13
TO DISK = 'BakTst13_Log_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10 -- 40 rows so far
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_2' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10 -- 50 rows so far
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_C' WITH COPY_ONLY,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10 -- 60 rows so far
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_2' WITH INIT,FORMAT,DIFFERENTIAL
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10 -- 70 rows so far
GO
BACKUP LOG BakTst13
TO DISK = 'BakTst13_Log_2' WITH INIT,FORMAT;
GO
USE tempdb;
GO
DROP DATABASE BakTst13;
GO
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_2' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_2' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_2' WITH RECOVERY;
GO
SELECT COUNT(*) FROM BakTst13.dbo.tst; -- Must be 70: log chain not broken
GO
DROP DATABASE BakTst13;
GO
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_C' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_2' WITH RECOVERY;
GO
SELECT COUNT(*) FROM BakTst13.dbo.tst; -- Must be 70
GO
DROP DATABASE BakTst13;
En un mot: oui, vous pouvez utiliser un COPY_ONLY
Sauvegarde pour restaurer des sauvegardes de journal supplémentaires. Ce que vous ne pouvez pas faire, c'est utiliser le COPY_ONLY
Sauvegarde comme base différentielle. Cela signifie que vous ne serez pas en mesure de restaurer des sauvegardes différentielles sur la restaurée COPY_ONLY
sauvegarde:
DROP DATABASE BakTst13;
GO
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_C' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_2' WITH NORECOVERY;
Si vous essayez cela, vous obtiendrez une erreur:
Processed 160 pages for database 'BakTst13', file 'BakTst13' on file 1.
Processed 2 pages for database 'BakTst13', file 'BakTst13_log' on file 1.
RESTORE DATABASE successfully processed 162 pages in 0.009 seconds (139.811 MB/sec).
Msg 3136, Level 16, State 1, Line 2
This differential backup cannot be restored because the database has not been restored to the correct earlier state.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.
Les sauvegardes différentielles peuvent être difficiles à comprendre et peuvent tromper même les DBA expérimentés.