2011-01-21 14 views
5

मैं TSQL का इस्तेमाल किया है इस तरह एक डेटाबेस से अलग करने का नाम बदलने के लिए:शारीरिक डाटाबेस फ़ाइलें

EXEC sp_detach_db @dbname = 'my_db' 

मैं तो पीएचपी के उपयोग भौतिक फ़ाइलों का नाम बदलना बना दिया। मैं mdf फ़ाइल का नाम बदलने में सक्षम था लेकिन एलडीएफ फ़ाइल नहीं! मैंने एक डॉस कमांड REN भी कोशिश की लेकिन यह एलडीएफ फ़ाइल के लिए भी काम नहीं किया!

मैं पूछना चाहता था, क्या भौतिक लॉग फ़ाइलों के बारे में कुछ खास है जो इसे नामित नहीं करने की अनुमति देते हैं?

क्या ऐसा करने का कोई बेहतर तरीका है?

धन्यवाद सभी

+0

पहला सवाल यह है कि आप ऐसा करने का प्रयास क्यों कर रहे हैं? – Lazarus

+0

मैं एक उचित पुनः नाम करने की कोशिश कर रहा हूं। भौतिक फ़ाइल नाम अभी भी वही हैं क्योंकि मैं डेटाबेस को अलग करने के बाद एक ही नाम के साथ डेटाबेस नहीं बना सकता। – Abs

+0

