Oracle 8/8i/9i 時期的生產事故案例回顧:龐大表空間、預設參數、無分區、回滾段抖動、ORA-600 內部錯誤頻發、核心字典索引重複導致 Hang、自動 Crash、補丁升級困境。雖然版本迭代已修復多數已知缺陷,但架構層面的風險認知對現代 DBA 仍具啟發價值。
V$LOCKED_OBJECT 顯示 10+ 會話鎖住同一表,CPU 持續 90%+,用戶無法登入。OPTIMAL、指定大回滾段、增大 MINEXTENTS,問題依舊。ORA-00600: internal error code,重啟暫時恢復。UPDATE 單行報內部錯誤、唯一索引表出現重複值(違反實體完整性)、DROP TABLE 失敗、索引重建失敗、CHECKPOINT 過於頻繁(日志檔過小 7MB)。| 現象 | 深層原因 | 現代版本對策 |
|---|---|---|
| Block Size 2K / Transactions 32 | 參數未依負載調優,導致 ITL 槽不足、併發能力極弱 | 12c+ 自動記憶體管理、大 Block Size (8K/16K/32K)、自動 Undo 管理 |
| 大表無分區 | 全表掃描、索引維護、備份恢復、Purge/Archive 全受制於單段大小 | Range/Interval/List/Hash/Reference/Composite 分區、分區級維護 |
| 回滾段手工管理 | Extent 碎片、OPTIMAL 抖動、Snapshot Too Old (ORA-01555) | 自動 Undo 管理 (UNDO_MANAGEMENT=AUTO)、保證保留時間 |
| ORA-600 / 核心索引重複 | 軟體 Bug + 硬體故障 + 參數不當 疊加觸發 | PSU/RU 定期打補丁、ASM 正規化、Data Guard 容災、自動診斷 (ADR) |
| Control File / Redo Log 過小 | Checkpoint 狂暴、LGWR 等待、效能抖動 | 多路徑多路徑 Redo、大日志組、Fast Start MTTR Target |
SGA/PGA、PROCESSES/SESSIONS、DB_BLOCK_SIZE、UNDO_RETENTION、LOG_BUFFER、DB_FILES。V$SYSMETRIC_HISTORY、自定義指標(鎖等待、Undo 使用率、Redo 生成率),異常預警而非事後查日志。BACKUP VALIDATE、RESTORE VALIDATE、定期 DUPLICATE 到測試環境驗證可用性。「任何再好的軟體也有缺陷,優秀的軟體只是避免了大多數常見問題。」—— 這句 20 年前的感嘆,放在今天的 Exadata/Autonomous Database/Cloud@Customer 架構下依然成立。
DBA 的核心價值不在於背誦參數,而在於風險想像力與體系化防禦。