जवाबों:
डेटाबेस फ़ाइलों को स्थानांतरित करने के लिए आपको SQL सर्वर सेवा को रोकने की आवश्यकता नहीं है, लेकिन आपको विशिष्ट डेटाबेस को ऑफ़लाइन लेना होगा। ऐसा इसलिए है क्योंकि आप फ़ाइलों को स्थानांतरित नहीं कर सकते हैं, जबकि वे एक्सेस किए जा रहे हैं और डेटाबेस को ऑफ़लाइन लेने से फ़ाइलों को SQL सर्वर एप्लिकेशन द्वारा उपयोग किए जाने से रोकता है।
उन्हें स्थानांतरित करने की प्रक्रिया काफी सरल है। डिटैच / अटैच पहले से ही वर्णित था, लेकिन यह लगभग इस जटिल नहीं है।
ALTER DATABASEकमांड के साथ फ़ाइल स्थान बदलें :
USE master; --do this all from the master
ALTER DATABASE foo
MODIFY FILE (name='DB_Data1'
,filename='X:\NewDBFile\DB_Data1.mdf'); --Filename is new location
ध्यान दें, आपको इस कमांड में पुराने स्थान को घोषित करने की आवश्यकता नहीं है। इस पथ को बदलने से तुरंत प्रभाव नहीं पड़ता है, लेकिन अगली बार डेटाबेस शुरू होने पर इसका उपयोग किया जाएगा।
डेटाबेस को ऑफ़लाइन सेट करें
(मैं WITH ROLLBACK IMMEDIATEसभी को बाहर निकालने और सभी वर्तमान में खुले लेनदेन को रोलबैक करने के लिए उपयोग करता हूं )
ALTER DATABASE foo SET OFFLINE WITH ROLLBACK IMMEDIATE;
फ़ाइलों को नए स्थान पर ले जाएं / कॉपी करें
अपने पसंदीदा तरीके का उपयोग करके फ़ाइलों को कॉपी करें (क्लिक करें n खींचें, XCopy, Copy-Item, Robocopy)
डेटाबेस ऑनलाइन लाओ
ALTER DATABASE foo SET ONLINE;
आप इसे और अधिक विस्तार से यहाँ देख सकते हैं ।
MODIFY FILEआदेश परिवर्तनशील है। यदि आप पहले MODIFY FILE चलाते हैं, तो यह आपको बताएगा कि कमांड सफलतापूर्वक चलती है और ऑफ़लाइन-ऑनलाइन ऑपरेशन के बाद स्थान बदल जाएगा (शब्दांकन अलग है लेकिन आपको विचार मिलता है)। ऑफ़लाइन-> फ़ाइलें स्थानांतरित करें-> ऑनलाइन आदेश स्पष्ट कारण के लिए, हालांकि, मायने रखता है। इसके अलावा Demonslay335 के नोट को चिह्नित करें। फाइल की अनुमति जरूरी है।
Mdf और LDF फाइलें संरक्षित हैं और डेटाबेस ऑनलाइन होने के दौरान इसे स्थानांतरित नहीं किया जा सकता है।
यदि आप डेटाबेस को काम करने से नहीं रोकते हैं, तो आप DETACHइसे कर सकते हैं, फाइलों को स्थानांतरित कर सकते हैं और फिर ATTACHइसे।
PropertiesFilesटैब पर जाएंPathऔर FileNameMDF और एलडीएफ फ़ाइलों की । यह चरण उस स्थिति में महत्वपूर्ण है जब आप लापता फ़ाइलों की खोज समाप्त नहीं करना चाहते हैं ...Tasks -> DetachDatabasesअपने सर्वर के नोड पर राइट क्लिक करेंAttachAddबटन पर क्लिक करेंOKआपको अब ठीक होना चाहिए। के बारे में जानकारी DETACH- ATTACHप्रक्रिया यहाँ पाया जा सकता है ।
के बारे में लिंक में DETACH- SQL सर्वर के एक ही उदाहरण पर डेटाबेस को रखते हुए कथन ATTACHका उपयोग करने का एक पुनर्संयोजन है ALTER DATABASE। मूव यूजर डेटाबेस में अधिक संदर्भ ।
यदि आप चलते समय इसे चालू रखना चाहते हैं, तो a BACKUP- करें RESTORE। पुनर्स्थापना प्रक्रिया में आप डेटाबेस फ़ाइलों के नए स्थान को परिभाषित कर सकते हैं।
सिस्टम डेटाबेस फ़ाइलों को स्थानांतरित करने के लिए इन चरणों का पालन करें:
SSMS में sa उपयोगकर्ता के रूप में लॉग इन करें
सुरक्षा के लिए उपयोगकर्ता द्वारा बनाए गए डेटाबेस का बैकअप लें।
SSMS से सर्वर से जुड़े सभी सत्रों को मारें।
सिस्टम डेटाबेस की वर्तमान फ़ाइल स्थान की जाँच करने के लिए निम्न आदेश निष्पादित करें:
USE master;
SELECT * FROM sys.master_files;
पथ को पहचानें और फ़ाइलों के वर्तमान पथ पर ध्यान दें।
मास्टर को छोड़कर सभी डेटाबेस के लिए फ़ाइल पथ को बदलने के लिए TSQL का उपयोग करें:
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
उदाहरण के लिए:
ALTER DATABASE tempdb
MODIFY FILE ( NAME = tempdev
, FILENAME = "DestinationPath\tempdb.mdf");
ALTER DATABASE tempdb
MODIFY FILE ( NAME = templog
, FILENAME = "DestinationPath\templog.ldf");
ALTER DATABASE model
MODIFY FILE ( NAME = modeldev
, FILENAME = "DestinationPath\model.mdf");
ALTER DATABASE model
MODIFY FILE ( NAME = modellog
, FILENAME = "DestinationPath\modellog.ldf");
ALTER DATABASE msdb
MODIFY FILE ( NAME = MSDBData
, FILENAME = "DestinationPath\msdbdata.mdf");
ALTER DATABASE msdb
MODIFY FILE ( NAME = MSDBLog
, FILENAME = "DestinationPath\msdblog.ldf");
अब फ़ाइल का स्थान बदल दिया गया है।
Ldf और mdf दोनों फाइलों को स्थानांतरित करना सुनिश्चित करें
SSMS में सर्वर पर राइट क्लिक करें और गुण चुनें। अंदर गुण डेटाबेस सेटिंग्स पर जाते हैं। डेटा के लिए डेटाबेस डिफ़ॉल्ट स्थानों को बदलें और गंतव्य पथ में प्रवेश करें। सर्वर से लॉग ऑफ करें।
जैसे: C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\करने के लिए बदल जाते हैंE:\projects\DataBaseFiles\MSSQL\DATA\
SQL सर्वर का उदाहरण रोकें।
फ़ाइल या फ़ाइलों को नए स्थान पर कॉपी करें। गंतव्य फ़ोल्डर में एक्सीलेंस अनुमतियों की प्रतिलिपि बनाने के लिए फ़ाइलों को स्थानांतरित करने के लिए रोबोकॉपी का उपयोग करें। Cmd खोलें और व्यवस्थापक के रूप में चलाएं और निम्न कमांड का उपयोग करें:
robocopy / sec sourceFolder डेस्टिनेशन
कमांड चलाने के लिए सोर्स लोकेशन पर जाना बेहतर है। सिस्टम डेटाबेस फ़ाइलों के अलावा अन्य फ़ाइलों को हटा दें जिन्हें कॉपी किया गया है। उदाहरण के लिए:
robocopy /sec .\DATA E:\projects\DataBaseFiles\MSSQL\DATA\
(यहां हम सभी सिस्टम डेटाबेस फ़ाइलों को नए स्थान पर ले जा रहे हैं।)
SQL सर्वर कॉन्फ़िगरेशन प्रबंधक में follwing चरण निष्पादित करें:
SQL सर्वर सेवा नोड में, SQL सर्वर के उदाहरण पर राइट-क्लिक करें (उदाहरण के लिए, SQL सर्वर (MSSQLSERVER)) और गुण चुनें .. SQL सर्वर (उदाहरण_नाम) गुण संवाद बॉक्स में, स्टार्टअप पैरामीटर टैब पर क्लिक करें। मौजूदा पैरामीटर बॉक्स में, मास्टर डेटा फ़ाइल को स्थानांतरित करने के लिए –d पैरामीटर का चयन करें। परिवर्तन सहेजने के लिए अद्यतन पर क्लिक करें। स्टार्टअप पैरामीटर बॉक्स निर्दिष्ट करें, मास्टर डेटाबेस के नए पथ में पैरामीटर बदलें। मौजूदा पैरामीटर बॉक्स में, मास्टर लॉग फ़ाइल को स्थानांतरित करने के लिए –l पैरामीटर का चयन करें। परिवर्तन सहेजने के लिए अद्यतन पर क्लिक करें। स्टार्टअप पैरामीटर बॉक्स निर्दिष्ट करें, मास्टर डेटाबेस के नए पथ में पैरामीटर बदलें।
डेटा फ़ाइल के लिए पैरामीटर मान -d पैरामीटर का पालन करना चाहिए और लॉग फ़ाइल के लिए मान -l पैरामीटर का पालन करना चाहिए। निम्न उदाहरण मास्टर डेटा फ़ाइल के डिफ़ॉल्ट स्थान के लिए पैरामीटर मान दिखाता है।
-dC:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\mastlog.ldf
यदि मास्टर डेटा फ़ाइल के लिए नियोजित स्थानांतरण E: \ SQLData है, तो पैरामीटर मान निम्नानुसार बदले जाएंगे:
-dE:\projects\DataBaseFiles\MSSQL\DATA\master.mdf
-lE:\projects\DataBaseFiles\MSSQL\DATA\mastlog.ldf
SQL सर्वर का इंस्टेंस नाम पर राइट-क्लिक करके और स्टॉप का चयन करके रोकें। SQL सर्वर का उदाहरण पुनरारंभ करें।
saSSMS में उपयोगकर्ता के रूप में लॉग इन करें और निम्नलिखित क्वेरी को निष्पादित करके डेटाबेस फ़ाइलों के स्थान को सत्यापित करें:
USE master;
SELECT * FROM sys.master_files;
सब कुछ कर दिया।
आप कदम से कदम:
ROLLBACK IMMEDIATE के साथ DATABASE MyDB SET SINGLE_USER को सभी कनेक्शन बंद कर दें
ऑफ़लाइन डेटाबेस के साथ डेटाबेस सेट करें
MyDB सेट ऑफ़लाइन के आधार पर
नए पथ पर
जाएं MyDB MODIFY फ़ाइल (नाम = MyDB, फ़ाइल नाम = 'N: \ DATA \ MyDB.MDF')
ऑनलाइन स्थिति के साथ डेटाबेस सेट करें और फिर
MyDB सेट ऑनलाइन पर जाएं
बहु-उपयोगकर्ता के
परिवर्तन सेट करें MyDB सेट MULTI_USER
डेटाबेस डेटा फ़ाइलों को स्थानांतरित करने का एक तरीका है (निश्चित रूप से अभी तक अगर लॉगफ़ाइल्स के लिए ऐसा करने का कोई तरीका नहीं है) डेटाबेस को ऑफ़लाइन ले जाए बिना।
देजन नाकराडा-कोर्डिक के पास इस विधि के लिए एक स्पष्टीकरण + लिपियाँ हैं: https://www.itprotoday.com/sql-server/move-database-files-without-taking-database-offline
संक्षिप्त संस्करण यह है कि आप नए स्थान पर एक और डेटाबेस फ़ाइल जोड़ते हैं, और फिर पुरानी फ़ाइल से डेटा को नई फ़ाइल में ले जाने के लिए विकल्प EMPTYFILE के साथ DBCC Shrinkfile का उपयोग करते हैं। जब यह हो जाता है तो आप पुरानी डेटा फ़ाइल को हटा सकते हैं।
मेरे समाधान नहीं, मैं स्वयं इस समाधान की तलाश में था और इसे हमारे उत्पादन पर्यावरण के लिए बहुत उपयोगी पाया।
Thorfinn
इन सरल 4 चरणों का पालन करें:
CurrentLocationकॉलम में दिखाते हैं ।
SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID('DATABASE_NAME');
ALTER DATABASE DATABASE_NAME MODIFY FILE ( NAME = DATABASE_FILE_NAME , FILENAME = 'NEW_PATH\DATABASE_NAME.mdf');
ALTER DATABASE DATABASE_NAME MODIFY FILE ( NAME = DATABASE_FILE_NAME_log , FILENAME = 'NEW_PATH\DATABASE_FILE_NAME_log.ldf');
मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है (मैं यह बताने के लिए किसी भी टिप्पणी का स्वागत करूंगा कि यह कैसे नहीं है), लेकिन यह बहुत सरल है (और अगर आपके पास एक छोटा डेटाबेस है):
सबसे पहले, डेटाबेस को एक .bak फ़ाइल में बैकअप दें। फिर, उसी .bak फ़ाइल से डेटाबेस को पुनर्स्थापित करें, पुनर्स्थापना कार्य के लिए फ़ाइल विकल्पों के तहत नए .mdf और .ldf फ़ाइल स्थानों का चयन करें।
मैं इसे एक रखरखाव विंडो के उत्पादन वातावरण में नहीं करूंगा, क्योंकि आप डेटाबेस को पुनर्स्थापना के दौरान एक्सेस नहीं कर सकते हैं। अन्य तरीकों को मैंने ऊपर देखा है, हालांकि समान कमियां होंगी। पुनर्स्थापना कार्य पूरा होने के बाद, आपको पुरानी फ़ाइल को हटाने की आवश्यकता नहीं है। यह अपने आप हो गया।
मौजूदा उत्तरों को पूरक करने के लिए: यहां ALTER DATABASE ... MOVE ...सभी डेटाबेस के लिए विवरण बनाने के लिए एक स्क्रिप्ट है :
SELECT 'ALTER DATABASE ' + QUOTENAME(d.name) +
' MODIFY FILE (name=' + QUOTENAME(f.name, '''') +
', filename=' + QUOTENAME(REPLACE(f.physical_name, 'C:\', 'D:\'), '''') +
');'
FROM sys.master_files AS f
INNER JOIN sys.databases AS d ON f.database_id = d.database_id
WHERE d.name <> 'master';
ध्यान दें:
REPLACE(f.physical_name, 'C:\', 'D:\')फ़ाइल पथ के लिए आप जो भी परिवर्तन करना चाहते हैं, उसे बदलें ।
masterयह छूट है, क्योंकि इसका मार्ग SQL सर्वर के स्टार्टअप विकल्पों (उदाहरण के लिए, विवरण के लिए यह उत्तर ) द्वारा निर्धारित किया जाता है ।
USE master; --do this all from the master ALTER DATABASE foo MODIFY FILE (name='DB_Data1_log' ,filename='X:\NewDBFile\DB_Data1_log.ldf'); --Filename is new location