আমি কীভাবে এসকিউএল সার্ভার ২০০ এক্সপ্রেসে একই সার্ভারে একটি এসকিউএল সার্ভার ডাটাবেস ক্লোন করতে পারি?


271

আমার একটি এমএস এসকিউএল সার্ভার ২০০৮ এক্সপ্রেস সিস্টেম রয়েছে যাতে একটি ডাটাবেস রয়েছে যা আমি 'অনুলিপি এবং পুনর্নামকরণ' করতে চাই (পরীক্ষার উদ্দেশ্যে) তবে এটি অর্জনের সহজ উপায় সম্পর্কে আমি অসচেতন।

আমি লক্ষ্য করেছি যে এসকিউএল সার্ভারের আর 2 সংস্করণে একটি অনুলিপি ডাটাবেস উইজার্ড রয়েছে, তবে দুঃখের সাথে আমি আপগ্রেড করতে পারি না।

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


2
ব্যাকআপ পুনরুদ্ধারের কাজ করা উচিত। কীভাবে ব্যর্থ হয়েছে সে সম্পর্কে আপনি আরও বিশদ সরবরাহ করতে পারেন?
এড হার্পার

7
আমি বুঝতে পেরেছি ব্যাকআপ থেকে পুনরুদ্ধার করার সময় আমি একটি ভুল করেছি। আমি প্রথমে একটি নতুন খালি ডিবি তৈরি করেছি এবং সেখান থেকে ব্যাকআপটি পুনরুদ্ধার করার চেষ্টা করেছি। আমার যা করা উচিত তা হ'ল পুনরুদ্ধার ডায়ালগটি নিয়ে আসা এবং সেখানে নতুন ডেটাবেসটির নামটি প্রথমে তৈরি না করে টাইপ করা। এটি করার মাধ্যমে ডাটাবেসটি দুর্দান্তভাবে ক্লোন করা হয়েছে!
সার্জিও

উত্তর:


372
  1. মাইক্রোসফ্ট এসকিউএল ম্যানেজমেন্ট স্টুডিও ইনস্টল করুন, যা আপনি মাইক্রোসফ্টের ওয়েবসাইট থেকে বিনামূল্যে ডাউনলোড করতে পারেন:

    সংস্করণ 2008

    মাইক্রোসফ্ট এসকিউএল ম্যানেজমেন্ট স্টুডিও 2008 উন্নত পরিষেবাদির সাথে এসকিউএল সার্ভার 2008 এক্সপ্রেসের অংশ

    সংস্করণ 2012

    ক্লিক করুন ডাউনলোড বাটন পরীক্ষকENU\x64\SQLManagementStudio_x64_ENU.exe

    সংস্করণ 2014

    ক্লিক করুন ডাউনলোড বাটন এবং MgmtStudio পরীক্ষা64BIT\SQLManagementStudio_x64_ENU.exe

  2. মাইক্রোসফ্ট এসকিউএল ম্যানেজমেন্ট স্টুডিও খুলুন ।

  3. .BAK ফাইলটিতে মূল ডাটাবেস ব্যাকআপ করুন (ডিবি -> টাস্ক -> ব্যাকআপ)।
  4. নতুন নাম (ক্লোন) দিয়ে খালি ডাটাবেস তৈরি করুন। এটি isচ্ছিক হিসাবে নীচের মন্তব্যগুলি নোট করুন।
  5. ডাটাবেস ক্লোন করতে ক্লিক করুন এবং পুনরুদ্ধার ডায়ালগ খুলুন (চিত্র দেখুন) সংলাপ পুনরুদ্ধার করুন
  6. ডিভাইসটি নির্বাচন করুন এবং পদক্ষেপ 3 থেকে ব্যাকআপ ফাইল যুক্ত করুন। ব্যাকআপ ফাইল যুক্ত করুন
  7. ডাটাবেস পরীক্ষার জন্য গন্তব্য পরিবর্তন করুন গন্তব্য পরিবর্তন
  8. ডাটাবেস ফাইলগুলির অবস্থান পরিবর্তন করুন, এটি অবশ্যই মূল থেকে পৃথক হতে হবে। আপনি সরাসরি পাঠ্য বাক্সে টাইপ করতে পারেন, কেবল পোস্টফিক্স যুক্ত করুন। (দ্রষ্টব্য: অর্ডার গুরুত্বপূর্ণ। চেকবক্স নির্বাচন করুন, তারপরে ফাইলের নামগুলি পরিবর্তন করুন change) অবস্থান পরিবর্তন করুন
  9. প্রতিস্থাপনের সাথে এবং KEEP_REPLICATION সহ পরীক্ষা করুন প্রতিস্থাপন সহ

