এসকিউএল সার্ভার 2012 নতুন ডিবি নামে ব্যাকআপ পুনরুদ্ধার করুন


16

আমি মনে করি মনে হয়, ২০০৮ সালে, আপনি পুনরুদ্ধার-উইজার্ড থেকে "গন্তব্য ডেটাবেস" ক্ষেত্রে নাম পরিবর্তন করে কোনও ডিবি-র একটি নতুন অনুলিপিতে ব্যাকআপ পুনরুদ্ধার করতে পারেন। এটি একেবারে নতুন ডিবি তৈরি করবে, যা আপনার ইচ্ছা মত সময়ে পুনরুদ্ধার করা মূল ডিবি-র একটি অনুলিপি। এসকিউএল 2012 এটি কীভাবে করা যায় তা আমার জীবনের জন্য নির্ধারিত হয়নি।

এখন, আমি বুঝতে পেরেছি (অ্যারন বার্ট্র্যান্ডকে ধন্যবাদ) যে এটি আসলে পরিবর্তন হয়নি, এবং 2012 এটি আমার কাছে আরও স্পষ্ট করে তুলছে যে এই কৌশলটি প্রথমে একটি খারাপ ধারণা ছিল!

সুতরাং, আমার যা করা দরকার তা হ'ল: বিদ্যমান ডিবি, 'মাইডিবি' এর ব্যাকআপ ফাইলগুলি ব্যবহার করে একটি নতুন ডিবি, 'মাইডিবি_কপি' তৈরি করুন। আমাদের কাছে রাতের ফুল-ব্যাকআপ (.বাক) এবং প্রতি-15 মিনিটের টিএলগস (.trn) রয়েছে। আমি চাই না যে বিদ্যমান 'মাইডিবি' কোনওভাবেই প্রভাবিত / ছোঁয়া হোক, কারণ এটি "লাইভ"।

মূল ফুল-ব্যাকআপ ফাইলটি থেকে MyDB_Copy তৈরি হওয়ার পরে, আমাকে এটির পরে নির্দিষ্ট সময়ে পৌঁছানোর জন্য কয়েক ডজন টিএলগ ব্যাকআপ পুনরুদ্ধার করতে হবে।


আপনি বা অ্যারন ভাগ করে নিতে পারেন কেন এটি খারাপ ধারণা? বা ইস্যুটির লিঙ্ক যেখানে এটি ব্যাখ্যা করা হয়েছে?
Thronk

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

উত্তর:


18

ডকুমেন্টেশনে উদাহরণ ই এর উপর ভিত্তি করে একটি নতুন ক্যোয়ারী উইন্ডো খুলুন এবং রান করুন:

RESTORE DATABASE MyDB_Copy FROM DISK = 'C:\blahblah\MyDB.bak'
  WITH REPLACE, RECOVERY,
  MOVE 'MyDB' TO 'C:\blahblah\Data\MyDB_Copy.mdf',
---------------------------------------^^^^^
  MOVE 'MyDB_log' TO 'C:\blahblah\Data\MyDB_Copy.ldf';
-------------------------------------------^^^^^

যৌক্তিক নামগুলি গুরুত্বপূর্ণ নয়; শারীরিক ফাইলের নাম। এটি আপনার যৌক্তিক ফাইলের নামগুলি সম্পর্কে অনুমান করে এবং এখানে কেবল দুটি রয়েছে; EXEC MyDB..sp_helpfile;নিশ্চিত হতে চালান ।

আপনার যদি লগগুলি পুনরুদ্ধার করতে RECOVERYহয় তবে তারপরে পরিবর্তন করুন NORECOVERY:

  WITH REPLACE, NORECOVERY,
----------------^^

তারপরে আপনি একটি সিরিজ ইস্যু করতে পারেন:

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\file1.trn' WITH NORECOVERY;

এবং একেবারে শেষের দিকে:

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH RECOVERY;

অথবা যদি আপনার কেবলমাত্র সময়সীমা অবধি লগ-আপের কিছু অংশ প্রয়োজন হয় (আমি ধরে নিয়েছি আপনি এলএসএন এবং সময়গুলি কোথায় পরীক্ষা করেছেন যাতে আপনার ঠিক কোন ফাইলগুলি প্রয়োজন তা আপনি জেনে যেতে পারেন):

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH 
  STOPAT = '<some point in time Friday>', RECOVERY;

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


ঠিক আছে, এটি কিছুটা সাহায্য করেছে। শুক্রবার রাতে এটি ডিবিটিকে ফিরিয়ে আনতে এখন আমার কয়েক ডজন টিআরএন ফাইল পুনরুদ্ধার করা দরকার (পুরো ব্যাকআপগুলি কেবল প্রতিদিন হয়; প্রতি 15 মিনিটে টিএলএগ ব্যাকআপ হয়)। আপনার নমুনাটি ব্যবহার করে, আমি মূল বেক ফাইল থেকে ডিবি তৈরি করেছি, তবে লগটি পুনরুদ্ধার করতে অনুরূপ বিবৃতি দেওয়ার চেষ্টা করার সময় আমি একটি নতুন ত্রুটি পেয়েছি। এটি বলে যে "লগ বা ডিফারেনশিয়াল ব্যাকআপ পুনরুদ্ধার করা যাবে না কারণ কোনও ফাইল রোলফোরওয়ার্ডের জন্য প্রস্তুত নয়"।
NateJ

@ নাটজে আপনার তখন একটি পূর্ণ প্রশ্ন জিজ্ঞাসা করা উচিত। :-)
অ্যারন বারট্র্যান্ড

1
দুর্দান্ত, আমি এখন এটি টাইপ করছি! আপনার সাহায্যের জন্য অনেক ধন্যবাদ। আমি স্তম্ভিত যে স্ট্যাকওভারফ্লোতে আমি কয়েকটি নেতিবাচক প্রতিনিধি পেয়েছি তবে যদি এটি কাজ করে তবে এটির পক্ষে এটি উপযুক্ত হবে।
NateJ

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

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

0

একই ডাটাবেসটিকে একাধিকবার পুনরুদ্ধার করতে আপনাকে যা করতে হবে তা হ'ল সেই ডাটাবেসের জন্য ডিস্ক ফাইলগুলির নাম পরিবর্তন করা। স্পষ্টতই আপনার এসকিউএল সার্ভারের অন্য কোনও ডাটাবেসে ডাটাবেসকে আলাদা নাম দেওয়া দরকার। এসএসএমএসে আপনি পুনরুদ্ধারের জন্য .bak ফাইলটি নির্বাচন করার পরে এবং ডাটাবেসের জন্য নামটি টাইপ করার পরে, আপনি তারপরে বামদিকে "একটি পৃষ্ঠা নির্বাচন করুন" বিভাগে 'ফাইলগুলি' ক্লিক করুন এবং কেবলমাত্র ডিস্ক ফাইলের নাম পরিবর্তন করুন।

চিয়ার্স ড

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