邏輯檔案名稱是 SQL Server 內部識別資料檔與記錄檔的名稱,與實體檔名、資料庫名稱皆可能不同。本文提供完整 T-SQL 腳本,涵蓋查詢邏輯名稱、修改邏輯名稱、離線移動資料/記錄檔至新路徑三大實務操作,並說明關鍵步驟與注意事項。
USE mydb;
GO
-- 方法一:FILE_NAME 函數(檔案 ID 1 通常為資料檔,2 為記錄檔)
SELECT FILE_NAME(1) AS 'Data File', FILE_NAME(2) AS 'Log File';
-- 方法二:系統目錄檢視
SELECT name, type_desc, physical_name
FROM sys.database_files;
輸出範例:mydb / mydb_log
ALTER DATABASE [mydb]
MODIFY FILE (NAME = mydb, NEWNAME = new_mydb);
ALTER DATABASE [mydb]
MODIFY FILE (NAME = mydb_log, NEWNAME = new_mydb_log);
GO
-- 驗證
SELECT FILE_NAME(1) AS 'Data File', FILE_NAME(2) AS 'Log File';
輸出變更為:new_mydb / new_mydb_log
適用情境:磁碟空間不足、效能優化(分離資料/記錄檔至不同磁碟)、儲存架構調整。
-- 3.1 查詢目前路徑
SELECT physical_name FROM sys.database_files;
/*
D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mydb.mdf
D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mydb_log.ldf
*/
-- 3.2 移動路徑
USE [master];
GO
-- 3.2.1 殺掉所有連線
DECLARE @str VARCHAR(500) = '';
SELECT @str = @str + 'KILL ' + RTRIM(spid) + ';' + CHAR(13) + CHAR(10)
FROM master.dbo.sysprocesses
WHERE dbid = DB_ID('mydb');
EXEC(@str);
GO
-- 3.2.2 設定離線
ALTER DATABASE [mydb] SET OFFLINE;
GO
-- 3.2.3 實體移動檔案(建議用 COPY 驗證後再 DEL 來源)
EXEC master..xp_cmdshell 'MOVE "D:\...\mydb.mdf" "E:\DBTEST"', NO_OUTPUT;
EXEC master..xp_cmdshell 'MOVE "D:\...\mydb_log.LDF" "E:\DBTEST"', NO_OUTPUT;
GO
-- 3.2.4 更新系統目錄路徑
ALTER DATABASE [mydb] MODIFY FILE (NAME = new_mydb, FILENAME = 'E:\DBTEST\mydb.mdf');
ALTER DATABASE [mydb] MODIFY FILE (NAME = new_mydb_log, FILENAME = 'E:\DBTEST\mydb_log.ldf');
GO
-- 3.2.5 設定線上
ALTER DATABASE [mydb] SET ONLINE;
GO
-- 3.2.6 驗證新路徑
USE mydb;
GO
SELECT physical_name FROM sys.database_files;
/*
E:\DBTEST\mydb.mdf
E:\DBTEST\mydb_log.ldf
*/
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;(用畢建議關閉)。掌握邏輯檔案名稱管理與檔案重新定位技巧,能靈活應對儲存擴充、效能調校與災難復原遷移需求。