[SQL Server]修改資料庫實體檔案名稱(physical name)

有時後資料庫會出現門當戶不對的狀況,這時候不用重新投胎(Restore DB),只要幾秒鐘就門當戶對了。

 

打開SSMS物件總管,資料庫名稱是AdventureWorks2014,是一個漂亮的富家千金。

 

驗明正身的時候到了

資料庫屬性視窗

AdventureWorks2014資料庫按右鍵  > 屬性 > 選取頁面選"檔案"

發現邏輯名稱實體檔案名稱都是AdventureWorks2012,是窮小子無誤。

透過sys.database_files查詢

USE AdventureWorks2014
SELECT file_id, name as logical_name, physical_name
FROM sys.database_files

再滴血認親也是一樣的結果!

 

門當戶對

1.修改邏輯檔案名稱(Logical name)

ALTER DATABASE AdventureWorks2014 MODIFY FILE (NAME=N'AdventureWorks2012_Data', NEWNAME=N'AdventureWorks2014_Data')
GO
ALTER DATABASE AdventureWorks2014 MODIFY FILE (NAME=N'AdventureWorks2012_Log', NEWNAME=N'AdventureWorks2014_Log')
GO

 

2.將資料庫卸離(detach)

ALTER DATABASE AdventureWorks2014 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
sp_detach_db 'AdventureWorks2014'

 

3.呼叫Rename command在Windows檔案系統中隱性埋名 

*或是透過windows檔案總管修改也行。

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

EXEC master..xp_cmdshell 'Rename C:\sql\AdventureWorks2014_Data.mdf AdventureWorks2014_Data.mdf'
EXEC master..xp_cmdshell 'Rename C:\sql\AdventureWorks2012_Data_log.ldf AdventureWorks2014_Data_log.ldf'

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;

 

4.重新附加資料庫(attach)

CREATE DATABASE [AdventureWorks2014] ON
(NAME = N'AdventureWorks2014_Data', FILENAME = N'C:\sql\AdventureWorks2014_Data.mdf'),
(NAME = N'AdventureWorks2014_Log' , FILENAME = N'C:\sql\AdventureWorks2014_Data_log.ldf')
FOR ATTACH
GO

 

一切都門當戶對了!

 

這一個關於富家千金和窮小子的故事。

 

參考:

Rename logical and physical names of database files in SQL Server

xp_cmdshell (Transact-SQL)