資料庫設計品質直接決定系統的效能、可擴展性與維護成本。本文匯總 Oracle 9i 階段的企業級設計規範,涵蓋物理環境規劃、邏輯模型規範、命名標準、SQL 編寫準則、備份恢復策略、系統調優知識庫與設計工具鏈,旨在為架構師、DBA、開發人員提供一份可落地的標準化參考。
| 平台 | 物理記憶體 | SGA 佔比 | Swap 規則 |
|---|---|---|---|
| Linux (32-bit) | ≤ 4 GB | 50%–75% | RAM < 2G → 3×RAM;RAM ≥ 2G → 1–2×RAM |
| 64-bit UNIX | > 4 GB | 50%–70% | 同左 |
警示:SGA 過大導致 OS 分頁,反而拖垮效能;9i 引入動態 SGA,可線上調整 db_cache_size、shared_pool_size 等參數。
SID1、SID2…SID.DOMAIN (如 PROD.MYCOMPANY.COM)SHUTDOWN → STARTUP MOUNT → ALTER DATABASE CHARACTER SET INTERNAL_USE … 流程,且無 LOB 物件時風險較低。MAXDATAFILES ≥ DB_FILES。UndoSpace = UR × UPS × DB_BLOCK_SIZE + 冗餘Tablespace = SUM(數據段+索引段) × 1.5AUTOEXTEND ON NEXT 2M/4M/8M… MAXSIZE UNLIMITED (建議上限 2G)EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTOCREATE TABLESPACE TBS_USERINFO
DATAFILE '/oradata/tbs_userinfo.dbf' SIZE 8M REUSE
AUTOEXTEND ON NEXT 2M MAXSIZE UNLIMITED
NOLOGGING
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;
效能提升 ~15%,Unix 採軟連結 ln -s /dev/raw/raw1 /oradata/raw1.dbf 並在建表空間加 REUSE;Windows 使用 Oracle 提供的裸裝置映射工具。
| 物件類型 | 前綴 | 命名範例 | 備註 |
|---|---|---|---|
| 表 | TBL_ | TBL_PSTN_DETAIL | 有意義單詞,下劃線分隔,不含雙引號 |
| 分區 | P | P20241001 | 含業務含義 (日期/區域) |
| 欄位 | — | PHONE_NUMBER | 字母開頭,無雙引號 |
| 主鍵 | PK_ | PK_TBL_PSTN_DETAIL_ID | 可省略表前綴 |
| 外鍵 | FK_ | FK_TBL_ORDER_CUST | 引用父表主鍵欄位 |
| 一般索引 | IDX_ | IDX_TBL_ORDER_STATUS | 復合索引取首欄+序號 |
| 主鍵索引 | IDX_PK_ | IDX_PK_TBL_ORDER | 建表時 USING INDEX 指定屬性 |
| 唯一索引 | IDX_UK_ | IDX_UK_TBL_USER_EMAIL | |
| 外鍵索引 | IDX_FK_ | IDX_FK_TBL_ORDER_CUST | |
| 函數索引 | IDX_FUNC_ | IDX_FUNC_TBL_UPPER_NAME | |
| 叢集索引 | IDX_CLU_ | IDX_CLU_TBL_DEPT_EMP | |
| 視圖 | V_ | V_MONTHLY_SALES | 按業務命名 |
| 實體化視圖 | MV_ | MV_DAILY_SUMMARY | |
| 存儲過程 | PROC_ | PROC_CALC_BONUS | |
| 觸發器 | TRIG_ | TRIG_TBL_ORDER_AIU | 表名+操作類型 |
| 函數 | FUNC_ | FUNC_GET_TAX_RATE | |
| 套件 | PKG_ | PKG_ORDER_MGMT | |
| 序列 | SEQ_ | SEQ_ORDER_ID | |
| 公用表空間 | TBS_ | TBS_PARAMETER | |
| 專用表空間 | TBS_<表名>_NN | TBS_TBL_ORDER_01 | 專存單表/分區 |
| 數據文件 | <表空間>NN.DBF | TBS_USERINFO01.DBF | |
| 一般變數 | VAR_ | VAR_TOTAL_AMT | |
| 游標變數 | CUR_ | CUR_EMP_LIST | |
| 記錄型變數 | REC_ | REC_EMP_ROW | |
| 表類型變數 | TAB_ | TAB_EMP_ARRAY | |
| 資料庫鏈路 | DBL_ | DBL_ERP_PROD | 分散式連結 |
_ 分隔。CHAR,可變長 VARCHAR2;避免可變長用 CHAR 造成空格填充與 TRIM() 開銷。NUMBER,必要時指定精度 NUMBER(12,2)。DATE / TIMESTAMPVARCHAR2(14) 存 YYYYMMDDHH24MISS,應用層轉換BLOB/CLOB/LONG。SEQUENCE 產生。11101)。TABLESPACE,忙碌表用專用表空間PCTUSED:低更新表 60–85,高更新 40–70INITRANS:並行/RAC 表設 2 的倍數STORAGE:INITIAL 接近預估段大小 (2 的冪);NEXT 同理;PCTINCREASE=0;MINEXTENTS=1–2ON DELETE CASCADENOT NULL 顯式宣告;應用層用 NVL() 防空值運算陷阱CHECK 約束用於業務規則驗證BEFORE/AFTER 與應用事務一致性,大量導入時禁用COMMENT,USER_TAB_COMMENTS 可查。LOCAL 索引;非分區索引必指定 TABLESPACE 與 STORAGE。SELECT * 及視圖中 ORDER BY。PACKAGE;模組化設計、支援重載、必含異常處理;非資料庫操作禁用 PL/SQL 實現;函數中避免 DML/DDL。SYS/SYSTEM 強制修改預設密碼,禁建業務物件;鎖定 SCOTTSYNONYM| 規則 | 說明 |
|---|---|
| 字串字面值 | 統一單引號;純數字字串必加引號,防隱性轉換導致索引失效 |
| 避免 IN / NOT IN | 大表多值改用 EXISTS / JOIN;CHAR 比 VARCHAR2 查詢快 (存儲反之) |
| 避免嵌套 SELECT | 子查詢改寫為 JOIN 或分析函數 |
| 禁用 SELECT * | 明確列出欄位 (不含 COUNT(*)) |
| 避免無謂排序 | ORDER BY 僅在必要時使用 |
| INSERT 必列欄位 | 防結構變更導致錯誤 |
| COUNT 差異 | COUNT(*)=總行數;COUNT(col)=非空行數;COUNT(DISTINCT col)=去重行數 |
| FK 可空控制 | 無業務需求時 FK 欄位加 NOT NULL |
| SEQUENCE 跳號 | 回滾/崩潰/CACHE 導致跳號,不可作連續流水號 |
| 集合運算 ORDER BY | 欄位名需一致,否則用位置序號 ORDER BY 1,2 |
| WHERE 條件驗證 | UPDATE/DELETE 必先用 SELECT 驗證結果集 |
| 級聯刪除/轉移 | 父子表刪除必級聯或按業務轉移 |
適用:小庫、可停機窗口。備份:所有數據文件、控制文件、REDO、INIT.ORA。
CONTROL_FILE_RECORD_KEEP_TIME=365)。-- 典型 RMAN 全備份腳本片段
BACKUP SPFILE FORMAT '/backup/%d_SPFILE_%T_%s_%p.bak';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL FORMAT '/backup/%d_ARC_%T_%s_%p.bak' DELETE ALL INPUT;
BACKUP CURRENT CONTROLFILE FORMAT '/backup/%d_CTL_%T_%s_%p.bak';
適用:中等規模、嚴格 7×24、異地容災需求。
$ORACLE_HOME/network/agent/*.q 殘留文件,手動刪除即可。ALTER TABLE … MOVE TABLESPACE … 遷移表空間後必重建索引;或用 IMP 限制目標用戶配額實現遷移。ALTER SYSTEM SET LOG_CHECKPOINT_TO_ALERT=TRUE 記錄檢查點資訊至 Alert Log。@?/rdbms/admin/spcreate.sql 建 PERFSTAT 用戶TIMED_STATISTICS=TRUEEXEC STATSPACK.SNAP 或 EXEC STATSPACK.SNAP(I_SNAP_LEVEL=>5,...)@?/rdbms/admin/spreport.sqlspdrop.sql、DBMS_JOB.REMOVEALTER SYSTEM SET SQL_TRACE=TRUEALTER SESSION SET SQL_TRACE=TRUE 或 DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(sid,serial#,TRUE)UDUMP/*_ora_.trc 、系統 BDUMP/alert_.log TKPROF 格式化分析;關注 AVG RD(ms) > 20 表空間爭用、FAST_START_MTTR_TARGET、REDO 切換頻率、緩存命中率 > 90%。| 區域 | 建議佔比 | 關鍵指標與調整手段 |
|---|---|---|
| SGA | 50% (80% DB Cache, 15% Shared Pool, 5% Other) | DB_CACHE_HIT_RATIO > 90%;FREE BUFFER WAITS → 加 DB_WRITER_PROCESSES、DISK_ASYNCH_IO=TRUE;BUFFER BUSY WAITS → 擴大 DB_CACHE_SIZE 或分離熱表至 KEEP POOL |
| Shared Pool | SGA 15% | HARD PARSES < 100/s、SOFT PARSE > 90%;OLTP 用 CURSOR_SHARING=FORCE,DWH 用 EXACT;大 PL/SQL 用 DBMS_SHARED_POOL.KEEP 或增 SHARED_POOL_RESERVED_SIZE (≤ 50%) |
| PGA | 30% | 9i WORKAREA_SIZE_POLICY=AUTO + PGA_AGGREGATE_TARGET;排序磁碟/記憶體比 < 5%;專用/共享服務器參數不同 |
| OS | 20% | 保留核心與網路緩衝 |