একই সময়ে একই পয়েন্টে একাধিক ডাটাবেস ব্যাক আপ করা


10

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

ঠিক আছে, আমাকে প্রথমে আমার সমস্যাটি ব্যাখ্যা করতে দিন। ব্যাকআপ সম্পূর্ণ না হওয়া পর্যন্ত আমি বর্তমানে একক ব্যবহারকারী মোডে ডাটাবেস সেট করছি। এই মোডটি ব্যাকআপের প্রক্রিয়া চলাকালীন ডেটা পরিবর্তনগুলি এড়ানোর আমার উদ্দেশ্যটি সম্পাদন করবে। তবে আমার অ্যাপ্লিকেশনটি একাধিক ডাটাবেসের সাথে আবদ্ধ (প্রতিটি ডাটাবেস একে অপরের সাথে সংযুক্ত এবং সেখানে বিভিন্ন ডিবিএস রয়েছে যা মাসিক ভিত্তিতে তৈরি করে রাখে)। সুতরাং এই সমস্ত ডাটাবেস ব্যাক আপ করা ক্লান্তিকর প্রক্রিয়া হয়ে দাঁড়িয়েছে এবং আরও গুরুত্বপূর্ণ বিষয় হল যখন ব্যাকআপের প্রক্রিয়া চলছে তখন আমাকে ব্যবহারকারীদের সিস্টেমের বাইরে রাখতে হবে।

সুতরাং আমি ব্যাকআপ প্রক্রিয়া খুঁজছি যা নীচে উল্লিখিত প্রয়োজনীয়তা পূরণ করবে।

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

আমি যা চাই তা হ'ল - নির্দিষ্ট সময়ে সমস্ত ডিবিএসের ব্যাকআপ।


2
ব্যাকআপ নেওয়ার সময় আপনাকে আপনার ডাটাবেসটিকে একক-ব্যবহারকারী মোডে সেট করতে হবে না। এসকিউএল সার্ভার কখনই আপনার ব্যাকআপে নিবন্ধিত লেনদেনকে অন্তর্ভুক্ত করবে না। আরও সম্পূর্ণ উত্তরের জন্য, দয়া করে আপনার লেনদেন লগ ব্যাকআপ, পূর্ণ বা বর্ধিত ব্যাকআপ, সেই সাথে আপনি কী সমস্যায় ভুগছেন তার বিবরণ অন্তর্ভুক্ত করতে আপনার পোস্টটি সম্পাদনা করুন। এটি যেমন দাঁড়ায় আপনার প্রশ্নটি কিছুটা অস্পষ্ট।
ড্যানিয়েল হুটমাচার

1
আপনি এই ব্যাকআপটি দ্বারা কী অর্জন করতে চান? এই পয়েন্টে সম্পূর্ণ পুনরুদ্ধারযোগ্যতা - বা অন্য কিছু? অন্য কথায় ... আপনার যদি এই ব্যাকআপ থেকে পুনরুদ্ধার করতে হয় তবে কী পুনরুদ্ধার করা উচিত --- কোন ডিডিএল পরিবর্তন হয়? ডেটা পরিবর্তন, বা কি?
সত্তরতাবাদী

আপনি যা চান তা এসকিউএল ২০১২-এ সম্ভব নয় the এসকিউএল .0.০ দিনের মধ্যে, ব্যাকআপ স্টেটমেন্টটি শুরু হওয়ার সময় যেমন ছিল তখন ডাটাবেসটিকে পুনরায় তৈরি করতে ডাটাবেস ব্যাকআপ সেট ব্যবহার করা হত। এসকিউএল 2000 এবং এর পরে শুরু করে, একটি ডাটাবেস ব্যাকআপ সেটটি ডাটাবেসটিকে পুনরায় তৈরি করতে ব্যবহৃত হয়েছিল যেমনটি ব্যাকআপ বিবৃতিটি শেষ হওয়ার সময় ছিল।
স্ট্যাসিলারায়

@ ড্যানিয়েলহুতমাচার আমি পুরো ব্যাকআপগুলি খুঁজছি।
প্রবীণ

উত্তর:


13

