核心差異
| 檔案 | 副檔名 | 用途 | 內容 | 特性 |
| 主要資料檔 | .mdf | 儲存資料庫資料 | 資料表、索引、視圖、預存程序等所有物件頁面 | 每個資料庫至少一個 |
| 次要資料檔 | .ndf | 擴充資料儲存 | 同 .mdf,可分散不同磁碟 | 可有零個或多個 |
| 交易記錄檔 | .ldf | 儲存交易記錄 | 所有修改操作 (INSERT/UPDATE/DELETE) 的記錄、檢查點、備份資訊 | 每個資料庫至少一個 |
關鍵管理要點
MDF/NDF 資料檔
- 預設檔案群組 (PRIMARY) 包含 .mdf
- 可建立使用者檔案群組,將 .ndf 加入,實現表/索引分散儲存
- 自動成長設定:建議固定大小成長 (如 512MB) 而非百分比
- 啟用
PAGE_VERIFY CHECKSUM 偵測頁面損壞
LDF 記錄檔
- 循序寫入,效能極度依賴磁碟 I/O 延遲 → 建議獨立磁碟/RAID 1/10
- 復原模式決定記錄保留:
- FULL:完整記錄,需定期記錄備份截斷,支援時間點還原
- BULK_LOGGED:大量操作最小記錄,需記錄備份
- SIMPLE:檢查點自動截斷,無法時間點還原
- 避免記錄檔無限成長:設定合理最大值、監控
log_reuse_wait_desc
- 絕不可直接刪除 .ldf:會導致資料庫進入 SUSPECT/RECOVERY_PENDING
常見操作
-- 查看檔案資訊
SELECT name, type_desc, physical_name, size/128.0 AS SizeMB,
max_size/128.0 AS MaxSizeMB, growth, is_percent_growth
FROM sys.database_files;
-- 修改自動成長 (固定 512MB)
ALTER DATABASE MyDB MODIFY FILE (NAME = MyDB_Data, FILEGROWTH = 512MB);
ALTER DATABASE MyDB MODIFY FILE (NAME = MyDB_Log, FILEGROWTH = 512MB);
-- 縮減記錄檔 (FULL 模式需先備份記錄)
BACKUP LOG MyDB TO DISK = 'path\log.trn';
DBCC SHRINKFILE (MyDB_Log, 1024); -- 目標 1GB
-- 新增 NDF 檔案
ALTER DATABASE MyDB ADD FILE (
NAME = MyDB_Data2,
FILENAME = 'E:\Data\MyDB_Data2.ndf',
SIZE = 1GB,
FILEGROWTH = 512MB
) TO FILEGROUP [UserData];
災難恢復關鍵
- 備份策略:完整備份 + 差異備份 + 記錄備份 (FULL 模式)
- .mdf + .ldf 必須成對備份/還原 (檔案層級快照除外)
3. 記錄檔損壞:若有完整備份鏈,可尾記錄備份 → 還原至時間點
4. 資料檔損壞:需從備份還原,或嘗試 DBCC CHECKDB REPAIR (風險高)