এসকিউএল সার্ভার ২০০৮ আর 2 লেনদেন লগগুলির সাথে কপিওয়াইথলি সম্পূর্ণ ব্যাকআপ পুনরুদ্ধার করুন


11

কিছু গবেষণা করার পরেও আমি এই প্রশ্নের উত্তর খুঁজে পাচ্ছি না।

পটভূমি আমি একটি ব্যাকআপ পরিকল্পনা সেটআপ করার চেষ্টা করছি যা নিম্নলিখিত তিনটি প্রয়োজনীয়তার সাথে খাপ খায়:

  1. রাতভর পুরো ব্যাকআপ থাকায় ব্যাকআপের নির্ভরযোগ্যতা
  2. লেনদেনের লগ ব্যাকআপগুলি যা থেকে পুনরুদ্ধার করা যায়
  3. ডিস্ক স্পেস ব্যবহারের পরিমাণ কম
  4. নিরীক্ষণের সরঞ্জামটির জন্য ব্যাকআপগুলি অবশ্যই স্থানীয়ভাবে অ্যাক্সেসযোগ্য

সুতরাং এই প্রয়োজনগুলি মাপসই করার জন্য আমি সাপ্তাহিক, ডিফারেনশিয়াল, এবং প্রতি ঘন্টা লেনদেনের জন্য পুরো ব্যাকআপগুলি নিয়ে ভাবছি। তারপরে প্রতি রাতে একটি অনুলিপি-ব্যতীত ব্যাকআপ চলবে যা অফসাইটে প্রেরণ করা যায়, এই ব্যাকআপটি এমনভাবে করা হয় যাতে লগ চেইনটি ভেঙে না যায় এবং আমাদের কাছে এতগুলি স্থানীয় ডিস্কের জায়গা না খেয়েই নির্ভরযোগ্য রাত্রি পূর্ণ ব্যাকআপস অফসাইট থাকে।

প্রশ্ন কি অনুলিপি-অনুলিপি ব্যাকআপ থেকে পুনরুদ্ধার করা এবং লেনদেন লগগুলি পরে পুনরুদ্ধার করা সম্ভব?

আমাকে কেবল একটি উদাহরণ দিন যাতে আপনি জানেন যে আমি কী সম্পর্কে বলছি।

নীচের তালিকাটি ব্যবহার করে আমি ভাবছি যে ট্রানজেকশন ব্যাকআপ.জিআরএন, ট্রানজেকশনব্যাক.এইচআরএন, অবশেষে ট্রানজেকশনব্যাকআইপিআরএন এর পরে ফুলব্যাকআপসিপিওয়াইথএলএইচ.বাক পুনরুদ্ধার করা সম্ভব কিনা?

> ---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

সম্ভবত এই পুরো সেটআপটি যুক্তিসঙ্গত নয় আমি এসকিউএল সার্ভারে মোটামুটি নতুন এবং আমি যাবার সময় শেখার চেষ্টা করছি। কোন পরামর্শ / সহায়তা প্রশংসা করা হবে।

উত্তর:


14

এসকিউএল সার্ভার ২০০৮-এ একটি সম্পূর্ণ ব্যাকআপ লগ চেইনটি ভেঙে দেয় না। এটি কেবল ডিফারেনশিয়াল বেস-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. সম্পূর্ণ
  2. লগিন
  3. সম্পূর্ণ
  4. সম্পূর্ণ অনুলিপি_আপনি
  5. লগিন

এরপরে ডাটাবেসটি ফেলে দেওয়া এবং পুনরুদ্ধার করা হবে:

  1. 1 ম পূর্ণ
  2. 1 ম লগ
  3. ২ য় লগ

নিম্নলিখিতটি SELECTপুনরুদ্ধারটি সফল হয়েছিল তা দেখায়।

এটি দেখায় যে COP_ONLYলগ শৃঙ্খলা ভেঙে একটিও বা সাধারণ ফুল ব্যাকআপ নয়।

