এসকিউএল সার্ভার: ডাটাবেস "পুনরুদ্ধার" অবস্থায় আটকে আছে


564

আমি একটি ডাটাবেস ব্যাক আপ করেছি:

BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing

এবং তারপরে এটি পুনরুদ্ধার করার চেষ্টা করেছিল:

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE --force restore over specified database

এবং এখন ডাটাবেস পুনরুদ্ধার অবস্থায় আটকে আছে।

কিছু লোক থিয়োরাইজ করেছেন যে এটি ব্যাকআপটিতে কোনও লগ ফাইল ছিল না এবং এটি ব্যবহার করে এটি এগিয়ে নিয়ে যাওয়া দরকার:

RESTORE DATABASE MyDatabase
WITH RECOVERY 

অবশ্যই এটি ব্যতীত:

Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

এবং বিপর্যয়কর পরিস্থিতিতে আপনি যা চান তা হ'ল পুনরুদ্ধার যা কাজ করবে না।


ব্যাকআপটিতে ডেটা এবং লগ ফাইল উভয়ই থাকে:

RESTORE FILELISTONLY 
FROM DISK = 'MyDatabase.bak'

Logical Name    PhysicalName
=============   ===============
MyDatabase    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF

3
আমার ঠিক একই সমস্যা ছিল এবং সমাধানগুলির সমস্ত ব্যর্থ। মজার বিষয় হল, আমি সরাসরি এসকিউএল সার্ভারে লগইন DROP DATABASE dbকরে এসএসএমএসের মাধ্যমে কমান্ডটি জারি করেছিলাম এবং এটি কাজ করে (আগে আমি কমান্ডগুলি দেওয়ার জন্য অন্য মেশিন থেকে এসএসএমএস ব্যবহার করছিলাম)। আমি অনুমান করছি যে অন্যান্য সমাধানগুলিও কাজ করবে।
সালমান

উত্তর:


437

পুনরুদ্ধার প্রক্রিয়ার অংশ হিসাবে আপনার ডাটাবেস অনলাইন আনতে আপনাকে WITH RECOVERYআপনার ডাটাবেস RESTOREকমান্ড সহ বিকল্পটি ব্যবহার করতে হবে ।

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

আপনার আদেশটি দেখতে এইরকম হওয়া উচিত,

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে পুনরুদ্ধার ডাটাবেস উইজার্ড ব্যবহার করে আপনার আরও সাফল্য থাকতে পারে। এইভাবে আপনি নির্দিষ্ট ফাইলের অবস্থানগুলি, ওভাররাইট অপশন এবং WITH রিকভারি বিকল্পটি নির্বাচন করতে পারেন।


3
তিনি যা করছেন তা করার সময় আমাকে কখনই পুনরুদ্ধারের বিবৃতি ব্যবহার করতে হয়নি। প্রতিস্থাপনের সাথে যথেষ্ট হওয়া উচিত।
স্যাম

8
হ্যাঁ, আমি নোরকোভারি ব্যবহার করছিলাম তবে পুনরুদ্ধার প্রক্রিয়াটি স্তব্ধ। পুনরুদ্ধারের সাথে ব্যবহার করুন, প্রতিস্থাপন এটি প্রক্রিয়া আর
স্থগিত

এটি আমার সমস্যার সমাধান করেছে। একটি পুনরুদ্ধার মাঝখানে আমাদের SAN ব্যর্থতা ছিল এবং এটি ছিল একটি দ্রুত এবং পরিষ্কার সমাধান।
ব্যবহারকারী

এসকিউএল সার্ভার 2005 ডাটাবেস নিয়ে আমার আজ একই সমস্যা ছিল। আমার ক্ষেত্রে, সমস্যাটি সমাধান করার জন্য, আমাকে WITH ধারাতে ', RESTART' যুক্ত করতে হয়েছিল। পূর্ববর্তী ক্রিয়াকলাপটি সফল হয়নি বলে উল্লেখ করে এটি আমাকে একটি ত্রুটি বার্তা দিচ্ছিল।
এক্সপিরিটো

