首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle DBA每周維護作業庫(三):對象完整性、環境一致性、安全審計與供應商情報

     編輯:Oracle 資料庫相關知識

每周維護五大核心專題

專題一:對象完整性與規範性檢查

1. NEXT_EXTENT一致性 — 參考nextext.sql

2. 現有Extents分佈 — 參考existext.sql

3. 主鍵完整性三重檢查

-- 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');

4. 索引表空間歸屬檢查

-- 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;

專題二:多環境一致性驗證(測試vs生產)

檢查項腳本/工具關鍵指標
數據類型一致性datatype.sql同名列:DATA_TYPE、DATA_LENGTH、DATA_PRECISION、DATA_SCALE、NULLABLE完全一致
對象結構差異obj_coord.sql表/視圖/索引/序列/同義詞/包/觸發器:存在性、DDL定義
統計信息一致性DBMS_STATS.DIFF_TABLE_STATS_IN_STATTABNUM_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$等)審計策略生效;
  • 加密合規: TDE錢包狀態、敏感列加密覆蓋率、網絡加密(SQLNET.ENCRYPTION_SERVER=REQUIRED)。

專題四:SQL*NET錯誤日誌分析

自動化腳本: 日誌切割(logrotate)→ 關鍵字掃描(grep -c)→ 異常趨勢圖(Grafana)→ 告警推送。

專題五:告警日誌歸檔與供應商情報跟蹤

告警日誌歸檔策略

# archive_alert.sh
ALERT_LOG=$ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/alert_$ORACLE_SID.log
ARCHIVE_DIR=/archive/alert_logs/$ORACLE_SID/$(date +%Y/%m)
mkdir -p $ARCHIVE_DIR
cp $ALERT_LOG $ARCHIVE_DIR/alert_$(date +%Y%m%d_%H%M).log
# 保留當前日誌前10000行,避免文件過大
tail -10000 $ALERT_LOG > $ALERT_LOG.tmp && mv $ALERT_LOG.tmp $ALERT_LOG

供應商情報必訂閱源

日誌類型位置關注錯誤碼處置邏輯
客戶端$ORACLE_HOME/network/log/sqlnet.logORA-12154, ORA-12541, ORA-12514, ORA-03113統計頻次Top 10,關聯應用部署變更、網絡變更
服務端$ORACLE_HOME/network/log/listener.logTNS-12502, TNS-12518, TNS-12560, TNS-12537識別惡意掃描IP、連接風暴源、監聽器重啟痕跡
廠商核心資訊源關注重點
OracleMy Oracle Support (MOS), Critical Patch Updates, Database Insider Blog安全補丁、已知問題、新特性、最佳實踐
Quest SoftwareQuest Community, Toad World Blog工具新版本、性能診斷技巧、遷移方案
Sun/Oracle HardwareOracle Systems, Exadata/SPARC固件更新、硬件兼容性、Exadata最佳實踐
開源生態Oracle Base (Tim Hall), DBA StackExchange, ORACLE-L mailing list社區實戰經驗、疑難雜症案例、腳本分享

結語

每周維護不應是機械性核對清單,而應是「規範性檢查+一致性驗證+安全合規+錯誤趨勢分析+情報跟蹤」五維度的主動治理體系。建議將上述腳本封裝為Ansible Role或Python包,接入自動化運維平台,實現「零人工巡檢、異常自動工單、修復標準化變更、知識庫自動沉澱」的智能化運維閉環。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved