SQL Server 2008 R2 資料庫管理核心知識體系:從建立資料庫語法細節、檔案與檔案群組架構設計、7 種資料庫狀態解析,到 ALTER DATABASE 修改實戰 19 個範例 (改名、增減檔案、檔案群組操作、唯讀、單用戶、自動收縮、排序規則變更),並說明建立資料庫所需權限與上限限制,適合 DBA 系統性掌握與日常操作速查。
CREATE DATABASECREATE ANY DATABASEALTER ANY DATABASE單一執行個體最多 32,767 個資料庫,超過建立失敗。
| 類型 | 邏輯名 | 副檔名 | 說明 |
|---|---|---|---|
| 主要資料檔 | 任意 | .mdf | 每資料庫僅一個,含系統資料表、配置頁 |
| 次要資料檔 | 任意 | .ndf | 可多個,分散 I/O、跨磁碟擴展 |
| 主要記錄檔 | 任意 | .ldf | 至少一個,含交易記錄 |
| 次要記錄檔 | 任意 | .ldf | 可多個,循環寫入不分散 I/O |
最佳實務:資料檔 (.mdf/.ndf) 與記錄檔 (.ldf) 放置於不同實體磁碟/RAID 群,分離隨機讀寫 (資料) 與循序寫入 (記錄),大幅提升效能。
檔案群組:邏輯容器,管理多個資料檔。
• PRIMARY:預設群組,含主要資料檔 + 未指定群組的次要檔。
• 使用者自訂群組:將特定表/索引放入指定群組,實現熱點資料放 SSD、歸檔資料放 HDD 等分級存儲。
| 狀態 | 英文 | 可用性 | 典型觸發情境 |
|---|---|---|---|
| 線上 | ONLINE | ✅ 正常存取 | 正常運行 |
| 離線 | OFFLINE | ❌ 不可存取 | ALTER DATABASE SET OFFLINE |
| 還原中 | RESTORING | ❌ | RESTORE DATABASE 進行中 |
| 復原中 | RECOVERING | ❌ 暫時 | 啟動/還原完成後自動轉 ONLINE |
| 復原等待 | RECOVERY PENDING | ❌ 需人工介入 | 檔案遺失、記錄檔損壞 |
| 可疑 | SUSPECT | ❌ 損壞 | 啟動復原失敗,需緊急修復 |
| 緊急 | EMERGENCY | ⚠️ 唯讀、單用戶、sysadmin | 人工設定,用於災難搶救 |
CREATE DATABASE 測試資料庫;
CREATE DATABASE 範例二資料庫
ON (NAME = N'範例二資料庫', FILENAME = N'D:\DBtest\範例二資料庫.mdf');
CREATE DATABASE 範例三資料庫
ON (NAME = N'範例三資料庫', FILENAME = N'D:\DBtest\範例三資料庫.mdf',
SIZE = 5MB, MAXSIZE = 10MB, FILEGROWTH = 5%);
CREATE DATABASE 範例四資料庫
ON (NAME = N'範例四資料檔', FILENAME = N'D:\DBtest\範例四資料檔.mdf',
SIZE = 5MB, MAXSIZE = 10MB, FILEGROWTH = 5%)
LOG ON (NAME = N'範例四記錄檔', FILENAME = N'D:\DBtest\範例四記錄檔.ldf');
CREATE DATABASE 範例五資料庫
ON
(NAME = N'檔案1', FILENAME = N'D:\DBtest\檔案1.mdf', SIZE=5MB, MAXSIZE=10MB, FILEGROWTH=5%),
(NAME = N'檔案2', FILENAME = N'D:\DBtest\檔案2.ndf', SIZE=5MB, MAXSIZE=10MB, FILEGROWTH=5%),
FILEGROUP 群組1
(NAME = N'群組1檔案', FILENAME = N'D:\DBtest\群組1檔案.ndf', SIZE=5MB, MAXSIZE=10MB, FILEGROWTH=5%),
FILEGROUP 群組2
(NAME = N'群組2檔案1', FILENAME = N'D:\DBtest\群組2檔案1.ndf', SIZE=5MB, MAXSIZE=10MB, FILEGROWTH=5%),
(NAME = N'群組2檔案2', FILENAME = N'D:\DBtest\群組2檔案2.ndf', SIZE=5MB, MAXSIZE=10MB, FILEGROWTH=5%)
LOG ON (NAME = N'記錄檔', FILENAME = N'D:\DBtest\記錄檔.ldf');
CREATE DATABASE 範例六資料庫
ON (NAME = N'範例六資料庫', FILENAME = N'D:\DBtest\範例六資料庫.mdf')
COLLATE Chinese_PRC_CI_AS; -- 簡體中文、不區分大小寫、區分重音
查詢所有可用排序規則:SELECT * FROM ::fn_helpcollations()