3
@ ফিস্টঅফফুরি যদি একই ডাটাবেসে পূর্ববর্তী পুনরুদ্ধার অপারেশন স্থগিত / ঘুমন্ত অবস্থায় থাকে তবে হ্যাঁ। কেবল প্রক্রিয়া পুনরুদ্ধার বন্ধ / বাতিল করা একই প্রভাব থাকতে হবে।
জন স্যানসোম

692

সিম্যানটেক ব্যাকআপ এক্সিকিউট 11 ডি ব্যবহার করে আমার এসকিউএল সার্ভার 2005 স্ট্যান্ডার্ড সংস্করণ উদাহরণে একটি ডাটাবেস পুনরুদ্ধার করার এই পরিস্থিতি হয়েছিল। পুনরুদ্ধার কাজ শেষ হওয়ার পরে ডাটাবেসটি "পুনরুদ্ধার" অবস্থায় থেকে যায়। আমার কোনও ডিস্ক জায়গার সমস্যা ছিল না - ডাটাবেসটি কেবল "পুনরুদ্ধার" অবস্থা থেকে আসে নি।

আমি এসকিউএল সার্ভারের উদাহরণগুলির বিরুদ্ধে নিম্নলিখিত কোয়েরিটি চালিয়েছি এবং দেখতে পেয়েছি যে ডাটাবেসটি তাত্ক্ষণিকভাবে ব্যবহারযোগ্য হয়ে উঠেছে:

RESTORE DATABASE <database name> WITH RECOVERY

4
আমাদের একটি ডিবি 2 ঘন্টা পুনরুদ্ধার করতে আটকে ছিল। আমরা এই আদেশটি মাস্টারের বিপরীতে অন্য একটি মেশিন থেকে চালিয়েছি এবং এটি আমাদের ঠিক করে দিয়েছে। ধন্যবাদ!
পিট

11
+1, একটি গেটচা সহ। আমি যখন এটি চালিয়েছি তখন আমি একটি ত্রুটি বার্তা পেয়েছিলাম যা জানিয়েছিল যে ডেটাবেস ইতিমধ্যে পুরোপুরি পুনরুদ্ধার হয়েছে। তবে এটি এখনও "ইন রিকভারি" রাজ্য হিসাবে প্রদর্শিত হয়েছিল। সুতরাং আমি এটিকে ম্যানেজমেন্ট স্টুডিওতে ডান-ক্লিক করেছি, রিফ্রেশটি হিট করেছি এবং এটি স্বাভাবিক অবস্থায় ফিরে এসেছিল।
dario_ramos

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

3
এটি কাজ করে। আমি পাশের ডাটাবেসে একটি ব্যাকআপ পুনরুদ্ধার করার চেষ্টা করছিলাম তবে আমার মূল ডাটাবেসটি কোনও কারণে পুনরুদ্ধার অবস্থায় চলে গেছে। এটি আসলে আমার ডিবি পুনরুদ্ধার করেছে। একটি গুচ্ছ ধন্যবাদ!
অরবিন্দ

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

102

আপনি এটি কীভাবে করেন তা এখানে:

  1. পরিষেবাটি বন্ধ করুন (এমএসএসকিউএসএল সার্ভার);
  2. ডেটাবেস এবং লগ ফাইলগুলির নাম পরিবর্তন করুন বা মুছুন (সি: \ প্রোগ্রাম ফাইলগুলি \ মাইক্রোসফ্ট এসকিউএল সার্ভার \ এমএসএসকিউএলএল \ এমএসএসকিউএল \ ডেটা ...) বা আপনার যেখানেই ফাইল রয়েছে;
  3. পরিষেবাটি শুরু করুন (এমএসএসকিউএসএল সার্ভার);
  4. সমস্যা সহ ডাটাবেস মুছুন;
  5. আবার ডাটাবেস পুনরুদ্ধার করুন।

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

8
কেন শুধু ডাটাবেস ফেলে না? এইভাবে আপনাকে পরিষেবাটি থামাতে হবে না।
এরিক

8
@ এরিক আমার জন্য, এসকিউএল সার্ভার বলেছে যে এটি কোনও পুনরুদ্ধারের মাঝখানে কোনও ডাটাবেস ফেলে দিতে পারে না, যদিও এটি সত্যই পুনরুদ্ধার করা হয়নি ....
এরিক ফিলিপস