84
1. একটি খালি ডাটাবেস তৈরি করবেন না এবং এতে .bak ফাইলটি পুনরুদ্ধার করবেন না। ২. এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর "ডাটাবেসগুলি" শাখায় ডান ক্লিক করে 'পুনরুদ্ধার করা ডেটাবেস' বিকল্পটি ব্যবহার করুন এবং উত্সটি পুনরুদ্ধার করার সময় ডাটাবেসের নাম সরবরাহ করুন। সুত্র: stackoverflow.com/questions/10204480/...
taynguyen

1
মাইক্রোসফ্ট এসকিউএল ম্যানেজমেন্ট স্টুডিও - এটি নিখরচায়
টমাস কুবেস

4
কাজ করে না - "ডাটাবেস ব্যবহারের কারণে এক্সক্লুসিভ অ্যাক্সেস পাওয়া যায়নি"।
ইমানুয়েল সিরিয়াচি

5
আমাকে "পুনরুদ্ধার করার আগে লেজ-লগ ব্যাকআপ নিন" আনচেক করতে হয়েছিল। এটি ডিফল্ট হিসাবে পরীক্ষা করা হয়েছিল এবং ফলস্বরূপ "এক্সক্লুসিভ অ্যাক্সেস পাওয়া যায়নি কারণ ডাটাবেস ব্যবহারের ক্ষেত্রে রয়েছে" ত্রুটি।
টার্নিপ

2
আমার আসল ডাটাবেসটি "পুনরুদ্ধার"
Divi perdomo

113

ক্লোন করতে ডাটাবেসটিতে ডান ক্লিক করুন Tasks, ক্লিক করুন , ক্লিক করুন Copy Database...। উইজার্ডটি অনুসরণ করুন এবং আপনার কাজ শেষ হয়েছে।


আমি মনে করি যে এটি কেবল এসকিউএল সার্ভারের আর 2 রিলিজে পাওয়া যায় দুঃখের সাথে :-(
সার্জিও

7
এখানে এটি কিভাবে দ্রুতগামী কাজ করে: stackoverflow.com/questions/4269450/...
ম 00 mA গুলি

2
আপনার ডাটাবেসে এনক্রিপ্ট করা বস্তু থাকলে এটি কাজ করে না।
সিজেবার্থ

1
আমি বলব, মূল কথাটি আসলে এটি করা কোথায়? আপনি যা বর্ণনা করেছেন তা বেশ স্বজ্ঞাত। আমি এর আগে কিছু সরঞ্জামে (0xDBE, ভিজ্যুয়াল স্টুডিও এসকিউএল সার্ভার অবজেক্ট এক্সপ্লোরার) হুবহু চেষ্টা করেছি, কিন্তু সেখানে এরকম বৈশিষ্ট্য খুঁজে পাইনি।
ডেভিড ফেরেঞ্জি রোগোয়ান

3
সম্ভব না! কার্য -> ডেটাবেস অনুলিপি করতে কোনও মেনু আইটেম নেই
19:38 এ 9

95

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

এসকিউএল এ:

USE master;
GO 
EXEC sp_detach_db
    @dbname = N'OriginalDB';
GO

কমান্ড প্রম্পটে (এই উদাহরণের জন্য আমি ফাইলের পথগুলি সরলীকরণ করেছি):

copy c:\OriginalDB.mdf c:\NewDB.mdf
copy c:\OriginalDB.ldf c:\NewDB.ldf

এসকিউএলে আবার:

USE master;
GO
CREATE DATABASE OriginalDB
    ON (FILENAME = 'C:\OriginalDB.mdf'),
       (FILENAME = 'C:\OriginalDB.ldf')
    FOR ATTACH;
GO
CREATE DATABASE NewDB
    ON (FILENAME = 'C:\NewDB.mdf'),
       (FILENAME = 'C:\NewDB.ldf')
    FOR ATTACH;
GO

1
পারফেক্ট! এটি অনন্য সমাধান যা আমার পক্ষে কাজ করেছিল! অনেক ধন্যবাদ!
থিয়াগোহ

9
select * from OriginalDB.sys.sysfilesডিবির ফাইলগুলির অবস্থান সন্ধান করতে।
এলবিভান

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

2
আপনি যদি এসকিএল পরিষেবা বন্ধ করতে পারেন, এমডিএফ এবং এলডিএফ ফাইলটি অনুলিপি করতে পারেন, আপনার নতুন ডাটাবেসের জন্য নাম পরিবর্তন করতে পারেন, আবার এসকিউএল পরিষেবাটি শুরু করতে পারেন এবং কেবলমাত্র মাস্টারের অধীনে সর্বশেষ তৈরি ডাটাবেস কমান্ড চালনা করতে পারেন তবে আপনাকে মূল ডাটাবেসটি আলাদা করতে হবে না: ইউএসই মাস্টার ; ATTACH এর জন্য তৈরি করুন ডেটাবেস NewDB চালু করুন (ফাইল ফাইল = 'সি: \ নিউডিবি.এমডিএফ'), (ফাইল ফাইল = 'সি: \ নিউডিবি.এলডিএফ'); যান
ড্যানপপ

1
দ্রুততম উপায়ে +1। @ জন এলবিভান চমৎকার মন্তব্য ছাড়াও, আপনি এটি ব্যবহার করতে পারেনexec sp_helpdb @dbname='TEMPDB';
জিন

30

দেখা যাচ্ছে যে আমি ব্যাকআপ থেকে ভুলভাবে পুনরুদ্ধার করার চেষ্টা করেছি।

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

সুতরাং, সংক্ষেপে, ব্যাকআপ থেকে পুনরুদ্ধার কৌশলটি করেছে।

সমস্ত প্রতিক্রিয়া এবং পরামর্শ বলছি জন্য ধন্যবাদ


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

2
নিলস, ফাইলগুলি স্নাপশটে নেওয়া ডিফল্টরূপে একই are নতুন নাম করা ডাটাবেসের জন্য নতুন ফাইল তৈরি করতে আপনি তাদের নাম পরিবর্তন করতে পারেন।
কলিন ডাব্রিটজ

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

আপনি এখন এই উত্তরটি আমাকে তিনবার সাহায্য করেছেন। আমি এটি তৈরির পরিবর্তে টাইপ করতে ভুলে যেতে থাকি। + বিয়ার
পাইোটার কুলা

এটি এবং 'ফাইল' উইন্ডোতে .mdf এবং .log ফাইলগুলির নাম পরিবর্তন করা আমার পক্ষে কাজ করে।
ওলান

17

এটি আমার ব্যবহৃত স্ক্রিপ্ট। কিছুটা জটিল তবে এটি কাজ করে। এসকিউএল সার্ভার ২০১২-তে পরীক্ষা করা হয়েছে।

DECLARE @backupPath nvarchar(400);
DECLARE @sourceDb nvarchar(50);
DECLARE @sourceDb_log nvarchar(50);
DECLARE @destDb nvarchar(50);
DECLARE @destMdf nvarchar(100);
DECLARE @destLdf nvarchar(100);
DECLARE @sqlServerDbFolder nvarchar(100);

SET @sourceDb = 'db1'
SET @sourceDb_log = @sourceDb + '_log'
SET @backupPath = 'E:\tmp\' + sourceDb + '.bak' --ATTENTION: file must already exist and SQL Server must have access to it
SET @sqlServerDbFolder = 'E:\DB SQL\MSSQL11.MSSQLSERVER\MSSQL\DATA\'
SET @destDb = 'db2'
SET @destMdf = @sqlServerDbFolder + @destDb + '.mdf'
SET @destLdf = @sqlServerDbFolder + @destDb + '_log' + '.ldf'

BACKUP DATABASE @sourceDb TO DISK = @backupPath

RESTORE DATABASE @destDb FROM DISK = @backupPath
WITH REPLACE,
   MOVE @sourceDb     TO @destMdf,
   MOVE @sourceDb_log TO @destLdf

2
আমার পরিবেশে, ফাইলের নামগুলি ডিবি নামের সাথে মেলে না ( অন্যটি পুনরুদ্ধার করে এসেছিল ) সুতরাং আমার প্রয়োজন SET @sourceDb_log = (SELECT files.name FROM sys.databases dbs INNER JOIN sys.master_files files ON dbs.database_id=files.database_id WHERE dbs.name=@sourceDb AND files.type=1)এবং @ সোর্সডিবি_ডাটার জন্য একটি পৃথক ভেরিয়েবল (অনুরূপ বিকল্প files.type=0) থাকা দরকার ituting আছে HTH!
ড্যান কেসলে

11

এখানে উল্লিখিত কোনও সমাধানই আমার পক্ষে কাজ করেনি - আমি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও 2014 ব্যবহার করছি।

পরিবর্তে আমাকে "বিকল্পগুলি" স্ক্রিনে "পুনরুদ্ধারের পূর্বে টেল-লগ ব্যাকআপ নিন" চেকবাক্সটি আনচেক করতে হয়েছিল: আমার সংস্করণে এটি ডিফল্টরূপে চেক করা হয় এবং পুনরুদ্ধার অপারেশনটি সম্পন্ন হতে বাধা দেয়। এটি যাচাই-বাছাইয়ের পরে, পুনরুদ্ধার অপারেশনটি সমস্যা ছাড়াই এগিয়ে গেছে।

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


2
এই উত্তরটি আমার দিনকে বাঁচিয়েছিল।
দিলহান জয়থিলাকে


1
এসকিউএল সার্ভার 2017 এর মাধ্যমে এটি না করার সময় আসল ডাটাবেসটি "পুনরুদ্ধার ..." এ থেকে যায়। আপনার সমাধানটি কৌশলটি করেছে - ধন্যবাদ!
mu88

9

এমএস এসকিউএল সার্ভার ২০১২ ব্যবহার করে আপনাকে তিনটি প্রাথমিক পদক্ষেপ সম্পাদন করতে হবে:

  1. প্রথমে .sqlকেবল উত্স ডিবির কাঠামোযুক্ত ফাইল তৈরি করুন

    • অধিকার উৎস ডিবি ক্লিক করুন এবং তারপর কার্যগুলি তারপর স্ক্রিপ্ট নির্মাণ
    • উইজার্ডটি অনুসরণ করুন এবং .sqlস্থানীয়ভাবে ফাইলটি সংরক্ষণ করুন
  2. দ্বিতীয়ত, উত্স ডিবি .sqlফাইলের গন্তব্যের সাথে প্রতিস্থাপন করুন

    • গন্তব্য ফাইলে ডান ক্লিক করুন, নতুন প্রশ্ন নির্বাচন করুন এবং Ctrl-Hবা ( সম্পাদনা করুন - সন্ধান করুন এবং প্রতিস্থাপন করুন - দ্রুত প্রতিস্থাপন )
  3. অবশেষে, ডেটা দিয়ে পপুলেট করুন

    • গন্তব্য ডিবিতে ডান ক্লিক করুন, তারপরে টাস্ক এবং আমদানি ডেটা নির্বাচন করুন
    • ডেটা উত্স ড্রপ ডাউন " এসকিউএল সার্ভারের জন্য নেট ফ্রেমওয়ার্ক ডেটা সরবরাহকারী " তে সেট করা + + ডেটা প্রদেশের অধীনে সংযোগ স্ট্রিংয়ের পাঠ্য ক্ষেত্রটি সেট করে:Data Source=Mehdi\SQLEXPRESS;Initial Catalog=db_test;User ID=sa;Password=sqlrpwrd15
    • গন্তব্য সঙ্গে একই কাজ
    • আপনি যে টেবিলটি স্থানান্তর করতে চান তা পরীক্ষা করুন বা "উত্স: ..." এর পাশাপাশি চেক বাক্সগুলি সমস্ত পরীক্ষা করে দেখুন

তুমি পেরেছ.


যাইহোক, আমি অনুমান করি আমদানি ডেটা গন্তব্য সারণীতে উপস্থিত না থাকলে টেবিলগুলি তৈরি করতে পারে .. সহজ সমাধান +1
খুররাম ইসহাক

6

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


4

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

আপনি যা স্ক্রিপ্ট করতে চান তা চয়ন করতে পারেন; আপনি অবশ্যই অবজেক্টস এবং ডেটা চান। তারপরে আপনি পুরো স্ক্রিপ্টটি একটি ফাইলে সংরক্ষণ করতে পারবেন। তারপরে আপনি সেই ফাইলটি ডাটাবেসটি পুনরায় তৈরি করতে ব্যবহার করতে পারেন; USEউপরের কমান্ডটি সঠিক ডাটাবেসে সেট করা আছে তা নিশ্চিত করুন ।


1
ধন্যবাদ, যদিও ডাটাবেসটি বেশ বড়, তবে (একটি গিগের চারপাশে) তাই আমি মনে করি খারাপ জিনিসগুলি ঘটতে পারে :-)
সার্জিও

2
রাইট; এটি তখন সেরা উপায় নয়। পরিবর্তে, আপনি কেবল নতুন ডাটাবেসে কাঠামো তৈরি করতে স্ক্রিপ্ট ডেটাবেস ব্যবহার করতে পারেন, এবং তারপরে ডেটা স্থানান্তর করতে আমদানি / রফতানি করতে পারেন। কেবলমাত্র আপনি প্রথমে স্ক্রিপ্ট ডেটাবেসটি নিশ্চিত করে নিন; আমদানি / রফতানি সারণীগুলির উপস্থিত না থাকলে সেগুলি তৈরি করবে এবং এটি এটি কীভাবে করতে পারে তা আপনি পছন্দ করতে পারেন না।
অ্যান্ড্রু বারবার

4

এই মন্তব্যের ভিত্তিতে সমাধান: https://stackoverflow.com/a/22409447/2399045 । স্রেফ সেটিংস সেট করুন: ডিবি নাম, টেম্প ফোল্ডার, ডিবি ফাইল ফোল্ডার। এবং রান করার পরে আপনার সাথে "সোর্সডিবিএন নাম_আইআমি-মিমি-ডিডি" ফর্ম্যাটে নামের সাথে ডিবি'র অনুলিপি থাকবে।

-- Settings --
-- New DB name will have name = sourceDB_yyyy-mm-dd
declare @sourceDbName nvarchar(50) = 'MyDbName';
declare @tmpFolder nvarchar(50) = 'C:\Temp\'
declare @sqlServerDbFolder nvarchar(100) = 'C:\Databases\'

