資料庫建模是系統開發的基石。邏輯設計疏漏 → 物理實現扭曲 → 開發後期頻繁重構 → 成本指數級上升。本文梳理邏輯建模 → 物理設計 → 參數調優 → 應用介接四階段完整流程,並以「大型企業勞資管理系統」為實戰案例演示。
Rational Rose / PowerDesigner / ERWin → 邏輯模型 → DDL 腳本 → Schema Generation 直接建表。
原則:**利於備份、利於性能、隔離爭用**。
| # | 原則 | 實施細節 |
|---|---|---|
| 1 | 表/索引分離 | 建立 TS_DATA、TS_INDEX 表空間,分別置於不同物理磁碟/ASM 磁碟組。嚴禁業務對象進 SYSTEM/SYSAUX。 |
| 2 | 熱點對象隔離 | 高頻聯查表/索引分散不同磁碟;大表採用分區表,分區分佈多磁碟。注意 OS 檔案大小限制(32 位 2TB/4TB)。 |
| 3 | Undo 表空間多路徑 | 至少 2 個 UNDO 表空間置於不同磁碟,init.ora 交錯指定 UNDO_TABLESPACE 實現負載均衡。 |
| 4 | Redo Log 寫入優化 | 每組 2+ 成員,成員分佈不同磁碟/控制器。啟用 ARCHIVELOG 模式。Redo 放低讀寫磁碟。 |
| 5 | 存儲參數精算 | 依表特性設 PCTFREE/PCTUSED/INITRANS/MAXTRANS。高更新表 PCTFREE 20、PCTUSED 60 預留遷移空間。 |
| 6 | 安全體系前置 | 依角色定義 Profile/Role/權限矩陣,開發階段直接套用。 |
案例環境:2GB 記憶體、100 併發用戶、OLTP 型勞資系統。
| 參數 | 設定值 | 依據 |
|---|---|---|
SHARED_POOL_SIZE | 默認 × 1.5 | 大量 PL/SQL、動態 SQL 解析需求 |
DB_BLOCK_BUFFERS (8i) / DB_CACHE_SIZE (9i+) | 25 MB / 200 MB+ | 熱點數據駐留,減少物理讀 |
SORT_AREA_SIZE | 10 MB | 避免磁碟排序,PGA 管理 (9i+ 用 PGA_AGGREGATE_TARGET) |
LOG_BUFFER | 默認 × 1.5 | 大量提交減少 Log File Sync 等待 |
DBWR_IO_SLAVES | 1 | 單寫進程配合異步 I/O |
ROLLBACK_SEGMENTS (8i/9i) | 10 段,跨 2 磁碟 | 手動管理回滾段,避免動態擴縮抖動 |
PROCESSES | 80 | 含背景進程,預留 20% 余量 |
MTS_SERVERS / MTS_DISPATCHERS | 3 / "TCP,3" | 共享服務器模式,節省連接記憶體 |
ARCHIVE_LOG_START | TRUE | 啟用歸檔模式,支援時間點恢復 |
參數無「標準值」,需上線後持續監控V$SYSSTAT/V$SYSTEM_EVENT/AWR 迭代調整。
案例採用 Borland C++Builder 5 → **BDE (Borland Database Engine)** 介接 Oracle。選型考量:
現代替代:ODP.NET (Managed)、JDBC Thin、ODBC 3.8+、Entity Framework Core / Dapper / MyBatis。
EMP_MAIN、照片 EMP_PHOTO 分表;照片表按 FACTORY_ID Range 分區,各分區置於獨立表空間/磁碟。TS_CODE,單獨磁碟,避免與主檔爭用。UNDO_A/UNDO_B 各 5 段,跨 2 磁碟;批量上傳時切換大段 RB_BATCH 防止 Snapshot Too Old。ARCHIVELOG 歸檔至專用備份磁碟陣列。EMP_MAIN 高增刪改 → PCTFREE 10, PCTUSED 80;估算 Block 數 → 規劃數據檔大小。資料庫設計非一次性交付,而是DBA 主導物理/參數、建模師主導邏輯、開發主導介接三方協作的持續迭代過程。案例證明:邏輯清晰、物理隔離、參數預熱、介接成熟四到位,系統上線即穩定,後期調優空間大、風險低。