@ এরিক ফিলিপস সে ক্ষেত্রে আমি অনুমান করি যে কেউ এই পরিষেবাটি বন্ধ করে দিয়েছে। আমি অবাক হয়েছি যদি প্রতিবার হয় বা কেবল আটকে আছে-পুনরুদ্ধার সমস্যার কিছু ক্ষেত্রে।
এরিক

5
আমার ক্ষেত্রে, ডাটাবেসটি drop database <dbname>একটি ক্যোরি উইন্ডোতে এসকিউএল কমান্ডের সাথে "পুনরুদ্ধার ..." অবস্থায় থাকা অবস্থায় ফেলে দেওয়া যথেষ্ট ছিল । তারপর আমি ডান-ক্লিক করা ডেটাবেস এবং নির্বাচিত রিফ্রেশ যা ম্যানেজমেন্ট স্টুডিওতে এন্ট্রি সরানো হয়েছে। এরপরে আমি একটি নতুন পুনরুদ্ধার করেছি যা সূক্ষ্মভাবে কাজ করেছে ( নোট করুন যে এটি অফলাইনে আনা কাজ করে না, এসকিউএল পরিষেবা পুনরায় চালু করা কাজ করে না, একটি সার্ভার রিবুটও কাজ করে না)।
ম্যাট

84

লগ শিপিংয়ের দ্বিতীয় সার্ভারটি বন্ধ করার সাথে আমারও একই ঘটনা ঘটেছিল। কমান্ডের পরে সার্ভারটি লগ শিপিং থেকে অপসারণ এবং প্রাথমিক সার্ভার থেকে লগ শিপিং বন্ধ করার পরে দ্বিতীয় সার্ভারের ডাটাবেস কমান্ডের পরে স্থিতি পুনরুদ্ধার করতে আটকে গেল

RESTORE DATABASE <database name> WITH RECOVERY

ডাটাবেস বার্তা:

পুনঃস্থাপন ডেটাব্যাস 18.530 সেকেন্ডে (0.000 মেগাবাইট / সেকেন্ড) 0 পৃষ্ঠা সফলভাবে প্রক্রিয়া করা হয়েছে।

এই 18 সেকেন্ডের পরে ডাটাবেসটি আবার ব্যবহারের যোগ্য ছিল।


6
বিশেষত কার্যকর যখন আপনি ইতিমধ্যে ডাটাবেস পুনরুদ্ধার করেছেন কিন্তু পুনরুদ্ধার বিকল্পটি ভুলে গেছেন ...
জ্যাকবর্ড

2
এই ডাটাবেসের একটি পৃথক ডিবি নামে ব্যাকআপ পুনরুদ্ধারের পরে "পুনরুদ্ধার" অবস্থাটি ছেড়ে যাওয়ার জন্য আমার এটির প্রয়োজন ছিল। একটি গুচ্ছ ধন্যবাদ।
শান

81

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

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

যা সমস্যাটি স্থির করেছে। ডেটাবেস নামটিতে বিশেষ অক্ষর রয়েছে বলে আমার প্রথমে সমস্যা হয়েছিল। আমি এটিকে আশেপাশে ডাবল কোট যোগ করে সমাধান করেছি - একক উদ্ধৃতিগুলি "ভুলের কাছাকাছি ..." ত্রুটি প্রদান করে কাজ করবে না।

এটি এই ন্যূনতম সমাধানটি আমি এই সমস্যাটি সমাধান করার চেষ্টা করেছি (পুনরুদ্ধার অবস্থায় ডাটাবেস আটকে) এবং আমি আশা করি এটি আরও ক্ষেত্রে প্রয়োগ করা যেতে পারে।


2
পুরোপুরি কাজ করেছেন - এটিকে বার বার ছিঁড়ে যাওয়ার দরকার নেই। 80+ গিগাবাইটের 3 ডিবিএসের জন্য কিছু সময় লাগে! ধন্যবাদ!
Christer 24'7

