資料庫上線後,結構調整在所難免:更名、擴充檔案、新增檔案群組、調整預設群組……本文系統整理 ALTER DATABASE 核心語法與生產環境實戰腳本,助你安全、零停機完成變更。
-- 方法一:ALTER DATABASE (SQL 2005+)
ALTER DATABASE OldName MODIFY NAME = NewName;
-- 方法二:系統程序 (相容舊版)
EXEC sp_renamedb 'OldName', 'NewName';
USE master; GO
DECLARE @data_path NVARCHAR(256);
SELECT @data_path = physical_name
FROM MyDatabase.sys.database_files
WHERE file_id = 1; -- 主資料檔
SET @data_path = SUBSTRING(@data_path, 1,
CHARINDEX(LOWER('MyDatabase.mdf'), LOWER(@data_path)) - 1);
ALTER DATABASE MyDatabase
ADD FILE (
NAME = 'LogicNameOfDataFile1_1',
FILENAME = @data_path + 'DataFile1_1.ndf',
SIZE = 500MB, MAXSIZE = 100GB, FILEGROWTH = 256MB
);
ALTER DATABASE MyDatabase
ADD LOG FILE (
NAME = 'LogicNameOfLogFile1_1',
FILENAME = @data_path + 'LogFile1_1.ldf',
SIZE = 200MB, MAXSIZE = 50GB, FILEGROWTH = 128MB
);
-- 1. 建立檔案群組
ALTER DATABASE MyDatabase ADD FILEGROUP UserFG1_1; GO
-- 2. 新增兩個檔案到該群組
ALTER DATABASE MyDatabase
ADD FILE (
NAME = 'LogicNameOfDataFile1_2',
FILENAME = @data_path + 'DataFile1_2.ndf',
SIZE = 1000MB, MAXSIZE = 500GB, FILEGROWTH = 512MB
),
(
NAME = 'LogicNameOfDataFile1_3',
FILENAME = @data_path + 'DataFile1_3.ndf',
SIZE = 500MB, MAXSIZE = 500GB, FILEGROWTH = 256MB
)
TO FILEGROUP UserFG1_1;
注意:未指定 TO FILEGROUP 者預設進 PRIMARY 群組。
ALTER DATABASE MyDatabase2
MODIFY FILE (
NAME = 'LogicNameOfDataFile2',
NEWNAME = 'NewLogicNameOfDataFile2',
FILENAME = 'D:\NewPath\NewDataFile2.mdf', -- 需先離線移動實體檔
SIZE = 25GB, MAXSIZE = 150GB, FILEGROWTH = 10GB
);
ALTER ... MODIFY FILE (FILENAME=...) → 離線資料庫 → 移動實體檔 → 上線資料庫。
ALTER DATABASE MyDatabase3
MODIFY FILE (
NAME = 'MyDatabase3_log',
FILENAME = 'L:\NewLog\LogFile3.ldf',
SIZE = 10GB, MAXSIZE = 50GB, FILEGROWTH = 5GB
);
ALTER DATABASE MyDatabase6
MODIFY FILEGROUP UserFG6_2 NAME = NewUserFG6_2;
-- 將新建表預設放入 NewUserFG6_2
ALTER DATABASE MyDatabase6 MODIFY FILEGROUP NewUserFG6_2 DEFAULT;
-- 還原給 PRIMARY
ALTER DATABASE MyDatabase6 MODIFY FILEGROUP [PRIMARY] DEFAULT;
CREATE TABLE 未指定 ON 子句時的行為。| 錯誤訊息 | 原因 | 解決 |
|---|---|---|
| The file '...' cannot be overwritten. It is being used by database '...'. | 資料庫上線狀態嘗試移動檔案 | 先 ALTER MODIFY FILE,再 OFFLINE 移動實體檔,再 ONLINE |
| MODIFY FILE failed. Specified size is less than current size. | 嘗試縮小 SIZE | SIZE 僅能增大;需用 DBCC SHRINKFILE (慎用) |
| Filegroup 'X' does not exist. | TO FILEGROUP 指定不存在的群組 | 先 ADD FILEGROUP |