| # | 操作 | 關鍵語法 | 注意事項 |
|---|---|---|---|
| 7 | 改名 | ALTER DATABASE 舊名 MODIFY NAME = 新名 或 EXEC sp_renamedb '舊','新' | 需獨佔模式或單用戶模式 |
| 8 | 新增資料檔 | ADD FILE (NAME=..., FILENAME=...) | 可指定 FILEGROUP |
| 9 | 新增記錄檔 | ADD LOG FILE (NAME=..., FILENAME=..., SIZE=3MB, MAXSIZE=50MB, FILEGROWTH=10%) | 記錄檔不屬檔案群組 |
| 10 | 修改檔案 (改名/移動) | MODIFY FILE (NAME=舊邏輯名, NEWNAME=新邏輯名, FILENAME=新路徑) | 路徑變更需 OFFLINE → 移動檔案 → ONLINE |
| 11 | 變更排序規則 | COLLATE Chinese_PRC_CI_AS_KS | 僅影響新建物件,現有欄位需 ALTER TABLE ALTER COLUMN |
| 12 | 移除資料檔 | REMOVE FILE 邏輯名 | 檔案必須為空 (資料已遷移) |
| 13 | 新增檔案群組 | ADD FILEGROUP 群組名 | |
| 14 | 檔案群組改名 | MODIFY FILEGROUP 舊名 NAME=新名 | |
| 15 | 新增檔案到群組並設為預設 | 兩條語句:ADD FILE ... TO FILEGROUP 群組 + MODIFY FILEGROUP 群組 DEFAULT | ALTER DATABASE 一次僅能修改一個屬性 |
| 16 | 刪除檔案群組 (含預設群組) | 三步驟: 1. MODIFY FILEGROUP [PRIMARY] DEFAULT2. REMOVE FILE 檔案3. REMOVE FILEGROUP 群組 | PRIMARY 為保留字需括號 [PRIMARY] |
| 17 | 設定檔案群組唯讀 | 三步驟: 1. ADD FILEGROUP 群組2. ADD FILE ... TO FILEGROUP 群組3. MODIFY FILEGROUP 群組 READ_ONLY | PRIMARY 不可設唯讀;空群組不可設唯讀 |
| 18 | 設定單用戶模式 | SET SINGLE_USER | 立即斷開其他連線 (WITH ROLLBACK IMMEDIATE) |
| 19 | 啟用自動收縮 | SET AUTO_SHRINK ON | 生產環境強烈不建議,產生碎片、CPU 飆升、計畫失效 |
ALTER DATABASE db MODIFY FILE (NAME=logical, FILENAME='new_path')ALTER DATABASE db SET OFFLINEALTER DATABASE db SET ONLINECOLLATE:僅作為新建表/欄位的預設值。ALTER TABLE ALTER COLUMN col TYPE COLLATE new_collate。DBCC SHRINKFILE (TRUNCATEONLY) 於維護窗口,並設定合理 FILEGROWTH (固定 MB 而非 %)。掌握 CREATE/ALTER DATABASE 完整語法與檔案群組設計哲學,是 DBA 實現儲存分級、效能隔離、高可用架構的核心技能。