--  Execution --
declare @sourceDbFile nvarchar(50);
declare @sourceDbFileLog nvarchar(50);
declare @destinationDbName nvarchar(50) = @sourceDbName + '_' + (select convert(varchar(10),getdate(), 121))
declare @backupPath nvarchar(400) = @tmpFolder + @destinationDbName + '.bak'
declare @destMdf nvarchar(100) = @sqlServerDbFolder + @destinationDbName + '.mdf'
declare @destLdf nvarchar(100) = @sqlServerDbFolder + @destinationDbName + '_log' + '.ldf'

SET @sourceDbFile = (SELECT top 1 files.name 
                    FROM sys.databases dbs 
                    INNER JOIN sys.master_files files 
                        ON dbs.database_id = files.database_id 
                    WHERE dbs.name = @sourceDbName
                        AND files.[type] = 0)

SET @sourceDbFileLog = (SELECT top 1 files.name 
                    FROM sys.databases dbs 
                    INNER JOIN sys.master_files files 
                        ON dbs.database_id = files.database_id 
                    WHERE dbs.name = @sourceDbName
                        AND files.[type] = 1)

BACKUP DATABASE @sourceDbName TO DISK = @backupPath

RESTORE DATABASE @destinationDbName FROM DISK = @backupPath
WITH REPLACE,
   MOVE @sourceDbFile     TO @destMdf,
   MOVE @sourceDbFileLog  TO @destLdf

3

জো উত্তরের উপর ভিত্তি করে স্ক্রিপ্ট ( আলাদা করুন, ফাইলগুলি অনুলিপি করুন, দুটি সংযুক্ত করুন )।

  1. প্রশাসক অ্যাকাউন্ট হিসাবে ম্যানেজমেন্ট স্টুডিও চালান।

