sql-server - समझ - व्हाट इस सकल




मैं SQL सर्वर 2008 एक्सप्रेस में एक ही सर्वर पर SQL सर्वर डेटाबेस को क्लोन कैसे कर सकता हूं? (8)

मेरे पास एक एमएस एसक्यूएल सर्वर 2008 एक्सप्रेस सिस्टम है जिसमें एक डेटाबेस है जिसे मैं 'कॉपी और नाम बदलना' चाहता हूं (परीक्षण उद्देश्यों के लिए) लेकिन मुझे इसे प्राप्त करने के लिए एक आसान तरीका से अनजान है।

मैंने देखा है कि SQL सर्वर के R2 संस्करण में एक प्रति डेटाबेस विज़ार्ड है, लेकिन दुख की बात है कि मैं अपग्रेड नहीं कर सकता।

प्रश्न में डेटाबेस एक छिद्र के आसपास है। मैंने डेटाबेस के बैकअप को पुनर्स्थापित करने का प्रयास किया जिसे मैं एक नए डेटाबेस में प्रतिलिपि बनाना चाहता हूं, लेकिन बिना किसी किस्मत के।


  1. माइक्रोसॉफ्ट एसक्यूएल प्रबंधन स्टूडियो स्थापित करें, आप इसे माइक्रोसॉफ्ट वेबसाइट से मुफ्त में डाउनलोड कर सकते हैं:

    संस्करण 2008

    माइक्रोसॉफ्ट एसक्यूएल प्रबंधन स्टूडियो 2008 उन्नत सेवाओं के साथ एसक्यूएल सर्वर 2008 एक्सप्रेस का हिस्सा है

    संस्करण 2012

    डाउनलोड बटन पर क्लिक करें और ENU \ x64 \ SQLManagementStudio_x64_ENU.exe जांचें

    संस्करण 2014

    डाउनलोड बटन पर क्लिक करें और MgmtStudio 64BIT \ SQLManagementStudio_x64_ENU.exe जांचें

  2. Microsoft SQL प्रबंधन स्टूडियो खोलें

  3. फाइल करने के लिए बैकअप मूल डेटाबेस (डीबी -> कार्य -> ​​बैकअप)।
  4. नए नाम (क्लोन) के साथ खाली डेटाबेस बनाएँ।
  5. डेटाबेस क्लोन करने के लिए क्लिक करें और संवाद बहाल करें (छवि देखें)
  6. डिवाइस का चयन करें और चरण 1 से bakcup फ़ाइल जोड़ें।
  7. डेटाबेस का परीक्षण करने के लिए गंतव्य बदलें
  8. डेटाबेस फ़ाइलों का स्थान बदलें, यह मूल से अलग होना चाहिए। आप सीधे टेक्स्ट बॉक्स में टाइप कर सकते हैं, बस पोस्टफिक्स जोड़ें। (नोट: ऑर्डर महत्वपूर्ण है। चेकबॉक्स का चयन करें, फिर फ़ाइल नाम बदलें।)
  9. स्थान और KEEP_REPLICATION के साथ जांचें

SQL सर्वर 2008 R2 में, किसी फ़ोल्डर में फ़ाइल के रूप में डेटाबेस का बैकअप लें। फिर "डेटाबेस" फ़ोल्डर में दिखाई देने वाले पुनर्स्थापना विकल्प को चुना। विज़ार्ड में वह नया नाम दर्ज करें जिसे आप लक्षित डेटाबेस में चाहते हैं। और फ्रॉम फ़ाइल को पुनर्स्थापित करें चुनें और आपके द्वारा अभी बनाई गई फ़ाइल का उपयोग करें। मैंने यह किया और यह बहुत तेज था (मेरा डीबी छोटा था, लेकिन फिर भी) पाब्लो।


एक अन्य तरीका जो आयात / निर्यात विज़ार्ड का उपयोग करके चाल करता है, स्रोत स्रोत डेटाबेस के साथ आपका सर्वर चुनें, और फिर गंतव्य में गंतव्य डेटाबेस के साथ एक ही सर्वर चुनें (आपको पहले खाली डेटाबेस बनाना होगा), फिर खत्म करें

यह सभी टेबल बनाएगा और सभी डेटा को नए डेटाबेस में स्थानांतरित करेगा,


