এসকিউএল সার্ভার ২০০৮-এ একটি সম্পূর্ণ ব্যাকআপ লগ চেইনটি ভেঙে দেয় না। এটি কেবল ডিফারেনশিয়াল বেস-lsn পুনরায় সেট করে।
আপনি কেবল অনুলিপি থেকে পুনরুদ্ধার করার পরে লগ ব্যাকআপগুলি পুনরুদ্ধার করতে পারেন। নিম্নলিখিত স্ক্রিপ্ট ডেমো:
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 টি সারি সন্নিবেশ করায়। এই সন্নিবেশকারীদের মধ্যে বেশ কয়েকটি ব্যাকআপ এই ক্রমে নেওয়া হয়:
- সম্পূর্ণ
- লগিন
- সম্পূর্ণ
- সম্পূর্ণ অনুলিপি_আপনি
- লগিন
এরপরে ডাটাবেসটি ফেলে দেওয়া এবং পুনরুদ্ধার করা হবে:
- 1 ম পূর্ণ
- 1 ম লগ
- ২ য় লগ
নিম্নলিখিতটি 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;
এটি এই ক্রমে ব্যাকআপ নেয়:
- 1 ম পূর্ণ
- 1 ম ডিফারেনশিয়াল
- ২ য় পূর্ণ
- ২ য় ডিফারেনশিয়াল
- অনুলিপি_অনালি ডিফ
- 3 য় ডিফারেনশিয়াল
এটি পরে এই পুনরুদ্ধার রুটটি চেষ্টা করে:
- 1 ম পূর্ণ
- 1 ম ডিফারেনশিয়াল
- ২ য় ডিফারেনশিয়াল
পদক্ষেপ 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.
এটি দেখায় যে একটি সাধারণ পূর্ণ ব্যাকআপ ডিফারেনশিয়াল চেইনটি ভেঙে দেয়।
এরপরে ডাটাবেসটি ফেলে দেওয়া হবে এবং এই পুনরুদ্ধার প্রবাহটি চেষ্টা করা হবে:
- অনুলিপি_ কেবলমাত্র পূর্ণ
- 3 য় ডিফারেনশিয়াল
পদক্ষেপ 2 উপরের ধাপ 3 হিসাবে একই ত্রুটি দিয়ে ব্যর্থ হয়। এটি দেখায় যে একটি অনুলিপি পুনরুদ্ধারের জন্য কেবল অনুলিপি ব্যাকআপ ব্যবহার করা যাবে না।
এরপরে ডাটাবেসটি আবার ফেলে দেওয়া হয় এবং নিম্নলিখিত পুনরুদ্ধারটি কার্যকর করা হয়:
- ২ য় পূর্ণ
- ২ য় ডিফারেনশিয়াল
- 3 য় ডিফারেনশিয়াল
নিম্নলিখিত নির্বাচনগুলি প্রমাণ করে যে এই পুনরুদ্ধারটি সফল হয়েছে। এটি দেখায় যে একটি COPY_ONLY
সম্পূর্ণ ব্যাকআপ ডিফারেন্সিয়াল চেইনে বাধা দেয় না।