এটি প্রয়োজনীয় নয়, তবে এক্সেস কার্যকর করার সময় ত্রুটি অস্বীকার করেছে।

  1. এক্সপি_সিএমডিএসডেল চালানোর জন্য এসকিএল সার্ভার কনফিগার করুন
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
  1. স্ক্রিপ্ট চালান, তবে আপনার ডিবি নাম লিখুন @dbNameএবং তার @copyDBNameআগে ভেরিয়েবল।
USE master;
GO 

DECLARE @dbName NVARCHAR(255) = 'Products'
DECLARE @copyDBName NVARCHAR(255) = 'Products_branch'

-- get DB files
CREATE TABLE ##DBFileNames([FileName] NVARCHAR(255))
EXEC('
    INSERT INTO ##DBFileNames([FileName])
    SELECT [filename] FROM ' + @dbName + '.sys.sysfiles')

-- drop connections
EXEC('ALTER DATABASE ' + @dbName + ' SET OFFLINE WITH ROLLBACK IMMEDIATE')

EXEC('ALTER DATABASE ' + @dbName + ' SET SINGLE_USER')

-- detach
EXEC('EXEC sp_detach_db @dbname = ''' + @dbName + '''')

-- copy files
DECLARE @filename NVARCHAR(255), @path NVARCHAR(255), @ext NVARCHAR(255), @copyFileName NVARCHAR(255), @command NVARCHAR(MAX) = ''
DECLARE 
    @oldAttachCommand NVARCHAR(MAX) = 
        'CREATE DATABASE ' + @dbName + ' ON ', 
    @newAttachCommand NVARCHAR(MAX) = 
        'CREATE DATABASE ' + @copyDBName + ' ON '

DECLARE curs CURSOR FOR 
SELECT [filename] FROM ##DBFileNames
OPEN curs  
FETCH NEXT FROM curs INTO @filename
WHILE @@FETCH_STATUS = 0  
BEGIN
    SET @path = REVERSE(RIGHT(REVERSE(@filename),(LEN(@filename)-CHARINDEX('\', REVERSE(@filename),1))+1))
    SET @ext = RIGHT(@filename,4)
    SET @copyFileName = @path + @copyDBName + @ext

    SET @command = 'EXEC master..xp_cmdshell ''COPY "' + @filename + '" "' + @copyFileName + '"'''
    PRINT @command
    EXEC(@command);

    SET @oldAttachCommand = @oldAttachCommand + '(FILENAME = "' + @filename + '"),'
    SET @newAttachCommand = @newAttachCommand + '(FILENAME = "' + @copyFileName + '"),'

    FETCH NEXT FROM curs INTO @filename
END
CLOSE curs 
DEALLOCATE curs

-- attach
SET @oldAttachCommand = LEFT(@oldAttachCommand, LEN(@oldAttachCommand) - 1) + ' FOR ATTACH'
SET @newAttachCommand = LEFT(@newAttachCommand, LEN(@newAttachCommand) - 1) + ' FOR ATTACH'

-- attach old db
PRINT @oldAttachCommand
EXEC(@oldAttachCommand)

-- attach copy db
PRINT @newAttachCommand
EXEC(@newAttachCommand)

DROP TABLE ##DBFileNames

3

আপনি কেবল একটি নতুন ডাটাবেস তৈরি করতে পারেন এবং তারপরে কার্যগুলিতে যেতে পারেন, ডেটা আমদানি করতে এবং আপনার সবেমাত্র তৈরি করা ডাটাবেসে নকল করতে চান এমন ডাটাবেস থেকে সমস্ত ডেটা আমদানি করতে পারেন।


2

আর একটি উপায় যা আমদানি / রফতানি উইজার্ড ব্যবহার করে কৌশলটি তৈরি করে, প্রথমে একটি খালি ডাটাবেস তৈরি করে, তারপরে উত্স ডাটাবেস সহ আপনার সার্ভারটি উত্সটি চয়ন করুন এবং তারপরে গন্তব্যস্থলে গন্তব্য ডেটাবেস সহ একই সার্ভারটি চয়ন করুন (খালি ডাটাবেস ব্যবহার করে) আপনি প্রথমে তৈরি করেছেন), তারপরে শেষ করুন hit

এটি সমস্ত সারণী তৈরি করবে এবং সমস্ত ডেটা নতুন ডাটাবেসে স্থানান্তর করবে,

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