1
আমি প্রায় উত্পাদন পরিবেশে এটি সম্পন্ন। আমি প্রথমে স্থানীয়ভাবে এটি চেষ্টা করেছি, একই পরিস্থিতিতে শেষ হয়েছি এবং আপনার মন্তব্য খুঁজে পেয়েছি। পাঠ শিখেছি: স্ক্রিপ্টগুলি ব্যবহার করুন এবং এসএসএমএসকে গুরুত্বপূর্ণ পরিস্থিতিতে বিশ্বাস করবেন না।
মারিউজ

1
একটি নতুন ডাটাবেসে কোনও ডাটাবেসের অনুলিপি ফাইলের ব্যাক-আপ পুনরুদ্ধার করার সময় আমি এই সমস্যাটি পেয়েছি। মূল ডাটাবেস ত্রুটি দেখিয়েছে। এই সমাধানটি কাজ করেছে এবং আমার যে প্রতিক্রিয়া পেয়েছে তা হল "ডেটাবাসের পুনঃস্থাপনটি সফলভাবে ০.২6363 সেকেন্ডে (০.০০০০ এমবি / সেকেন্ড) 0 টি পৃষ্ঠাতে প্রক্রিয়া করা হয়েছিল ।" , সুতরাং দেখে মনে হচ্ছে এসকিউএল সার্ভারটি ডাটাবেসের স্থিতি সম্পর্কে কেবল বিভ্রান্ত ছিল।
আর শ্রেরস

1
আমার জন্য কাজ করেছে তবে কেবল যখন আমি ডাবল-কোট সরিয়েছি - আমার কেবলমাত্র [MY_DB_NAME] প্যারামিটার হিসাবে ছিল।
স্ট্যাকওভারফ্লো ব্যবহারকারী 2

34

ঠিক আছে, আমারও একই সমস্যা রয়েছে এবং ঠিক যেমনটি পাউকের ক্ষেত্রে হয়েছিল, এটি পুনরুদ্ধার করার সময় সার্ভারটি ডিস্কের স্থান থেকে সরে যাওয়ার কারণে ঘটেছিল এবং তাই স্থায়ীভাবে পুনরুদ্ধার অবস্থার কারণ হয়েছিল। এসকিউএল সার্ভার পরিষেবাগুলি বন্ধ না করে কীভাবে এই রাজ্যটি শেষ করবেন?

আমি একটি সমাধান খুঁজে পেয়েছি :)

Drop database *dbname*

29

পুনঃস্থাপন ডেটাব্যাস / পুনরুদ্ধার করুন লগ কমান্ড কার্যকর করা হলে ডিফল্টরূপে পুনরুদ্ধারের বিকল্পটি ব্যবহৃত হয়। আপনি যদি "পুনরুদ্ধার" প্রক্রিয়াতে আটকে থাকেন তবে আপনি এক্সিকিউট করে অনলাইনে একটি ডাটাবেস ফিরিয়ে আনতে পারেন:

RESTORE DATABASE YourDB WITH RECOVERY
GO

যদি একাধিক ফাইল পুনরুদ্ধারের প্রয়োজন হয়, সিআইএল কমান্ডগুলির যথাক্রমে নরকোভারি এবং পুনরুদ্ধারের সাথে প্রয়োজন হয় - অনলাইনে ডাটাবেস ফিরিয়ে আনতে কেবল কমান্ডের শেষ ফাইলটিতে রিকভারি থাকা উচিত:

RESTORE DATABASE YourDB FROM DISK = 'Z:\YourDB.bak'
WITH NORECOVERY
GO
RESTORE LOG YourDB FROM DISK = 'Z:\YourDB.trn'
WITH RECOVERY
GO

আপনি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও উইজার্ডটিও ব্যবহার করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

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


23

এটি মোটামুটি সুস্পষ্ট হতে পারে তবে এটি এখনই আমাকে ছড়িয়ে দিয়েছে:

আপনি যদি লেজ-লগ ব্যাকআপ নিচ্ছেন তবে এসএসএমএস পুনরুদ্ধার উইজার্ডে এই বিকল্পটি চেক করার কারণে এই সমস্যাটিও ঘটতে পারে - "পুনরুদ্ধার অবস্থায় সোর্স ডাটাবেসটি ছেড়ে দিন (পূর্বে পুনরায়)"

এখানে চিত্র বর্ণনা লিখুন


