資料庫上線後,業務增長常要求調整儲存架構:新增資料檔分散 I/O、變更檔案成長參數、調整檔案群組屬性等。ALTER DATABASE 是執行這些結構變更的核心指令,僅限 sysadmin、dbcreator 或具 CREATE DATABASE 權限的 db_owner 執行。

| 子句 | 功能 | 典型應用場景 |
|---|---|---|
ADD FILE | 新增資料檔至指定檔案群組 | 將熱點資料表移至獨立磁碟、擴充儲存容量 |
ADD LOG FILE | 新增交易記錄檔 | 記錄檔磁碟空間不足、分散記錄 I/O |
REMOVE FILE | 移除空檔案(需先清空資料) | 整併檔案、下架舊磁碟 |
ADD FILEGROUP | 建立新檔案群組 | 實現資料分層(熱/溫/冷資料分離) |
MODIFY FILE | 調整檔案大小、最大值、成長增量 | 預先配置空間避免頻繁自動成長、限制最大容量 |
MODIFY FILEGROUP | 設定檔案群組唯讀/讀寫 | 歸檔歷史資料設為 READONLY 減少備份量 |
DBCC SHRINKFILE (file_name, EMPTYFILE) 遷移資料。tempdb 生效,且需重啟 SQL Server 服務才生效。-- 1. 新增檔案群組與資料檔
ALTER DATABASE SalesDB ADD FILEGROUP ArchiveFG;
ALTER DATABASE SalesDB ADD FILE (
NAME = ArchiveData,
FILENAME = 'F:\SQLData\SalesDB_Archive.ndf',
SIZE = 5GB,
MAXSIZE = 50GB,
FILEGROWTH = 1GB
) TO FILEGROUP ArchiveFG;
-- 2. 將歷史資料表移至新檔案群組(需重建叢集索引)
CREATE CLUSTERED INDEX CX_Orders_Archive ON Orders (OrderDate)
WITH (DROP_EXISTING = ON) ON ArchiveFG;
-- 3. 設定檔案群組唯讀
ALTER DATABASE SalesDB MODIFY FILEGROUP ArchiveFG READONLY;
善用 ALTER DATABASE 彈性調整儲存拓撲,配合檔案群組分層策略,能大幅降低儲存成本並提升維護彈性。