संबंधित [SQL डेटाबेस का नाम बदलना] (http://stackoverflow.com/questions/4080430) –

उत्तर

7

आप इसे एक ALTER DATABASE कथन का उपयोग कर सकते हैं - इस तरह:

ALTER DATABASE (your database) 
    MODIFY FILE (NAME = logical_file_name, 
       FILENAME = ' new_path/os_file_name ') 

आपको अलग से, उदाहरण के लिए प्रत्येक फ़ाइल को संशोधित करने की जरूरत है यदि आपके पास एकाधिक डेटा फ़ाइलें हैं, तो आपको उनमें से प्रत्येक को संशोधित करने की आवश्यकता है।

विवरण के लिए, Technet documentation on this topic देखें।

+0

इसके लिए वास्तव में काम करने के लिए, मुझे फ़ाइल को मैन्युअल रूप से स्थानांतरित करना होगा या फ़ाइल का नाम बदलना होगा, सही? SQL सर्वर मेरे लिए यह नहीं करेगा और यह थोड़ा सा है जिसे मैं स्वचालित करने की कोशिश कर रहा हूं। – Abs

+2

ठीक है, ऊपर दिए गए आदेश को निष्पादित करने के बाद आपको डेटाबेस को ऑफ़लाइन स्विच करने की आवश्यकता है, भौतिक रूप से फ़ाइल का नाम बदलें और इसे ऑनलाइन वापस स्विच करें। – ulath

6

"वैकल्पिक डेटाबेस (आपका डेटाबेस) संशोधित फ़ाइल" कमांड केवल तार्किक नामों का नाम बदल देगा। http://www.mssqltips.com/sqlservertip/1891/best-practice-for-renaming-a-sql-server-database/

कृपया ध्यान दें निम्नलिखित: इस पोस्ट xp_cmdshell उपयोग करने के लिए कैसे भी शारीरिक फ़ाइलों का नाम बदलना चलता
1. xp_cmdshell उपयोगकर्ता जो SQL सर्वर प्रक्रिया के रूप में चलाता है के तहत निष्पादित किया जाएगा, और फाइल सिस्टम नहीं हो सकता डेटाबेस फ़ाइलों का नाम बदलने के लिए आवश्यक अनुमतियाँ
2. सुरक्षा कारणों से, xp_xmdshell

अक्षम करने के लिए याद रखें निम्नलिखित उल्लिखित ब्लॉग पोस्ट के आधार पर नामकरण कैसे किया जा सकता है इसका एक उदाहरण है। यह डाटाबेस MyDB डेटाबेस को NewMyDB के साथ बदल देगा। मूल माईडीबी (जिसका नाम बदलकर MyDB_OLD) अलग किया जाएगा।

-- Enable xp_cmdshell: 
sp_configure 'show advanced options', 1 
RECONFIGURE WITH OVERRIDE 
GO 
sp_configure 'xp_cmdshell', 1 
RECONFIGURE WITH OVERRIDE 
GO 

-- Get physical file names: 
declare @MyDBOriginalFileName nvarchar(300) = (select physical_name FROM sys.master_files where name = 'MyDB') 
declare @MyDBLogOriginalFileName nvarchar(300) = (select physical_name FROM sys.master_files where name = 'MyDB_log') 
declare @NewMyDBOriginalFileName nvarchar(300) = (select physical_name FROM sys.master_files where name = 'NewMyDB') 
declare @NewMyDBLogOriginalFileName nvarchar(300) = (select physical_name FROM sys.master_files where name = 'NewMyDB_log') 
declare @Command nvarchar(500) 
declare @Sql nvarchar(2000) 

IF (EXISTS (select * from sys.databases where name = 'NewMyDB') 
AND EXISTS (select * from sys.databases where name = 'MyDB')) 
BEGIN 
    USE master 

    ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
    ALTER DATABASE NewMyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

     -- Set new database name 
     ALTER DATABASE MyDB MODIFY NAME = MyDB_OLD 
     ALTER DATABASE NewMyDB MODIFY NAME = MyDB 

     -- Update logical names 
     ALTER DATABASE MyDB_OLD MODIFY FILE (NAME=N'MyDB', NEWNAME=N'MyDB_OLD') 
     ALTER DATABASE [MyDB] MODIFY FILE (NAME=N'NewMyDB', NEWNAME=N'MyDB') 

     EXEC master.dbo.sp_detach_db @dbname = N'MyDB_Old' 
     EXEC master.dbo.sp_detach_db @dbname = N'MyDB' 

     -- Rename physical files 
     SET @Command = 'RENAME "' + @MyDBOriginalFileName + '" "MyDB_OLD.mdf"'; PRINT @Command 
     EXEC xp_cmdshell @Command 
     SET @Command = 'RENAME "' + @MyDBLogOriginalFileName + '" "MyDB_OLD_log.mdf"'; PRINT @Command 
     EXEC xp_cmdshell @Command 
     SET @Command = 'RENAME "' + @NewMyDBOriginalFileName + '" "MyDB.mdf"'; PRINT @Command 
     EXEC xp_cmdshell @Command 
     SET @Command = 'RENAME "' + @NewMyDBLogOriginalFileName + '" "MyDB_log.mdf"'; PRINT @Command 
     EXEC xp_cmdshell @Command 

     -- Attach with new file names 
     declare @NewMyDBFileNameAfterRename nvarchar(300) = replace(@NewMyDBOriginalFileName, 'NewMyDB', 'MyDB') 
     declare @NewMyDBLogFileNameAfterRename nvarchar(300) = replace(@NewMyDBOriginalFileName, 'NewMyDB_log', 'MyDB_log') 
     SET @Sql = 'CREATE DATABASE MyDB ON (FILENAME = ''' + @NewMyDBFileNameAfterRename + '''), (FILENAME = ''' + @NewMyDBLogFileNameAfterRename + ''') FOR ATTACH' 
     PRINT @Sql 
     EXEC (@Sql) 

    ALTER DATABASE MyDB SET MULTI_USER 

END 

-- Disable xp_cmdshell for security reasons: 
GO 
sp_configure 'show advanced options', 1 
RECONFIGURE WITH OVERRIDE 
GO 
sp_configure 'xp_cmdshell', 0 
RECONFIGURE WITH OVERRIDE 
GO 
+0

कृपया प्रदान किए गए लिंक से कुछ निकालें/सारांश के साथ अपना उत्तर बढ़ाएं। लिंक स्वयं जवाब नहीं है। और यह भी ... अप्रचलित –

8

डेटाबेस को अलग करें, फ़ाइलों का नाम बदलें, इसे दोबारा संलग्न करें।

+0

अप्रचलित हो सकता है :-) – Rasmus

+0

केवल कुछ चीज आपके डीबी से जुड़े .mdf, .ndf और .ldf फ़ाइलों के पथ और फ़ाइल नाम का एक नोट है जो आप अलग-अलग ऑपरेशन करने से पहले करते हैं। यदि आपके पास एकाधिक डेटा हैं जो एक ही डिफ़ॉल्ट SQL सर्वर स्थापित स्थान पर अपना डेटा, माध्यमिक डेटा और लॉग फ़ाइलों को बना रहे हैं तो आप डीबी को दोबारा जोड़ने के दौरान बाद में भ्रमित हो सकते हैं। – RBT

+0

आप एसएसएम जीयूआई डिटेच का उपयोग कर सकते हैं, [विंडोज़ एक्सप्लोरर फाइलों का नाम बदलने के लिए] का उपयोग करें, [http://stackoverflow.com/questions/4080430/changing-the-name-of-a-sql-database/18324583#18324583) लेकिन आपको [टीएसक्यूएल को पुनः संलग्न करने के लिए] [https://msdn.microsoft.com/en-us/library/ms190209.aspx) –

1

SQL server physical database files नाम बदलने के लिए सबसे आसान तरीका है:

  1. ओपन और SQL server जहां डेटाबेस आप नाम बदलना स्थित है चाहता था करने के लिए कनेक्ट।
  2. भौतिक और तार्किक नामों को बदलने के लिए क्वेरी विंडो में निम्न स्क्रिप्ट निष्पादित करें। डेटाबेस के नए नाम ("NewDatabaseName") के साथ सभी "OldDatabaseName" को प्रतिस्थापित करना याद रखें, आप इसका नाम बदलना चाहते हैं।नए नाम के साथ सभी NewDatabaseName बदलें आप अपने डेटाबेस के लिए सेट करना चाहते हैं

use OldDatabaseName

ALTER DATABASE OldDabaseName MODIFY FILE (NAME='OldDatabaseName', FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\NewDatabaseName.mdf'); 

ALTER DATABASE OldDatabaseName MODIFY FILE (NAME='OldDatabaseName_log', FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\NewDatabaseName_log.ldf'); 

ALTER DATABASE OldDatabaseName MODIFY FILE (NAME = OldDatabaseName, NEWNAME = NewDatabaseName); 
ALTER DATABASE OldDatabaseName MODIFY FILE (NAME = OldDatabaseName_log, NEWNAME = NewDatabaseName_log); 
  1. और फिर सही OldDatabaseName पर क्लिक करें, Tasks और फिर Take Offline

  2. स्थान पर जाएं (C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\...) जहां भौतिक फाइलें स्थित हैं और उन्हें NewDatabaseName में निर्दिष्ट करें संख्या 2. अपने कंप्यूटर पर उपयोग की जाने वाली इन फ़ाइलों का पूर्ण पथ जांचना याद रखें।
  3. Microsoft SQL Server Management Studio पर वापस जाएं। OldDatabaseName पर राइट क्लिक करें, Tasks का चयन करें और फिर Bring Online चुनें।
  4. अंत में, आगे बढ़ें और का नाम NewDatabaseName पर बदलें। आप कर चुके हैं :-)
+0

का उपयोग करने की आवश्यकता है, आप 'डेटा को नया डाटाबेस नाम सेट ऑफ़लाइन' भी कर सकते हैं और फिर करें 'वैकल्पिक डाटाबेस न्यूडेटाबेस नाम सेट ऑनलाइन' करने से पहले फ़ाइल नाम बदलता है। – cusman

संबंधित मुद्दे