7
আপনি যদি এই অবস্থায় থাকেন তবে আপনার সেরা বাজিটি হ'ল: ১. ডাটাবেসটিতে ডান ক্লিক করুন, টাস্ক-> রিস্টোর-> লেনদেন লগগুলিতে যান the ব্যাকআপ পুনরুদ্ধারের সফল হওয়া উচিত এবং ডাটাবেসটিকে অনলাইনে ফিরিয়ে আনতে হবে।
রায়ান গ্রস

16

আমি বুঝতে পেরেছি কেন।

RESTORE DATABASEকমান্ড জারি করা ক্লায়েন্ট যদি পুনরুদ্ধারের সময় সংযোগ বিচ্ছিন্ন করে দেয় তবে পুনরুদ্ধারটি আটকে থাকবে।

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


10
সমস্ত এসকিউএল কমান্ডের প্রয়োজন যে ক্লায়েন্ট পুরো সময় সংযুক্ত থাকে।
mrdenny

2
@ এমরডেনি: আমি ধরে নিয়েছি যে কোনও ক্লায়েন্ট সংযোগ বিচ্ছিন্ন হলে পরিবর্তনগুলি পূর্বাবস্থায় ফিরে আসে।
আয়ান

মাইক্রোসফ্ট থেকে পিএইচপি পিডিও ড্রাইভারের সাথে এই কমান্ডটি চালানো আমার একই সমস্যা। তবে মাইক্রোসফ্ট এসকিএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে চলার সময় এটি ঠিক কাজ করে। আমি ভাবছি কীভাবে আমার পিএইচপি অ্যাপ্লিকেশনটি পুরো সময়ের সাথে সংযুক্ত করা যায়?
চান্না লাই

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

10

এই এক কাজ করেছে:

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/8dd1b91d-3e14-4486-abe6-e3a550bfe457

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

এই পরিস্থিতি থেকে মুক্তি পেতে আমি যা করেছি তা হ'ল:

  1. উইন্ডোজ পরিষেবাগুলি থেকে সমস্ত এসকিউএল সম্পর্কিত পরিষেবা বন্ধ করুন।

  2. আমি ডেটা ফোল্ডারটি খুললাম যেখানে এলডিএফ এবং এমডিএফ ফাইলগুলি এসকিউএল ডিরেক্টরিতে থাকে, সাধারণত এটির মতো: "সি: \ প্রোগ্রাম ফাইলগুলি *********** \ এমএসএসকিউএল \ ডেটা

  3. তারপরে আমি ডাটাবেসের দুটি এলডিএফ এবং এমডিএফ ফাইল অনুলিপি করেছিলাম: [ডিবি নাম] .এমডিএফ এবং [ডিবি নাম] _ লগ.এলডিএফ

আমি এই দুটি ফাইলই অন্য ফোল্ডারে অনুলিপি করেছি।

  1. তারপরে আমি উইন্ডোজ পরিষেবাগুলি থেকে আবার সমস্ত এসকিউএল সম্পর্কিত পরিষেবা (প্রথম ধাপে) শুরু করেছি started

  2. সাধারণ লগইন দিয়ে আমার এমএস এসকিউএল পরিচালনার স্টুডিও শুরু করেছেন।

  3. অপরাধী ডাটাবেসে ডান ক্লিক করুন এবং মুছে ফেলুন (পুরোপুরি ডাটাবেস মুছতে)।

  4. এই ডাটাবেস সম্পর্কিত সমস্ত এলডিএফ এবং এমডিএফ ফাইলগুলি ডেটা ফোল্ডার থেকে চলে গেছে (দ্বিতীয় ধাপে উল্লিখিত)।

  5. একই নামের সাথে একটি নতুন ডাটাবেস তৈরি করেছে (step ধাপে আমি মুছে ফেলা একটির একই নাম - অপরাধীর ডাটাবেস)।

  6. তারপরে [ডাটাবেসের নাম] -> ডান ক্লিক করুন -> কার্য -> অফলাইন নিন।

  7. আমি তখন উভয় ফাইলই (তিন ধাপ থেকে) অনুলিপি করে ডেটা ফোল্ডারে (পদক্ষেপ 2) রেখেছি।

  8. [ডাটাবেসের নাম] -> ডান ক্লিক করুন -> কার্য -> অনলাইনে আনুন।