তারপরে ডাটাবেসটি আবার ফেলে দেওয়া হবে এবং এটি পুনরুদ্ধার করা হবে:

  1. অনুলিপি_ কেবলমাত্র পূর্ণ
  2. ২ য় লগ

এরপরে 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 ম পূর্ণ
  2. 1 ম ডিফারেনশিয়াল
  3. ২ য় পূর্ণ
  4. ২ য় ডিফারেনশিয়াল
  5. অনুলিপি_অনালি ডিফ
  6. 3 য় ডিফারেনশিয়াল

এটি পরে এই পুনরুদ্ধার রুটটি চেষ্টা করে:

  1. 1 ম পূর্ণ
  2. 1 ম ডিফারেনশিয়াল
  3. ২ য় ডিফারেনশিয়াল

পদক্ষেপ 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.

এটি দেখায় যে একটি সাধারণ পূর্ণ ব্যাকআপ ডিফারেনশিয়াল চেইনটি ভেঙে দেয়।

এরপরে ডাটাবেসটি ফেলে দেওয়া হবে এবং এই পুনরুদ্ধার প্রবাহটি চেষ্টা করা হবে:

  1. অনুলিপি_ কেবলমাত্র পূর্ণ
  2. 3 য় ডিফারেনশিয়াল

পদক্ষেপ 2 উপরের ধাপ 3 হিসাবে একই ত্রুটি দিয়ে ব্যর্থ হয়। এটি দেখায় যে একটি অনুলিপি পুনরুদ্ধারের জন্য কেবল অনুলিপি ব্যাকআপ ব্যবহার করা যাবে না।

এরপরে ডাটাবেসটি আবার ফেলে দেওয়া হয় এবং নিম্নলিখিত পুনরুদ্ধারটি কার্যকর করা হয়:

  1. ২ য় পূর্ণ
  2. ২ য় ডিফারেনশিয়াল
  3. 3 য় ডিফারেনশিয়াল

নিম্নলিখিত নির্বাচনগুলি প্রমাণ করে যে এই পুনরুদ্ধারটি সফল হয়েছে। এটি দেখায় যে একটি COPY_ONLYসম্পূর্ণ ব্যাকআপ ডিফারেন্সিয়াল চেইনে বাধা দেয় না।


আপনি কোনও অনুলিপি-সম্পূর্ণ ফুল ব্যাকআপে লেনদেন লগ প্রয়োগ করতে পারেন কিনা সে সম্পর্কে আমি তথ্য খুঁজছিলাম। এই সত্যিই ভাল তথ্য!
Brain2000

2

ডিফারেনশিয়াল জড়িত থাকাকালীন এখানে যা ঘটেছিল তা এখানে:

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;

এক কথায়: হ্যাঁ, আপনি COPY_ONLYআরও লগ ব্যাকআপগুলি পুনরুদ্ধার করতে একটি ব্যাকআপ ব্যবহার করতে পারেন । আপনি যা করতে পারবেন না তা হ'ল COPY_ONLYব্যাকআপটি ডিফারেন্সিয়াল বেস হিসাবে ব্যবহার করা । এর অর্থ আপনি পুনরুদ্ধার COPY_ONLYব্যাকআপে কোনও ডিফারেনশিয়াল ব্যাকআপ পুনরুদ্ধার করতে সক্ষম হবেন না :

DROP DATABASE BakTst13;
GO
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Full_C' WITH NORECOVERY;
RESTORE DATABASE BakTst13 FROM DISK='BakTst13_Diff_2' WITH NORECOVERY;

আপনি যদি এটি চেষ্টা করেন তবে আপনি একটি ত্রুটি পাবেন:

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.

ডিফারেনশিয়াল ব্যাকআপগুলি বুঝতে অসুবিধা হতে পারে এবং অভিজ্ঞ ডিবিএকে বোকাও বানাতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.