एमएस एसक्यूएल सर्वर 2012 का उपयोग करके, आपको 3 बुनियादी चरणों को करने की आवश्यकता है:

  1. सबसे पहले, .sql फ़ाइल उत्पन्न करें जिसमें केवल स्रोत डीबी की संरचना है

    • स्रोत डीबी पर राइट क्लिक करें और फिर कार्य स्क्रिप्ट बनाएं
    • विज़ार्ड का पालन करें और .sql फ़ाइल को स्थानीय रूप से सहेजें
  2. दूसरा, स्रोत डीबी को .sql फ़ाइल में गंतव्य के साथ प्रतिस्थापित करें

    • गंतव्य फ़ाइल पर राइट क्लिक करें, नई क्वेरी और Ctrl-H का चयन करें या ( संपादित करें - ढूंढें और बदलें - त्वरित प्रतिस्थापित करें )
  3. अंत में, डेटा के साथ populate

    • गंतव्य डीबी पर राइट क्लिक करें, फिर कार्य और आयात डेटा का चयन करें
    • डेटा स्रोत ड्रॉप डाउन " SQL सर्वर के लिए नेट फ्रेमवर्क डेटा प्रदाता " पर सेट है + + डेटा के तहत कनेक्शन स्ट्रिंग टेक्स्ट फ़ील्ड सेट करें: Data Source=Mehdi\SQLEXPRESS;Initial Catalog=db_test;User ID=sa;Password=sqlrpwrd15
    • गंतव्य के साथ ऐसा ही करें
    • उस तालिका को चेक करें जिसे आप ट्रांसफर करना चाहते हैं या उन सभी को जांचने के लिए "स्रोत: ..." के अलावा बॉक्स को चेक करें

आप कर चुके हैं।


यदि डेटाबेस बहुत बड़ा नहीं है, तो आप SQL सर्वर प्रबंधन स्टूडियो एक्सप्रेस में 'स्क्रिप्ट डेटाबेस' कमांड देख सकते हैं, जो कि खोजकर्ता मेनू में डेटाबेस आइटम से संदर्भ मेनू में हैं।

आप स्क्रिप्ट के लिए क्या चुन सकते हैं; आप निश्चित रूप से वस्तुओं और डेटा चाहते हैं। फिर आप पूरी स्क्रिप्ट को एक फ़ाइल में सहेज लेंगे। फिर आप डेटाबेस को फिर से बनाने के लिए उस फ़ाइल का उपयोग कर सकते हैं; बस सुनिश्चित करें कि शीर्ष पर USE कमांड उचित डेटाबेस पर सेट है।


यह पता चला है कि मैंने बैकअप से गलत तरीके से पुनर्स्थापित करने का प्रयास किया था।

शुरू में मैंने एक नया डेटाबेस बनाया और फिर बैकअप को पुनर्स्थापित करने का प्रयास किया। मुझे क्या करना चाहिए था, और अंत में क्या काम किया गया था, पुनर्स्थापना संवाद लाने और गंतव्य क्षेत्र में नए डेटाबेस का नाम टाइप करना था।

तो, संक्षेप में, बैकअप से बहाल करने से चाल चल रही थी।

सभी प्रतिक्रियाओं और सुझाव लोगों के लिए धन्यवाद


यहां उल्लिखित समाधानों में से कोई भी मेरे लिए काम नहीं करता - मैं SQL सर्वर प्रबंधन स्टूडियो 2014 का उपयोग कर रहा हूं।

इसके बजाय मुझे "विकल्प" स्क्रीन में "पुनर्स्थापित करने से पहले पूंछ-लॉग बैकअप लेना" चेकबॉक्स को अनचेक करना पड़ा: मेरे संस्करण में यह डिफ़ॉल्ट रूप से चेक किया गया है और पुनर्स्थापना ऑपरेशन को पूरा करने से रोकता है। इसे अनचेक करने के बाद, पुनर्स्थापना ऑपरेशन बिना किसी समस्या के आगे बढ़े।


समाधान, इस टिप्पणी के आधार पर: https://.com/a/22409447/2399045 । बस सेटिंग्स सेट करें: डीबी नाम, अस्थायी फ़ोल्डर, डीबी फ़ाइलें फ़ोल्डर। और चलाने के बाद आपके पास "SourceDBName_yyyy-mm-dd" प्रारूप में नाम के साथ डीबी की प्रति होगी।

-- 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






sql-server-2008-express