পার্থক্যযুক্ত ব্যাকআপ ইস্যু - কেন? এটা কি সম্ভব?


13

আমি এসকিউএল সার্ভার 2014 ব্যবহার করছি এবং এই অবস্থা:

  • আমি সার্ভার এ এবং সার্ভার বি।
  • রাতারাতি ETL সার্ভার এ প্রসেস করা হয় A.
  • লোডিং প্রক্রিয়াটি সমাপ্ত হওয়ার পরে, ডাটাবেস এক্স ব্যাক আপ হয়ে যায় (সাথে CHECKSUMএবং RESTORE VERIFYONLYনির্ভরযোগ্যতা নিশ্চিত করে) এবং তারপরে সার্ভার বিতে প্রেরণ পাবেন
  • সার্ভার বি bakফাইলটি গ্রহণ করে এবং তারপরে সেখানে ডাটাবেস পুনরুদ্ধার করে।

আমি ডিফারেনশিয়াল ব্যাকআপ কৌশলটি ব্যবহার করতে চাই যাতে:

  1. সম্পূর্ণ ব্যাকআপ কেবলমাত্র শনিবারেই করা হয়
    অর্থাৎ শনিবার সার্ভার এ-তে সম্পূর্ণ ব্যাকআপ -> সার্ভার বিতে শিপ -> সার্ভার বিতে সম্পূর্ণ ব্যাকআপ পুনরুদ্ধার করুন

  2. বাকি দিনগুলি
    ডিফারেনশিয়াল ব্যাকআপ হবে যেমন সার্ভার এ ডিফারেনশিয়াল ব্যাকআপ -> সার্ভার বি থেকে শিপ -> সার্ভার বিতে ডিফারেনশিয়াল ব্যাকআপ পুনরুদ্ধার করুন

আমি চেষ্টা করেছি কিন্তু আমি একটি ত্রুটি পেয়েছি:

লগ বা ডিফারেনশিয়াল ব্যাকআপ পুনরুদ্ধার করা যাবে না কারণ কোনও ফাইল রোলফোরওয়ার্ডের জন্য প্রস্তুত নয়।

নিশ্চিত কেন। আমি sys.database_filesসার্ভার A এবং সার্ভার বিতে চেক করেছি এবং আমি দেখতে পাচ্ছি যে differential_Base_LSNএবং differential_base_GUIDএটি একই রকম। কোথাও / অন্য কিছু চেক করতে?

উপায়ে, উপরের ২ য় ধাপে, যখন আমি সার্ভার বি তে ডিফ ব্যাকআপটি পুনরুদ্ধার করছি, আমার কি সর্বদা পুরো ব্যাকআপ + প্রতিবারই ডিফারেনশিয়াল ব্যাকআপ উভয়ই পুনরুদ্ধার করা দরকার?

আমি কেবলমাত্র ডিফারেনশিয়াল ব্যাকআপ পুনরুদ্ধার করেছি WITH RECOVERY(এবং সেই ত্রুটি বার্তাটি পেয়েছি) কারণ পুরো ব্যাকআপটি আগের দিনই পুনরুদ্ধার করা হয়েছিল।

স্পষ্ট করার জন্য: হ্যাঁ, আমি চাই সার্ভার বিতে থাকা ডিবিটি পার্থক্যের মধ্যে পঠনযোগ্য হোক। আমি কিভাবে এটি কাছাকাছি পেতে পারি? প্রতি রাতে আমার কি RESTORE FULL (WITH NORECOVERY)+ RESTORE DIFF (WITH RECOVERY)কম্বো সিকোয়েন্সের একমাত্র বিকল্প ?

কোন গাইডেন্স প্রশংসা করা হবে।

উত্তর:


15

আপনার এখানে RECOVERYএবং NORECOVERYএখানে গোলযোগের দরকার নেই, আপনার প্রয়োজন সমস্ত STANDBYবিকল্প। এটি কীভাবে ব্যবহার করবেন সে সম্পর্কে এখানে একটি দ্রুত ডেমো রয়েছে।

একটি ডাটাবেস তৈরি করুন, এটিকে সহজ পুনরুদ্ধারে সেট করুন এবং একটি টেবিল তৈরি করুন।

ডেটা .োকান, কিছু ভিন্নতা নিন।

মজা, তাই না?

USE master;

/*Create a dummy database*/
CREATE DATABASE DiffRestoreTest

/*We simple now*/
ALTER DATABASE DiffRestoreTest SET RECOVERY SIMPLE

/*Context is everything*/
USE DiffRestoreTest

/*If nothing changes, do we even need a diff backup?*/
CREATE TABLE dbo.t1 (Id INT)