আমি ধরে নিচ্ছি যে আপনার কাজটি ব্যাকআপের একটি সেট তৈরি করা যেখানে আপনি সেগুলি সমস্ত একক স্থির (কোনও উন্মুক্ত লেনদেন) পয়েন্টে (সমস্ত সিঙ্কে) পুনরুদ্ধার করতে পারেন। ডিবি 2-এ আপনার জন্য এক নিরিবিলি পয়েন্ট কী করবে Similar দুর্ভাগ্যক্রমে এসকিউএল সার্ভারে এমন কিছুই নেই যা হুবহু এটি করে। তবে, ধরে নেওয়া আপনার ডেটাবেসগুলি পুরো পুনরুদ্ধার মোডে রয়েছে, আপনি অনুরূপ কিছু করতে পারেন।

আপনি একবারে সমস্ত ডাটাবেস জুড়ে একটি একক MARKEDলেনদেন তৈরি করতে পারেন । তারপরে আপনি প্রতিটি ডাটাবেসের একটি লেনদেন লগ ব্যাকআপ নেন। ধরে নিই যে আপনি আপনার লগ ব্যাকআপগুলি রাখছেন (যা আপনার যাইহোক হওয়া উচিত) লগ ব্যাকআপগুলি খুব বেশি সময় নেয় না। এবং সিস্টেমে কাউকে থাকতে বাধা দেওয়ার দরকার নেই (আপনার চিহ্নিত লেনদেন তৈরি করতে আপনার পক্ষে যথেষ্ট দীর্ঘকাল বাদে)।

এই মুহুর্তে যদি আপনাকে একটি পুনরুদ্ধার করতে হয় তবে আপনি নিজের RESTORE STOPBEFOREMARKপ্রতিটি ডাটাবেসে একটি করে নিন। এটি একই ডাটাবেসে সমস্ত ডাটাবেস পুনরুদ্ধার করবে (আপনার লেনদেনের ভিত্তিতে)। দ্রষ্টব্য: আপনি যদি এই লেনদেনটি অন্তর্ভুক্ত করতে চান তবে একটি স্টপ্যাটমার্কও রয়েছে।

আপনি যদি উদাহরণ চান তবে অতিরিক্ত লিখিত কিছুটা পড়ার সাথে উপরের লিঙ্কটিতে আমি একটি পেয়েছি।

আমি বুঝতে পারি এটি আপনার প্রশ্নের সঠিক উত্তর দেয় না তবে আশা করি এটি আপনার সমস্যার সমাধান করে।


2
এভাবেই বিজটাল্ক একাধিক ডাটাবেসের পয়েন্ট-ইন-টাইম ব্যাকআপ পরিচালনা করে। যদি এটি মাইক্রোসফ্ট বিজটালকের পক্ষে কাজ করে তবে এটি বেশ কার্যকর পরীক্ষামূলক বৈশিষ্ট্য।
ম্যাক্স ভার্নন

আমরা এটি লগশিপিংয়ে টিএফএস ডাটাবেসের জন্য ব্যবহার করি আমরা সর্বদা অনন্যে পরিবর্তিত হয়েছি।
কিন শাহ

1
কেনের উত্তর বাড়ি চালানোর জন্য একটি (অন্তর্নিহিত তবে অপরিবর্তিত) বিশদ: আপনার একাধিক ডিবিতে সম্পূর্ণ ব্যাকআপ থাকতে পারে না। আপনি যে নিকটে আসতে পারেন তা হ'ল পুরো ব্যাকআপগুলির একটি রাউন্ড নেওয়া, সাথে সাথে একটি চিহ্নিত লেনদেন, তারপরে লগ ব্যাকআপগুলির একটি রাউন্ড। লগ ব্যাকআপের সেই প্রথম রাউন্ডটি সময়ের সাথে সামঞ্জস্যতাটিকে "সত্য" করবে "
এএমটাইউ

@ এম টু টেকনিক্যালি আপনি ওপিএস পদ্ধতি ব্যবহার করে করতে পারেন। সকলকে সিস্টেম থেকে লক আউট করুন, নিশ্চিত করুন যে কোনও সক্রিয় সংযোগ নেই (সম্ভবত কেবলমাত্র পঠিত / সীমাবদ্ধ হিসাবে ডাটাবেসগুলি চিহ্নিত করুন), তারপরে প্রতিটি ডাটাবেসের পুরো ব্যাকআপ নিন। তবে ওপি যেমন বলেছে যে এটি বিশ্বের সেরা পদ্ধতি নয়।
কেনেথ ফিশার

