前言
Oracle 8 作為物件關聯式資料庫傑出代表,在規模、多媒體支援、並行性、安全性上均優於 Sybase、Informix。8.0.4 更引入資料分區、物件關聯技術、索引組織表、連線管理器、進階佇列等新特性,被視為 PeopleSoft、SAP、Baan 等封裝應用的最佳引擎。但任何軟體都有缺陷,本文揭露大型系統中發現的隱患。
案例背景
- 架構:主機-終端模式,4 台 HP-9000 小型機,1.5GB 記憶體
- 初始參數:區塊 2K、交易數 32(採預設值),未分區建表
- 症狀:大表頻繁被鎖、用戶無法進入、CPU 峰值 90%+、頻現 ORA-600 錯誤
排查過程
- 鎖監控 SQL:查
V$LOCKED_OBJECT 與 V$SESSION 定位鎖表會話,殺掉緩解但非根治。
- Rollback Segment 調整:設
MINEXTENTS=20、調大 OPTIMAL、指定大 rollback segment,ORA-600 依舊,鎖爭用更嚴重。
- 重啟資料庫:資源釋放、速度恢復,但隨後出現單筆資料無法 UPDATE(內部錯誤)、唯一索引表出現重複值、索引重建失敗、發現重複索引導致 Hang、日誌檔過小 (7MB) 導致 Checkpoint 頻繁、自動 Down 機、Rollback Segment online/offline 異常。
廠商回應與現狀
Oracle 技術工程師承認 8.0.4 版本問題,承諾提供 Patch,但打 Patch 需全庫 Export、重新編譯所有程式、耗時一週以上,風險極高,目前仍在等待更好方案。
系統設計六大建議
- 硬體特性匹配:HP 偏重 I/O,避免 CPU 過載;DEC 偏重 CPU,可增大 CPU 相關參數;Sun 需平衡配置。
- 日誌檔 ≥ 8MB:過小導致 Checkpoint 頻繁拖垮效能。
- Rollback Segment 合理配置:大 Segment 增加 MINEXTENTS、設定 OPTIMAL,減少動態擴展/回收。
- 提升 CPU 擊中率:適度增大
log_simultaneous_copies、db_block_latches、db_writers。
- 增加緩衝區:適度增大
db_block_buffers、shared_pool_size,提升 Buffer 與 SQL 命中率。
- 改用 Client/Server 架構:主機-終端模式導致主機負載過重,建議採用客戶端-伺服器模式。