--Backup/restore test script for SQL Server (tested with 2012)
CREATE DATABASE BackupTest
GO
ALTER DATABASE BackupTest
SET RECOVERY FULL WITH NO_WAIT
GO
CREATE TABLE BackupTest.dbo.MsgLog (
ID INT IDENTITY
CONSTRAINT PK_MsgLog PRIMARY KEY,
MsgText VARCHAR(MAX)
)
GO
--Simulate some transactions
, perform trx
log backups...
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before FULL backup')
GO
BACKUP DATABASE BackupTest TO DISK = 'BackupTest.Full.bak' WITH INIT
GO
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #1')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.01.trn' WITH INIT
GO
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #2')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.02.trn' WITH INIT
GO
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #3')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.03.trn' WITH INIT
GO
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #4')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.04.trn' WITH INIT
GO
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #5')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.05.trn' WITH INIT
GO
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #6')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.06.trn' WITH INIT
GO
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #7')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.07.trn' WITH INIT
GO
--Assume the above backup completed, but RESTORE VERIFY ONLY indicates a bad backup.
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before DIFFERENTIAL backup.')
GO
--Perform a diff backup to use as a baseline
for upcoming trx
log backups.
BACKUP DATABASE BackupTest TO DISK = 'BackupTest.Diff.bak' WITH DIFFERENTIAL, INIT
GO
--Continue to simulate some transactions
, perform trx
log backups...
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #8')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.08.trn' WITH INIT
GO
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #9')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.09.trn' WITH INIT
GO
INSERT INTO BackupTest.dbo.MsgLog (MsgText) VALUES ('Inserted before Trx Log backup #10')
GO
BACKUP LOG BackupTest TO DISK = 'BackupTest.10.trn' WITH INIT
GO
--Disaster Recovery event takes place. Time to save the data.
--Restore full.
RESTORE DATABASE BackupTest
FROM DISK = 'BackupTest.Full.bak'
WITH REPLACE, NORECOVERY
GO
--Restore diff.
RESTORE DATABASE BackupTest
FROM DISK = 'BackupTest.Diff.bak'
WITH NORECOVERY
GO
--Skip all trx
log backups created prior to the diff
, --Restore all trx
log backups created after the diff.
RESTORE DATABASE BackupTest
FROM DISK = 'BackupTest.08.trn'
WITH NORECOVERY
GO
RESTORE DATABASE BackupTest
FROM DISK = 'BackupTest.09.trn'
WITH NORECOVERY
GO
RESTORE DATABASE BackupTest
FROM DISK = 'BackupTest.10.trn'
WITH NORECOVERY
GO
RESTORE DATABASE BackupTest
WITH RECOVERY
GO
--Verify no data is lost.
SELECT *
FROM BackupTest.dbo.MsgLog