資料庫重命名在遷移、測試環境建立、命名規範統一時常需執行。本文提供完整 T-SQL 腳本,涵蓋邏輯檔名、資料庫名稱、實體檔名三層次修改,並說明關鍵注意事項。
在「活動監視器」或執行 sp_who2 確認目標資料庫無任何 Session,否則 ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE 可強制斷開。
USE master; GO ALTER DATABASE YQBlogAA MODIFY FILE (NAME = 'YQBlogAA', NEWNAME = 'YQBlog'); ALTER DATABASE YQBlogAA MODIFY FILE (NAME = 'YQBlogAA_log', NEWNAME = 'YQBlog_log'); GO
EXEC sys.sp_renamedb @dbname = 'YQBlogAA', @newname = 'YQBlog'; GO
xp_cmdshell 重命名實體檔-- 1. 分離
EXEC sp_detach_db 'YQBlog';
GO
-- 2. 開啟 xp_cmdshell(需 sysadmin)
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
GO
-- 3. 重命名實體檔(路徑勿含中文)
EXEC xp_cmdshell 'ren "C:\Data\YQBlogAA.mdf" "YQBlog.mdf"';
EXEC xp_cmdshell 'ren "C:\Data\YQBlogAA_log.ldf" "YQBlog_log.ldf"';
GO
-- 4. 重新附加
EXEC sp_attach_db @dbname = N'YQBlog',
@filename1 = N'C:\Data\YQBlog.mdf',
@filename2 = N'C:\Data\YQBlog_log.ldf';
GO
使用 ALTER DATABASE ... MODIFY FILE 搭配 SET OFFLINE/ONLINE 可避免分離/附加風險:
ALTER DATABASE YQBlog SET OFFLINE WITH ROLLBACK IMMEDIATE; -- 手動或用 PowerShell 改檔名 ALTER DATABASE YQBlog MODIFY FILE (NAME = 'YQBlog', FILENAME = 'C:\Data\YQBlog_new.mdf'); ALTER DATABASE YQBlog MODIFY FILE (NAME = 'YQBlog_log', FILENAME = 'C:\Data\YQBlog_new_log.ldf'); ALTER DATABASE YQBlog SET ONLINE;
SELECT name AS logical_name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('YQBlog');
完成上述步驟,即可實現邏輯名、資料庫名、實體檔名三位一體的重命名,確保中繼資料與檔案系統一致。