7

আপনার প্রশ্নটি আমি যেটার উত্তর দিয়েছি তার সাথে একই রকম - ব্যাক আপ নেওয়া এবং 10-20 এসকিউএল সার্ভার ডাটাবেসগুলিকে একটি সিঙ্ক্রোনাস অবস্থায় পুনরুদ্ধার করা?

আপনার ডাটাবেস পুনরুদ্ধারের মডেলটি সম্পূর্ণরূপে ধরে নেওয়া, আপনার একটি সম্পূর্ণ ব্যাকআপ নেওয়া উচিত এবং তারপরে চিহ্নিত লেনদেনগুলি ব্যবহার করা উচিত ।

আপনার পৌরাণিক কাহিনীকে নিষ্ক্রিয় করতে দেয় ...

একবারে সমস্ত ডিবিএসের ব্যাকআপ শুরু করুন এবং ব্যবহারের জন্য ডিবিটি ছেড়ে দিন।

ব্যাকআপ পৌরাণিক কাহিনী থেকে (আপনাকে সমস্ত ব্যাকআপের মিথগুলি পড়তে উচ্চভাবে পরামর্শ দিন) :

ব্যাকআপ ক্রিয়াকলাপগুলি ব্যবহারকারীর সামগ্রীতে লক নেয় না take ব্যাকআপগুলি আই / ও সাবসিস্টেমটিতে সত্যিই ভারী পঠন বোঝার কারণ হয়ে থাকে যাতে দেখে মনে হয় যে কাজের চাপটি অবরুদ্ধ করা হচ্ছে, তবে এটি বাস্তবে নয়। এটি স্লো হচ্ছে। একটি বিশেষ কেস রয়েছে যেখানে ব্যাকআপে বাল্ক-লগড এক্সটেন্টসগুলি গ্রহণ করতে হবে এমন একটি ফাইল লক নেবে যা চেকপয়েন্ট অপারেশনকে আটকাতে পারে - তবে ডিএমএল কখনও অবরুদ্ধ থাকে না।

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

চিহ্নিত লেনদেনগুলি আপনাকে অবিচ্ছিন্ন এলওজি ব্যাকআপ নিতে সহায়তা করবে এবং আপনি এগুলি ব্যবহার করে পুনরুদ্ধার করতে সক্ষম হবেনRESTORE ... WITH STOPBEFOREMARK = '<mark_name>'

মনে রাখবেন যে উদাহরণস্বরূপ সমস্ত ডাটাবেসের জন্য চিহ্নিত লেনদেনগুলিও ডাটাবেজে dbo.logmarkhistoryসারণীতে রেকর্ড করা হয় MSDB


-1
--]---- Begin Code ----[
--–declaring variables
DECLARE @dbname VARCHAR(100) -- database name
DECLARE @bupath VARCHAR(100) -- path for backup location
DECLARE @filename VARCHAR(100) -- filename used for backup files
DECLARE @datestamp VARCHAR(25) -- date used for backup file timestamp
-- specify database backup directory
SET @bupath = 'D:\DB Bkp\'
-- file date formatting
SELECT @datestamp = CONVERT(VARCHAR(20),GETDATE(),112) + REPLACE
(CONVERT(VARCHAR(20),GETDATE(),108),':','')
--specify databases to backup
DECLARE db_cursor CURSOR for
SELECT name
FROM master.dbo.sysdatabases
WHERE name not IN ('tempdb') -- excludes these databases, if excluding multiple databases, seprate them by a comma
--backup process
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
   SET @filename = @bupath + @dbname + '_' + @datestamp + '.bak'
   BACKUP DATABASE @dbname TO DISK = @filename WITH INIT,
   CHECKSUM; --init overwrites existing files with the same name, and checksum verifies the backup
       FETCH NEXT from db_cursor INTO @dbname
END
CLOSE db_cursor
DEALLOCATE db_cursor

আরও তথ্যের জন্য: https://blogs.technet.microsoft.com/letsdothis/2013/11/06/backup-m Multiple-sql-databases-in-a-single-swoop/


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