-- no_pk.sql: 無主鍵表
SELECT owner, table_name
FROM dba_tables
WHERE owner = UPPER('&OWNER')
AND table_name NOT IN (SELECT table_name FROM dba_constraints
WHERE constraint_type = 'P' AND owner = UPPER('&OWNER'))
ORDER BY table_name;
-- dis_pk.sql: 主鍵失效
SELECT owner, table_name, constraint_name, status
FROM dba_constraints
WHERE constraint_type = 'P' AND status != 'ENABLED' AND owner = UPPER('&OWNER');
-- nonupk.sql: 非唯一索引支撐主鍵(應為唯一索引)
SELECT c.owner, c.table_name, c.constraint_name, i.index_name, i.uniqueness
FROM dba_constraints c
JOIN dba_indexes i ON c.index_name = i.index_name AND c.owner = i.owner
WHERE c.constraint_type = 'P' AND i.uniqueness = 'NONUNIQUE'
AND c.owner = UPPER('&OWNER');
-- mkrebuild_idx.sql: 索引不在索引表空間
SELECT i.owner, i.index_name, i.tablespace_name, t.tablespace_name AS table_ts
FROM dba_indexes i
JOIN dba_tables t ON i.table_owner = t.owner AND i.table_name = t.table_name
WHERE i.tablespace_name != 'INDEX_TS' -- 目標索引表空間
AND i.owner = UPPER('&OWNER')
AND t.tablespace_name != 'SYSTEM';
修復: ALTER INDEX ... REBUILD TABLESPACE INDEX_TS;
| 檢查項 | 腳本/工具 | 關鍵指標 |
|---|---|---|
| 數據類型一致性 | datatype.sql | 同名列:DATA_TYPE、DATA_LENGTH、DATA_PRECISION、DATA_SCALE、NULLABLE完全一致 |
| 對象結構差異 | obj_coord.sql | 表/視圖/索引/序列/同義詞/包/觸發器:存在性、DDL定義 |
| 統計信息一致性 | DBMS_STATS.DIFF_TABLE_STATS_IN_STATTAB | NUM_ROWS、BLOCKS、AVG_ROW_LEN、直方圖桶分佈 |
| 執行計劃一致性 | SQL Plan Baseline / SPM | 核心SQL Plan Hash Value、Outline Data一致 |
最佳實踐: 引入Schema比對工具(如Quest Schema Comparator、Redgate Schema Compare、或自研Python腳本調用DBMS_METADATA.GET_DDL),實現結構級、數據級、統計級全維度自動化比對,生成HTML差異報告。
DBA_PROFILES 驗證 PASSWORD_LIFE_TIME/PASSWORD_REUSE_TIME/FAILED_LOGIN_ATTEMPTS 符合合規要求;DBA_SYS_PRIVS/DBA_TAB_PRIVS/DBA_ROLE_PRIVS,識別過度授權(如DBA角色授予開發賬號、ANY系統權限濫用);AUDIT_TRAIL 參數驗證,核心對象(AUDIT SELECT ON sys.user$等)審計策略生效;| 日誌類型 | 位置 | 關注錯誤碼 | 處置邏輯 |
|---|---|---|---|
| 客戶端 | $ORACLE_HOME/network/log/sqlnet.log | ORA-12154, ORA-12541, ORA-12514, ORA-03113 | 統計頻次Top 10,關聯應用部署變更、網絡變更 |
| 服務端 | $ORACLE_HOME/network/log/listener.log | TNS-12502, TNS-12518, TNS-12560, TNS-12537 | 識別惡意掃描IP、連接風暴源、監聽器重啟痕跡 |
| 廠商 | 核心資訊源 | 關注重點 |
|---|---|---|
| Oracle | My Oracle Support (MOS), Critical Patch Updates, Database Insider Blog | 安全補丁、已知問題、新特性、最佳實踐 |
| Quest Software | Quest Community, Toad World Blog | 工具新版本、性能診斷技巧、遷移方案 |
| Sun/Oracle Hardware | Oracle Systems, Exadata/SPARC | 固件更新、硬件兼容性、Exadata最佳實踐 |
| 開源生態 | Oracle Base (Tim Hall), DBA StackExchange, ORACLE-L mailing list | 社區實戰經驗、疑難雜症案例、腳本分享 |
每周維護不應是機械性核對清單,而應是「規範性檢查+一致性驗證+安全合規+錯誤趨勢分析+情報跟蹤」五維度的主動治理體系。建議將上述腳本封裝為Ansible Role或Python包,接入自動化運維平台,實現「零人工巡檢、異常自動工單、修復標準化變更、知識庫自動沉澱」的智能化運維閉環。