কিভাবে এসকিএল সার্ভারে একটি পৃথক ডাটাবেসে পুনরুদ্ধার করবেন?


224

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

আমি এই প্রশ্নটি দেখেছি: একই নামি পিসিতে এসকিউএল সার্ভার ডাটাবেসকে বিভিন্ন নামের সাথে পুনরুদ্ধার করুন এবং প্রস্তাবিত পদক্ষেপটি মূল ডিবিটির নতুন নামকরণ করা, তবে আমি প্রোডাকশন সার্ভারে থাকায় আমি সেই বিকল্পটি থেকে বাইরে আছি এবং আমি সত্যিই এটি করতে পারি না।

এটিকে পুনরুদ্ধার করার অন্য কোনও উপায় Database2বা কমপক্ষে কীভাবে আমি সেই .bak ফাইলের ডেটা ব্রাউজ করব?

ধন্যবাদ।

PS: উপরের লিঙ্কের দ্বিতীয় উত্তরটি আশাব্যঞ্জক লাগছিল তবে এটি ত্রুটি সহ শেষ করতে থাকে:

ফাইললিস্ট পুনরুদ্ধার অস্বাভাবিকভাবে শেষ হচ্ছে

উত্তর:


303

আপনি একটি নতুন ডিবি তৈরি করতে পারেন তারপরে ওভাররাইট বিকল্পটি সক্ষম করে "পুনরুদ্ধার উইজার্ড" ব্যবহার করুন বা;

বিষয়বস্তু দেখুন;

RESTORE FILELISTONLY FROM DISK='c:\your.bak'

ফলাফল থেকে .mdf & .ldf এর যৌক্তিক নামগুলি নোট করুন;

RESTORE DATABASE MyTempCopy FROM DISK='c:\your.bak'
WITH 
   MOVE 'LogicalNameForTheMDF' TO 'c:\MyTempCopy.mdf',
   MOVE 'LogicalNameForTheLDF' TO 'c:\MyTempCopy_log.ldf'

MyTempCopyএর বিষয়বস্তু সহ ডাটাবেস তৈরি করতে your.bak

