SQL Server 2008 में एक पूर्ण बैकअप लॉग श्रृंखला को नहीं तोड़ता है। यह केवल डिफरेंशियल बेस-एलएसएन को रीसेट करता है।
आप केवल एक प्रतिलिपि से पुनर्स्थापित करने के बाद लॉग बैकअप भी पुनर्स्थापित कर सकते हैं। निम्नलिखित स्क्रिप्ट डेमो है कि:
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
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP LOG BakTst13
TO DISK = 'BakTst13_Log_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_2' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_C' WITH COPY_ONLY,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
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_1' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_1' WITH NORECOVERY;
RESTORE LOG BakTst13 FROM DISK='BakTst13_Log_2' WITH RECOVERY;
GO
SELECT * FROM BakTst13.dbo.tst;
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 * FROM BakTst13.dbo.tst;
GO
DROP DATABASE BakTst13;
यह एक डेटाबेस और एक तालिका बनाता है और उस तालिका में 50 पंक्तियों को सम्मिलित करता है। इस क्रम में उन आवेषणों के बीच कई बैकअप लिए जाते हैं:
- पूर्ण
- लॉग
- पूर्ण
- फुल कॉपी_ऑनली
- लॉग
अगला डेटाबेस इस तरह से गिराया और बहाल किया गया है:
- पहला पूर्ण
- पहला लॉग
- दूसरा लॉग
निम्नलिखित SELECT
दर्शाता है कि पुनर्स्थापना सफल रही।
इससे पता चलता है कि न तो एक COP_ONLY
सामान्य और न ही एक पूर्ण बैकअप लॉग श्रृंखला को तोड़ता है।
फिर डेटाबेस को फिर से गिरा दिया जाता है और इस तरह बहाल किया जाता है:
- कॉपी_ऑनली फुल
- दूसरा लॉग
बाद में SELECT
फिर से सफलता प्रदर्शित करता है।
यह दर्शाता है कि आप COPY_ONLY
अपने लॉग रिस्टोर के आधार के रूप में एक पूर्ण बैकअप का उपयोग कर सकते हैं ।
विभेदक परीक्षण
मैंने एक DIFFERENTIAL
संस्करण भी बनाया :
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
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_1' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_1' WITH DIFFERENTIAL,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_2' WITH INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_2' WITH DIFFERENTIAL,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Full_C' WITH COPY_ONLY,INIT,FORMAT;
GO
INSERT INTO dbo.tst DEFAULT VALUES
GO 10
GO
BACKUP DATABASE BakTst13
TO DISK = 'BakTst13_Diff_3' WITH DIFFERENTIAL,INIT,FORMAT;
GO
USE tempdb;
GO
DROP DATABASE BakTst13;
GO
RAISERROR('------> Starting restore F1, D1, D2',0,1)WITH NOWAIT;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_1' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_1' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_2' WITH NORECOVERY;--<--Fails!
GO
DROP DATABASE BakTst13;
GO
RAISERROR('------> Starting restore FC, D3',0,1)WITH NOWAIT;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_C' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_3' WITH NORECOVERY;--<--Fails!
GO
DROP DATABASE BakTst13;
GO
RAISERROR('------> Starting restore F2, D2, D3',0,1)WITH NOWAIT;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_2' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_2' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_3' WITH RECOVERY;
GO
SELECT * FROM BakTst13.dbo.tst;
GO
DROP DATABASE BakTst13;
इस क्रम में बैकअप लेता है:
- पहला पूर्ण
- पहला अंतर
- दूसरा पूर्ण
- दूसरा अंतर
- कॉपी_ऑनली डिफ
- तीसरा अंतर
यह तब इस बहाल मार्ग की कोशिश करता है:
- पहला पूर्ण
- पहला अंतर
- दूसरा अंतर
इस त्रुटि के साथ चरण 3 विफल रहता है:
Msg 3136, Level 16, State 1, Line 4
This differential backup cannot be restored because the database has not been restored to the correct earlier state.
इससे पता चलता है कि एक सामान्य पूर्ण बैकअप अंतर श्रृंखला को तोड़ता है।
अगला डेटाबेस गिरा दिया गया है और इस पुनर्स्थापना प्रवाह का प्रयास किया गया है:
- कॉपी_ऑनली फुल
- तीसरा अंतर
चरण 2 उपरोक्त चरण 3 के समान त्रुटि के साथ विफल हो जाता है। इससे पता चलता है कि अंतर बैकअप के लिए आधार के रूप में केवल एक कॉपी बैकअप का उपयोग नहीं किया जा सकता है।
फिर डेटाबेस फिर से गिरा दिया जाता है और निम्नलिखित पुनर्स्थापना को निष्पादित किया जाता है:
- दूसरा पूर्ण
- दूसरा अंतर
- तीसरा अंतर
निम्न चयन साबित करता है कि यह पुनर्स्थापना सफल रही। यह दिखाता है कि एक COPY_ONLY
पूर्ण बैकअप अंतर श्रृंखला को बाधित नहीं करता है।