এটি আমার জন্যও কাজ করেছিল। পদক্ষেপ 10 এ, আমি বিদ্যমান ফাইলগুলি ওভাররাইট করতে বেছে নিয়েছি।
ডিভি পারডোডো

8

আমি একটি ছিল। আমার ডাটাবেসের নাম এবং ক্যোয়ারী এর কারণে কাজ করে নি ('ভুল সিনট্যাক্স কাছাকাছি বলে।') তখন আমি বুঝতে পারি যে নামেরটির জন্য আমার একটি বন্ধনী প্রয়োজন:

RESTORE DATABASE [My.DB.Name] WITH RECOVERY

5

আমার ক্ষেত্রে, এসকিউএল কমান্ড সহ "পুনরুদ্ধার ..." অবস্থায় থাকা ডাটাবেসটি ফেলে রাখা যথেষ্ট ছিল

 drop database <dbname> 

একটি প্রশ্নের উইন্ডোতে।

তারপর আমি ডান-ক্লিক করা ডেটাবেস এবং নির্বাচিত রিফ্রেশ যা ম্যানেজমেন্ট স্টুডিওতে এন্ট্রি সরানো হয়েছে। এরপরে আমি একটি নতুন পুনরুদ্ধার করেছি যা সূক্ষ্মভাবে কাজ করেছে (নোট করুন যে এটি অফলাইনে আনা কাজ করে না, এসকিউএল পরিষেবা পুনরায় চালু করা কাজ করে না, একটি সার্ভার রিবুটও কাজ করে না)।


3

ইভেন্ট লগে আমি যখন টিসিপি ত্রুটিটিও পেয়েছিলাম তখন আমার এই সমস্যাটি হয়েছিল ...

স্কিএল দিয়ে ডিবি ফেলে দিন বা ম্যানেজারের "মুছুন" এ ডান ক্লিক করুন এবং পুনরুদ্ধার করুন।

আমি আসলে এটি ডিফল্টরূপে শুরু করেছি। স্ক্রিন ডিবি ড্রপ, পুনরায় তৈরি করুন এবং তারপরে পুনরুদ্ধার করুন।


3

ডিফল্টরূপে, প্রতিটি সেট আপ RESTORE DATABASEসহ আসে RECOVERY। 'নোরকোভারি' অপশনগুলি মূলত এসকিউএল সার্ভারকে বলে যে ডাটাবেসগুলি আরও পুনরুদ্ধার করা ফাইলগুলির জন্য অপেক্ষা করছে (যদি একটি ডিআইএফএফ ফাইল এবং লোগ ফাইল হতে পারে এবং সম্ভব হয়, তবে লেজ-লগ ব্যাকআপ ফাইল অন্তর্ভুক্ত করতে পারে)। 'পুনরুদ্ধার' বিকল্পগুলি, সমস্ত লেনদেন শেষ করুন এবং লেনদেনের জন্য ডেটাবেসকে প্রস্তুত রাখুন।

তাই:

  1. যদি আপনার ডাটাবেস সিম্পল পুনরুদ্ধারের মডেলটি সেট আপ করা হয় , আপনি কেবলমাত্র একটি বিকল্পের সাথে একটি সম্পূর্ণ পুনরুদ্ধার NORECOVERYকরতে পারেন, যখন আপনার একটি রয়েছে ডিআইএফএফ ব্যাকআপ রাখেনসিম্পল পুনরুদ্ধার মডেল ডাটাবেসে কোনও এলওজি ব্যাকআপের অনুমতি নেই ।
  2. অন্যথায়, যদি আপনার ডাটাবেস পুরো বা বাল্ক-লগইড পুনরুদ্ধারের মডেলটি সেট আপ করা হয় , আপনি বিকল্পের পরে একটি পুরো পুনরুদ্ধার করতে পারেন NORECOVERY, তারপরে একটি ডিআইএফএফ সম্পাদন করতে পারেন দ্বারা অনুসরণ NORECOVERYঅবশেষে, এবং, সঞ্চালন লগ সঙ্গে পুনঃস্থাপন RECOVERYবিকল্প।