উদাহরণ ('মাইটাইম্পকপি'-তে' ক্রেডিটলাইন 'নামক একটি ডিবি ব্যাকআপ পুনরুদ্ধার করে;

RESTORE FILELISTONLY FROM DISK='e:\mssql\backup\creditline.bak'

>LogicalName
>--------------
>CreditLine
>CreditLine_log

RESTORE DATABASE MyTempCopy FROM DISK='e:\mssql\backup\creditline.bak'
WITH 
   MOVE 'CreditLine' TO 'e:\mssql\MyTempCopy.mdf',
   MOVE 'CreditLine_log' TO 'e:\mssql\MyTempCopy_log.ldf'

>RESTORE DATABASE successfully processed 186 pages in 0.010 seconds (144.970 MB/sec).

5
হাই, আমার মনে হচ্ছে আমি কিছু মিস করছি, এটি ত্রুটিটি ছুঁড়ে ফেলেছে backkup set holds a backup of a database other than existing "tmp" database, যা আমি বুঝতে পারি। করা উচিত toফ্রেজ প্রকৃত শারীরিক পথ হবে MyTempCopy?
লোকস্টহর্ডে

অদ্ভুত, toনতুন ডাটাবেসের জন্য ডিবি এবং লগের অবস্থান, উপরে আপডেট উদাহরণ
অ্যালেক্স কে।

51
অন্য কারও জন্য এটি চেষ্টা করে, মাইটাইম্পকপি তৈরি করবেন না, এটি পুনরুদ্ধারের সময় তৈরি করা হয়েছে।
ব্লেজ

3
আমার ক্ষেত্রে কেবল রিপ্লেস, পুনরুদ্ধার, বিকল্পগুলির সাথে কাজ করেছে (এসকিউএল ২০১২) সিআর। dba.stackexchange.com/questions/51489/…
dc2009

7
এটি কাজ করার জন্য REPLACE, RECOVERY ব্যবহার করা উচিত। সুতরাং এই হবে: RESTORE DATABASE MyTempCopy FROM DISK='e:\mssql\backup\creditline.bak' WITH REPLACE, RECOVERY, MOVE 'CreditLine' TO 'e:\mssql\MyTempCopy.mdf', MOVE 'CreditLine_log' TO 'e:\mssql\MyTempCopy_log.ldf'
রায়হান

67

এসকিউএল সার্ভার ২০০৮ আর 2:

একটি বিদ্যমান ডাটাবেসের জন্য যা আপনি "পুনরুদ্ধার করতে চান: বিভিন্ন ডাটাবেসের ব্যাকআপ থেকে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. সরঞ্জামদণ্ড থেকে, কার্যকলাপ মনিটর বোতামটি ক্লিক করুন।
  2. প্রক্রিয়া ক্লিক করুন। আপনি পুনরুদ্ধার করতে চান ডাটাবেস দ্বারা ফিল্টার। প্রতিটি প্রক্রিয়াটিতে ডান ক্লিক করে এবং "কিল প্রক্রিয়া" নির্বাচন করে সমস্ত চলমান প্রক্রিয়াগুলিকে হত্যা করুন।
  3. আপনি যে ডাটাবেসটি পুনরুদ্ধার করতে চান তাতে ডান ক্লিক করুন এবং কার্য -> পুনরুদ্ধার -> ডাটাবেস থেকে নির্বাচন করুন।
  4. "ডিভাইস থেকে:" রেডিও বোতামটি নির্বাচন করুন।
  5. নির্বাচন করুন ... এবং আপনি যে অন্যান্য ডাটাবেস থেকে পুনরুদ্ধার করতে চান তার ব্যাকআপ ফাইলটি চয়ন করুন।
  6. ব্যাকআপ সেটটির বামে চেক বাক্সটি নির্বাচন করে আপনি যে ব্যাকআপ সেটটি পুনরুদ্ধার করতে চান তা নির্বাচন করুন।
  7. বিকল্প নির্বাচন করুন".
  8. বিদ্যমান ডাটাবেস ওভাররাইট নির্বাচন করুন (প্রতিস্থাপনের সাথে)
  9. গুরুত্বপূর্ণ: আপনি যে ডাটাবেসটি ওভাররাইট করতে চান তা ফাইলের নাম হিসাবে "পুনরুদ্ধার করুন" সারিগুলির ডাটা ফাইলটির নাম পরিবর্তন করুন বা কেবল এটি একটি নতুন নাম দিন।
  10. লগ ফাইল ফাইলের নাম দিয়ে এটিই করুন।
  11. কার্যকলাপ মনিটরের স্ক্রিন থেকে যাচাই করুন যে কোনও নতুন প্রক্রিয়া তৈরি হয়নি processes যদি তারা হত তবে তাদের হত্যা কর।
  12. ঠিক আছে ক্লিক করুন।

12
এমএস এসকিউএল সার্ভার 2010?
চিহ্নিত করুন

3
এখানে কিছু স্ক্রিনশট রয়েছে স্ট্যাকওভারফ্লো.com
টমাস কুবেস

প্রোগ্রামার হওয়া সত্ত্বেও আমি বরং এই উইজার্ডটি ব্যবহার করব। আরও সহজ এবং ক্লিনার
v1n1akabozo

1
মূল পদক্ষেপটি আমার জন্য # 8 ছিল। আপনাকে ধন্যবাদ ড্যানিয়েল
jbooker

স্কেল ২০১৪ .. পদক্ষেপ a এ: আপনি যে ডাটাবেসে পুনরুদ্ধার করতে চান তাতে গন্তব্য ডেটাবেস পরিবর্তন করুন। পদক্ষেপ 9 এবং 10: গন্তব্য ডেটাবেস পরিবর্তন করে এটি আপনার যত্ন নেওয়া উচিত। তবে ফাইলগুলিতে গিয়ে এবং ফাইলের নামগুলি মূল পদক্ষেপ 9 এবং 10 তে বর্ণিত হিসাবে এটি
দুটিবার পরীক্ষা করে দেখুন

49

SQL সার্ভার 2012 জন্য, SQL সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করে, আমি কি Microsoft পৃষ্ঠা দরকারী থেকে এই পদক্ষেপগুলি একটি ভিন্ন ডাটাবেস ফাইলের ও নাম ফিরিয়ে আনতে পাওয়া যায়নি: (সুত্র: http://technet.microsoft.com/en-us/library/ms175510 .aspx )

নোট পদক্ষেপ 4 এবং 7 সেট করা গুরুত্বপূর্ণ যাতে বিদ্যমান ডাটাবেসটি ওভাররাইট না হয়।


একটি নতুন স্থানে একটি ডাটাবেস পুনরুদ্ধার করতে এবং optionচ্ছিকভাবে ডাটাবেসটির নতুন নামকরণ করুন

  1. এসকিউএল সার্ভার ডেটাবেস ইঞ্জিনের উপযুক্ত উদাহরণের সাথে সংযুক্ত করুন এবং তারপরে অবজেক্ট এক্সপ্লোরারে সার্ভার ট্রিটি প্রসারিত করতে সার্ভারের নামটিতে ক্লিক করুন।
  2. ডান-ক্লিক করুন ডেটাবেস , এবং তারপর ক্লিক পুনরুদ্ধার করুন ডেটাবেসডাটাবেজ রিস্টোর ডায়লগ বক্স প্রর্দশিত হবে।
  3. উপর সাধারণ পৃষ্ঠা ব্যবহার উত্স পুনঃস্থাপন উৎস এবং ব্যাকআপ সেট অবস্থান নির্দিষ্ট করতে অধ্যায়। নিম্নলিখিত বিকল্পগুলির মধ্যে একটি নির্বাচন করুন:

    • তথ্যশালা

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

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

    • যন্ত্র

      • ব্যাকআপ ডিভাইস নির্বাচন করুন ডায়ালগ বক্সটি খুলতে ব্রাউজ (...) বোতামটি ক্লিক করুন । ইন ব্যাকআপ মিডিয়া টাইপ বক্স, তালিকাভুক্ত ডিভাইস ধরনের একটি নির্বাচন করুন। ব্যাকআপ মিডিয়া বাক্সের জন্য এক বা একাধিক ডিভাইস নির্বাচন করতে অ্যাড ক্লিক করুন । আপনি যে ডিভাইসগুলি ব্যাকআপ মিডিয়া তালিকা বাক্সে চান তা যুক্ত করার পরে , সাধারণ পৃষ্ঠায় ফিরে আসতে ওকে ক্লিক করুন । ইন ডিভাইস:: উত্স ডাটাবেস তালিকা বাক্স, ডাটাবেজ যা পুনরুদ্ধার করা উচিত নাম নির্বাচন করুন।

        দ্রষ্টব্য এই তালিকাটি কেবলমাত্র ডিভাইস নির্বাচন করা হলে উপলব্ধ available কেবলমাত্র নির্বাচিত ডিভাইসে ব্যাকআপ রয়েছে এমন ডেটাবেস উপলব্ধ থাকবে।

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

3
এটি এক কবজির মতো কাজ করে; পদক্ষেপ 4 এবং 7 এর জন্য বিশেষ ধন্যবাদ
আনাতোলি ইয়াকিমচুক

অতিরিক্ত হিসাবে, আমাকে 'বিকল্পগুলি' ট্যাবে যেতে হবে এবং 'বিদ্যমান ডাটাবেসটি ওভাররাইট করুন (প্রতিস্থাপনের মাধ্যমে)' পরীক্ষা করতে হবে ... তারপরে এটি কার্যকর হয়েছিল।
জন কুর্তজ

1
আপনি যদি নতুন ডাটাবেসে পুনরুদ্ধার করেন তবে জনকর্ত্জকে আপনার যা করার দরকার নেই।
Rots

পুনরুদ্ধারে আমি ইতিমধ্যে একটি খালি ডাটাবেস তৈরি করেছি। তফাত অবশ্যই হবে।
জন কার্টজ

1
নিশ্চিত হয়ে গেছে যে আপনি ধাপ ৪-এ অস্তিত্বহীন ডাটাবেসের নাম প্রবেশ করিয়ে দিলে বর্ণিত হিসাবে এটি কাজ করে। নিশ্চিত হয়ে যায় যে আপনি যদি ইতিমধ্যে বিদ্যমান একটি আলাদা ডাটাবেস বেছে নেন তবে আপনাকে 'বিদ্যমান ডাটাবেসটি ওভাররাইট (বিকল্প হিসাবে)' পরীক্ষা করতে হবে বিকল্পগুলির ট্যাব। আপনার ধৈর্য্যের জন্য ধন্যবাদ!
জন কার্টজ

34

আসলে, নেটিভ এসকিউএল সার্ভারের পদগুলিতে ডাটাবেসটি পুনরুদ্ধার করার দরকার নেই, যেহেতু আপনি "কিছু ডেটা দিয়ে ফিডল করতে চান" এবং "সেই .bak ফাইলের ডেটা ব্রাউজ করুন"

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

তদুপরি, আমি মনে করি যে সরঞ্জামটি সম্পূর্ণ কার্যক্ষম ট্রায়াল মোডে থাকাকালীন আপনি কাজটি করতে পারেন (14 দিন)

দাবি অস্বীকার: আমি অ্যাপেক্সএসকিউএলে প্রোডাক্ট সাপোর্ট ইঞ্জিনিয়ার হিসাবে কাজ করি


9

ব্যাকআপ ব্যবহার করে একটি ডেটাবেস অনুলিপি করতে এবং শারীরিক অবস্থান এবং লজিকাল নামটি সংশোধন করার জন্য অতিরিক্ত এসকিউএল স্থির করে পুনরুদ্ধার করে বিভিন্ন পোস্ট থেকে একসাথে যা করেছি তা এখানে।

/**
 * Creates (or resets) a Database to a copy of the template database using backup and restore.
 *
 * Usage: Update the @NewDatabase value to the database name to create or reset.
 */

DECLARE @NewDatabase SYSNAME = 'new_db';

-- Set up
USE tempdb;

DECLARE @TemplateBackups SYSNAME = 'TemplateBackups';
DECLARE @TemplateDatabase SYSNAME = 'template_db';
DECLARE @TemplateDatabaseLog SYSNAME = @TemplateDatabase + '_log';

-- Create a backup of the template database
BACKUP DATABASE @TemplateDatabase TO DISK = @TemplateBackups WITH CHECKSUM, COPY_ONLY, FORMAT, INIT, STATS = 100;

-- Get the backup file list as a table variable
DECLARE @BackupFiles TABLE(LogicalName nvarchar(128),PhysicalName nvarchar(260),Type char(1),FileGroupName nvarchar(128),Size numeric(20,0),MaxSize numeric(20,0),FileId tinyint,CreateLSN numeric(25,0),DropLSN numeric(25, 0),UniqueID uniqueidentifier,ReadOnlyLSN numeric(25,0),ReadWriteLSN numeric(25,0),BackupSizeInBytes bigint,SourceBlockSize int,FileGroupId int,LogGroupGUID uniqueidentifier,DifferentialBaseLSN numeric(25,0),DifferentialBaseGUID uniqueidentifier,IsReadOnly bit,IsPresent bit,TDEThumbprint varbinary(32));
INSERT @BackupFiles EXEC('RESTORE FILELISTONLY FROM DISK = ''' + @TemplateBackups + '''');

-- Create  the backup file list as a table variable
DECLARE @NewDatabaseData VARCHAR(MAX);
DECLARE @NewDatabaseLog VARCHAR(MAX);

SELECT @NewDatabaseData = PhysicalName FROM @BackupFiles WHERE Type = 'D';
SELECT @NewDatabaseLog = PhysicalName FROM @BackupFiles WHERE Type = 'L';

SET @NewDatabaseData = REPLACE(@NewDatabaseData, @TemplateDatabase, @NewDatabase);
SET @NewDatabaseLog = REPLACE(@NewDatabaseLog, @TemplateDatabase, @NewDatabase);

RESTORE DATABASE @NewDatabase FROM DISK = @TemplateBackups WITH CHECKSUM, RECOVERY, REPLACE, STATS = 100,
   MOVE @TemplateDatabase TO @NewDatabaseData,
   MOVE @TemplateDatabaseLog TO @NewDatabaseLog;

-- Change Logical File Name
DECLARE @SQL_SCRIPT VARCHAR(MAX)='
    ALTER DATABASE [{NewDatabase}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''{TemplateDatabase}'', NEWNAME=N''{NewDatabase}'');
    ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''{TemplateDatabase}_log'', NEWNAME=N''{NewDatabase}_log'');
    ALTER DATABASE [{NewDatabase}] SET MULTI_USER WITH ROLLBACK IMMEDIATE;
    SELECT name AS logical_name, physical_name FROM SYS.MASTER_FILES WHERE database_id = DB_ID(N''{NewDatabase}'');
';
SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, '{TemplateDatabase}', @TemplateDatabase);
SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, '{NewDatabase}', @NewDatabase);
EXECUTE (@SQL_SCRIPT);

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

আপনি যে ডাটাবেসটি পুনরুদ্ধার করছেন সেটি অন্য প্রক্রিয়া দ্বারা ব্যবহৃত হতে পারে না। আমি নিশ্চিত না কীভাবে ডেটাবেস অ্যাক্সেস করে সমস্ত প্রক্রিয়া হত্যার স্ক্রিপ্ট করবেন।
নাথান নিসেন

হ্যালো নাটনেন, এখন এটি ঠিকঠাক কাজ করছে, আমি আপনার কোডের নমুনা টুকরোটি ব্যবহার করি এবং তারপরে আমি সেই কোডটিতে ছোট ছোট পরিবর্তন করেছি তারপর ভাল কাজ করছি ... working আবারও নমুনা কোড সরবরাহ করার জন্য আপনাকে ধন্যবাদ ...
ভিক্টর অ্যাথোটি।

1
Sql2014 এবং তার পরেও জন্য DECLARE @BackupFiles...লাইন একটি অতিরিক্ত কলাম দরকার:SnapshotURL nvarchar(360)
ক্ষমতাপ্রদান

3

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

http://www.techrepublic.com/blog/window-on-windows/how-do-i-restore-a-sql-server-database-to-a-new-server/454

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


এইচআই, আমার একই সার্ভারে পুনরুদ্ধার করা দরকার, বিভিন্ন ডাটাবেস ... (পুনরুদ্ধার
ডিবিটির

দুঃখিত, আমি প্রশ্নটি ভুলভাবে পড়েছি। একই বেসিক নীতিগুলি প্রয়োগ হয়, আপনাকে কেবল নতুন নাম এবং ফাইলের নাম (এমডিএফ, এলডিএফ, ইত্যাদি) আলাদা কিনা তা নিশ্চিত করতে হবে।
IAmTimCorey

3

কোনও ডাটাবেস না থাকলে আমি নিম্নলিখিত কোডটি ব্যবহার করি:

ALTER PROCEDURE [dbo].[RestoreBackupToNewDB]    
         @pathToBackup  varchar(500),--where to take backup from
         @pathToRestoreFolder  varchar(500), -- where to put the restored db files 
         @newDBName varchar(100)
    AS
    BEGIN

            SET NOCOUNT ON
            DECLARE @fileListTable TABLE (
            [LogicalName]           NVARCHAR(128),
            [PhysicalName]          NVARCHAR(260),
            [Type]                  CHAR(1),
            [FileGroupName]         NVARCHAR(128),
            [Size]                  NUMERIC(20,0),
            [MaxSize]               NUMERIC(20,0),
            [FileID]                BIGINT,
            [CreateLSN]             NUMERIC(25,0),
            [DropLSN]               NUMERIC(25,0),
            [UniqueID]              UNIQUEIDENTIFIER,
            [ReadOnlyLSN]           NUMERIC(25,0),
            [ReadWriteLSN]          NUMERIC(25,0),
            [BackupSizeInBytes]     BIGINT,
            [SourceBlockSize]       INT,
            [FileGroupID]           INT,
            [LogGroupGUID]          UNIQUEIDENTIFIER,
            [DifferentialBaseLSN]   NUMERIC(25,0),
            [DifferentialBaseGUID]  UNIQUEIDENTIFIER,
            [IsReadOnly]            BIT,
            [IsPresent]             BIT,
            [TDEThumbprint]         VARBINARY(32) -- remove this column if using SQL 2005
            )
            INSERT INTO @fileListTable EXEC('RESTORE FILELISTONLY FROM DISK ='''+ @pathToBackup+'''')
            DECLARE @restoreDatabaseFilePath NVARCHAR(500)
            DECLARE @restoreLogFilePath NVARCHAR(500)
            DECLARE @databaseLogicName NVARCHAR(500)
            DECLARE @logLogicName NVARCHAR(500)
            DECLARE @pathSalt uniqueidentifier = NEWID()

            SET @databaseLogicName = (SELECT LogicalName FROM @fileListTable WHERE [Type]='D') 
            SET @logLogicName = (SELECT LogicalName FROM @fileListTable WHERE [Type]='L')           
            SET @restoreDatabaseFilePath= @pathToRestoreFolder + @databaseLogicName + convert(nvarchar(50), @pathSalt) + '.mdf'
            SET @restoreLogFilePath= @pathToRestoreFolder + @logLogicName + convert(nvarchar(50), @pathSalt) + '.ldf'

            RESTORE DATABASE @newDBName FROM DISK=@pathToBackup     
            WITH 
               MOVE @databaseLogicName TO @restoreDatabaseFilePath,
               MOVE @logLogicName TO @restoreLogFilePath

            SET NOCOUNT OFF
    END

3
  • আমি যখন পুরানো ডাটাবেস ব্যবহার করে একটি নতুন ডাটাবেস পুনরুদ্ধার করি তখন আমার এই বিষয়ের মতো একই ত্রুটি রয়েছে। (.bak ব্যবহার করা একই ত্রুটি দেয়)

  • আমি নতুন ডাটাবেসের নামে পুরানো ডাটাবেসের নাম পরিবর্তন করেছি (এই চিত্রটি একই)। এটা কাজ করেছে.

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


2
পরের বার, দয়া করে ব্যাংকের নাম
মুছুন

1

এখানে একটি অনন্য ডিবি নামের অতিরিক্ত ডিবি হিসাবে কোনও ব্যাকআপ পুনরুদ্ধার করবেন is

এসকিউএল 2005 এর জন্য এটি খুব দ্রুত কাজ করে। আমি নিশ্চিত যে নতুন সংস্করণগুলি একই কাজ করবে।

প্রথমত, আপনাকে আপনার মূল ডিবি অফলাইনে নিতে হবে না। তবে সুরক্ষার জন্য, আমি পছন্দ করি। আমার উদাহরণে, আমি আমার "বিলিং" ডাটাবেসের একটি ক্লোন মাউন্ট করতে যাচ্ছি এবং এটির নাম হবে "বিলিংক্লোন"।

1) বিলিং ডাটাবেসের একটি ভাল ব্যাকআপ করুন

2) সুরক্ষার জন্য, আমি নিম্নলিখিতটি অফলাইনে নিলাম:

3) একটি নতুন কোয়েরি উইন্ডো খুলুন

** গুরুত্বপূর্ণ! আপনি সব শেষ না হওয়া পর্যন্ত এই ক্যোয়ারী উইন্ডোটি উন্মুক্ত রাখুন! আপনাকে এই উইন্ডো থেকে ডিবি পুনরুদ্ধার করতে হবে!

এখন নিম্নলিখিত কোডটি প্রবেশ করান:

-- 1) free up all USER databases
USE master;
GO
-- 2) kick all other users out:
ALTER DATABASE billing SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 3) prevent sessions from re-establishing connection:
ALTER DATABASE billing SET OFFLINE;

3) এরপরে, ম্যানেজমেন্ট স্টুডিওতে, অবজেক্ট এক্সপ্লোরারে ডাটাবেসগুলিতে rt ক্লিক করুন, "ডাটাবেস পুনরুদ্ধার করুন" নির্বাচন করুন

4) "টু ডাটাবেস" ক্ষেত্রে নতুন নাম লিখুন। আইই বিলিংক্লোন

5) পুনরুদ্ধারের উত্সে, "ডিভাইস থেকে" ক্লিক করুন এবং ... নেভিগেট বোতামটি ক্লিক করুন

)) আপনার ব্যাকআপটিতে অ্যাড করুন এবং নেভিগেট ক্লিক করুন

)) পুনরুদ্ধারের পাশে একটি চেকমার্ক রাখুন (পুনরুদ্ধারের জন্য ব্যাকআপ সেট নির্বাচন করুন)

8) এরপরে উপরের এলএইচ কোণে অপশন পৃষ্ঠা নির্বাচন করুন

9) এখন পুনরুদ্ধার হিসাবে ডাটাবেস ফাইলের নাম সম্পাদনা করুন। ডিবি এবং লগ উভয়ের জন্য এটি করুন। IE বিলিংক্লোন.এমডিএফ এবং বিলিংকলোনে_লগ.এলডিএফ

10) এখন ওকে চাপুন এবং টাস্কটি শেষ হওয়ার জন্য অপেক্ষা করুন।

১১) আপনার অবজেক্ট এক্সপ্লোরারে রিফ্রেশ হিট করুন এবং আপনি আপনার নতুন ডিবি দেখতে পাবেন

12) এখন আপনি আপনার বিলিং ডিবি আবার অনলাইনে রাখতে পারেন। আপনি বিলিং অফলাইনে নিতে একই ক্যোয়ারী উইন্ডোটি ব্যবহার করুন। এই আদেশটি ব্যবহার করুন:

-- 1) free up all USER databases
USE master; GO
-- 2) restore access to all users:
ALTER DATABASE billing SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO
-- 3) put the db back online:
ALTER DATABASE billing SET ONLINE;

সম্পন্ন!


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