/*Take a full backup, dummy*/
BACKUP DATABASE DiffRestoreTest 
TO DISK = 'F:\Backup\DRT_FULL.bak' 
WITH INIT, FORMAT, COMPRESSION

/*Make a change*/
INSERT dbo.t1 (Id )
VALUES ( 1 )

/*Take a differential backup*/
BACKUP DATABASE DiffRestoreTest 
TO DISK = 'F:\Backup\DRT_DIFF_1.bak' 
WITH INIT, FORMAT, COMPRESSION, DIFFERENTIAL

/*Make another change*/
INSERT dbo.t1 (Id )
VALUES ( 2 )

/*Take another diff backup*/
BACKUP DATABASE DiffRestoreTest  
TO DISK = 'F:\Backup\DRT_DIFF_2.bak' 
WITH INIT, FORMAT, COMPRESSION, DIFFERENTIAL

/*Make another change*/
INSERT dbo.t1 (Id )
VALUES ( 3 )

/*Take another diff backup*/
BACKUP DATABASE DiffRestoreTest 
TO DISK = 'F:\Backup\DRT_DIFF_3.bak' 
WITH INIT, FORMAT, COMPRESSION, DIFFERENTIAL

হ্যাঁ, আমি মিথ্যা বললাম। এটি বিরক্তিকর অংশ।

আপনি এখানে আপনার সম্পূর্ণ ব্যাকআপ পুনরুদ্ধার করতে পারেন STANDBY:

/*Exit stage left*/
USE master

/*Restore the full backup*/
RESTORE DATABASE DiffRestoreTest
FROM DISK = 'F:\Backup\DRT_FULL.bak' 
WITH REPLACE, STANDBY = 'F:\Backup\DRT_STANDBY.tuf'

আপনি এর সাথে ক্রমে ডিফগুলি পুনরুদ্ধার করতে পারেন STANDBY:

/*Square one*/
RESTORE DATABASE DiffRestoreTest
FROM DISK = 'F:\Backup\DRT_DIFF_1.bak' 
WITH STANDBY = 'F:\Backup\DRT_STANDBY.tuf'

/*Square 2*/
RESTORE DATABASE DiffRestoreTest
FROM DISK = 'F:\Backup\DRT_DIFF_2.bak' 
WITH STANDBY = 'F:\Backup\DRT_STANDBY.tuf'

/*Square 3*/
RESTORE DATABASE DiffRestoreTest
FROM DISK = 'F:\Backup\DRT_DIFF_3.bak' 
WITH STANDBY = 'F:\Backup\DRT_STANDBY.tuf'

এবং এই সমস্যাযুক্ত লগ ফাইলগুলির বিপরীতে, ডিফগুলি পুনরুদ্ধার করার সময় আপনি এগিয়ে যেতে পারেন:

/*Restore the full backup*/
RESTORE DATABASE DiffRestoreTest
FROM DISK = 'F:\Backup\DRT_FULL.bak' 
WITH REPLACE, STANDBY = 'F:\Backup\DRT_STANDBY.tuf'

/*What happens if I try to jump the restores?*/
RESTORE DATABASE DiffRestoreTest
FROM DISK = 'F:\Backup\DRT_DIFF_3.bak' 
WITH STANDBY = 'F:\Backup\DRT_STANDBY.tuf'

আপনি যদি পঠনযোগ্যতা পরীক্ষা করতে চান তবে পুনরুদ্ধার কমান্ডগুলির মধ্যে এটি চালান। আপনার প্রত্যেকের সাথে আইডি বৃদ্ধি পাওয়া উচিত। আপনি যদি তা না করেন তবে আপনি ভয়ানক কিছু ভুল করেছেন।

মনে রাখবেন যে আপনি যখন ফাইলগুলি পুনরুদ্ধার করবেন তখন এটি কোনও শেষ ব্যবহারকারীকে ডাটাবেস থেকে সরিয়ে দেবে এবং এটি তাদের প্রশ্নের সমাপ্তির জন্য অপেক্ষা করবে না।

এটি কেবলমাত্র পঠন অবস্থায় ডাটাবেসকে ফেলে দেয়, এখানে কোনও পরিবর্তন আনা যায় না।

SELECT * 
FROM DiffRestoreTest.dbo.t1 AS t

এবং অবশেষে, নিজের পরে পরিষ্কার করুন।

/*Bring'er online, lad*/
RESTORE DATABASE DiffRestoreTest WITH RECOVERY

DROP DATABASE DiffRestoreTest

আশাকরি এটা সাহায্য করবে!!

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