মনে রাখবেন, সর্বশেষে পুনরুদ্ধার করা উচিত QUERY এর RECOVERYবিকল্প । এটি একটি সুস্পষ্ট উপায় হতে পারে বা নাও হতে পারে। টি-এসকিউএল এর থার্মগুলিতে, পরিস্থিতি:

1।

 USE [master]
    GO
    RESTORE DATABASE Database_name 
    FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD, 
    RECOVERY -- This option could be omitted.
    GO

প্রতিস্থাপনের বিকল্পটি অবশ্যই সাবধানতার সাথে ব্যবহার করা উচিত কারণ এতে ডেটা ক্ষতি হতে পারে

অথবা, আপনি যদি একটি সম্পূর্ণ এবং ডিআইএফএফ ব্যাকআপ করেন তবে আপনি এটি ব্যবহার করতে পারেন

   USE [master]
    GO
    RESTORE DATABASE Database_name
      FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
       NOUNLOAD,NORECOVERY
    GO
    RESTORE DATABASE Database_name
      FROM DISK =N'\\path_of_**diff**backup_file.bak' WITH FILE = 1, 
     NOUNLOAD, RECOVERY
    GO

 2. USE [master]
    GO
   -- Perform a Tail-Log backup, if possible. 
   BACKUP LOG Database_name
   GO
   -- Restoring a FULL backup
   RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
     NOUNLOAD,NORECOVERY
  GO 
  -- Restore the last DIFF backup
  RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_DIFF_backup_file.bak' WITH FILE = 1,
     NORECOVERY,NOUNLOAD
  GO
  -- Restore a Log backup
  RESTORE LOG Database_name
    FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
    RECOVERY, NOUNLOAD
  GO

অবশ্যই, আপনি বিকল্পটি দিয়ে একটি পুনরুদ্ধার সম্পাদন করতে পারেন STATS = 10 যা এসকিউএল সার্ভারকে প্রতি 10% সম্পূর্ণ হওয়ার রিপোর্ট করতে বলে।

আপনি যদি পছন্দ করেন তবে আপনি প্রক্রিয়াটি পর্যবেক্ষণ করতে পারবেন বা রিয়েল-টাইম ভিত্তিক ক্যোয়ারিতে পুনরুদ্ধার করতে পারেন। অনুসরণ:

USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time 
    FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a 
        WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO

এই সাহায্য আশা করি।


2

স্ন্যাপশট সক্ষম করা থাকলে কোনও আটকে থাকা ডাটাবেস মুছতে সমস্যা হতে পারে। আমার জন্য এটি কাজ করেছে:

  1. প্রথমে আমি অনুসরণ করলাম টিপু ডেলাকাবলু পদক্ষেপগুলি অনুসরণ করেছি (কয়েকটি পোস্ট পড়ুন)
  2. কমান্ড রান করুন: ড্রপ ডাটাবেস [আপনার ডাটাবেস], যা আপনাকে স্ন্যাপশট ডাটাবেসের নাম বলতে একটি ত্রুটি দেয়
  3. কমান্ড রান করুন: ডাটাবেস [স্ন্যাপশট ডাটাবেস] ড্রপ করুন এবং তারপরে আবার কমান্ডটি দ্বিতীয় পদক্ষেপে চালান।


1

এসকিউএল এক্সপ্রেস লাইসেন্স সীমাবদ্ধতার কারণে আমি মাইডিবিএন নাম (পুনরুদ্ধার ...) কেস পেয়েছি ।

লগ ফাইলে, আমি এটি খুঁজে পেয়েছি:

ক্রিয়েট ডেটাবেস বা অলটার ডেটাবেস ব্যর্থ হয়েছে কারণ ফলাফলযুক্ত সংখ্যক ডাটাবেস আকার আপনার ডাটাবেস প্রতি 10240 মেগাবাইটের লাইসেন্স সীমা ছাড়িয়ে যাবে ।

সুতরাং আপনি যদি আরও বড় ডাটাবেস পুনরুদ্ধার করার চেষ্টা করছেন, উদাহরণস্বরূপ আপনাকে আপনার এসকিউএল এক্সপ্রেস সার্ভারটি বিকাশকারী সংস্করণে স্যুইচ করতে হবে


এটি টিএফএস ডাটাবেস এবং টিএফএস ক্লায়েন্ট আমাকে ইতিমধ্যে জানিয়েছিল: ডাটাবেস পূর্ণ।
cskwg

1

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

RESTORE DATABASE aqua_lc_availability
FROM DISK = 'path to .bak file'
WITH RECOVERY

0
  1. প্রথমে এসকিউএল এজেন্ট পরিষেবাটি পরীক্ষা করে চালানো যাক।
  2. নিম্নলিখিত টি-এসকিউএল ব্যবহার:

    FROM master.sys.sysaltfiles ফাইল নাম নির্বাচন করুন যেখানে dbid = DB_ID ('db_name');

  3. অবিরাম টি-এসকিউএল ব্যবহার করা:

    ডিস্ক থেকে ডেটাবেস পুনরুদ্ধার করুন = পুনরায় প্রতিস্থাপনের মাধ্যমে 'ডিবি_পথ';

এই সাহায্য আশা করি!


0

সমস্ত রিকভারি ভিত্তিক বিকল্পগুলি আমার পক্ষে কার্যকর হয়নি।

যা করেছিল তা হ'ল ম্যানেজমেন্ট স্টুডিও থেকে সম্পূর্ণ পুনরুদ্ধার করা।

USE [master]
RESTORE DATABASE Sales_SSD
FROM  DISK = N'D:\databaseBackups02\Daily_Sales_20150309_0941.bak' 
WITH  FILE = 1,  
MOVE N'Sales_Data' TO N'C:\Data\SSD\Sales.mdf',  
MOVE N'Sales_Log' TO N'C:\Data\SSD\Sales_1.ldf',  
NOUNLOAD,  REPLACE,  STATS = 5

0

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

আমি উল্লিখিত হিসাবে ফাইলগুলি মুছে ফেলার মাধ্যমে এটি সমাধান করেছি তবে আবার ডিবি পুনরুদ্ধার করার চেষ্টা করার পরিবর্তে আমি তাজা .mdf এবং .ldf ফাইলগুলিতে অনুলিপি করেছি এবং এগুলি ফ্রন্ট এন্ড সংযুক্তি উইজার্ড ব্যবহার করে সংযুক্ত করেছি। ত্রাণ, কাজ করেছে !!

ভার্চুয়াল মেশিনটি ব্যবহার করার সাথে সাথে নতুন ফাইলগুলি অনুলিপি করাতে আরও সময় লেগেছে ... তাই ক্লিপবোর্ড ব্যবহার করে অনুলিপি করা এবং আটকানোতে এক ঘন্টা সময় লেগেছিল তাই আমি কেবল এটিই শেষ প্রচেষ্টা হিসাবে সুপারিশ করব।


0

এটা আমার জন্য কি স্থির ছিল

  1. উদাহরণ বন্ধ করা
  2. ডেটা ফোল্ডারে .mdf এবং .ldf ফাইলগুলির একটি ব্যাকআপ তৈরি করা
  3. উদাহরণটি পুনরায় আরম্ভ করুন
  4. পুনরুদ্ধার আটকে ডাটাবেস মুছুন
  5. .mdf and.ldf ফাইলগুলিকে ডেটা ফোল্ডারে ফিরিয়ে দিন
  6. .Mdf এবং .ldf ফাইলগুলিতে উদাহরণ সংযুক্ত করুন

0
RESTORE DATABASE {DatabaseName}
   FROM DISK = '{databasename}.bak'
   WITH REPLACE, RECOVERY

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

আমি পুরানো উত্তরটির সাথে সাদৃশ্যটি আরও স্পষ্ট করার জন্য ফর্ম্যাটটি ঠিক করেছি। তবে আপনি এটি করতে শিখতে পারেন এখানে আপনি ভবিষ্যতে আরও সহজেই পঠনযোগ্য উত্তর দেওয়ার চেষ্টা করার ক্ষেত্রে stackoverflow.com/editing-help-
ইউনোশাচ

0

এই সমস্যাটি সমাধান করার জন্য নিম্নলিখিত কমান্ডটি ব্যবহার করুন

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