溫馨提示×

Ubuntu系統如何監控Oracle運行狀態

小樊
44
2025-09-29 19:58:55
欄目: 云計算

Ubuntu系統監控Oracle運行狀態的方法

1. 命令行工具監控(基礎且實時)

  • SQL*Plus:通過sqlplus / as sysdba登錄數據庫,執行SELECT status FROM v$instance;確認實例狀態(返回OPEN表示運行中);還可查詢v$session(當前會話)、v$sql(執行SQL)、v$waitstat(等待事件)等視圖獲取詳細性能信息。
  • 操作系統工具
    • top/htop:實時查看Oracle進程的CPU、內存占用(按Shift+P按CPU排序,Shift+M按內存排序);
    • vmstat 2:每2秒輸出系統虛擬內存、進程、CPU使用情況(關注si/so列判斷磁盤I/O瓶頸);
    • iostat -x 2:監控磁盤I/O負載(關注%util列,接近100%表示磁盤繁忙);
    • sar -u 2 3:查看CPU使用率歷史趨勢(-u表示CPU,2為間隔,3為次數)。
  • 日志分析
    • tail -f $ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log:實時查看數據庫錯誤、警告信息;
    • tail -f $ORACLE_HOME/network/log/listener.log:監控監聽器狀態(如連接請求、錯誤)。

2. 第三方開源監控工具(可視化與自動化)

  • Prometheus + Grafana + Oracle Exporter
    • 安裝Oracle Instant Client(sudo apt install libaio1,下載并解壓Oracle Instant Client Basic Lite包,設置LD_LIBRARY_PATH環境變量);
    • 下載并編譯oracledb_exportergit clone https://github.com/iamseth/oracledb_exporter.git && cd oracledb_exporter && go build);
    • 配置config.yml(添加Oracle數據庫的用戶名、密碼、服務名等信息);
    • 運行oracledb_exporter./oracledb_exporter),默認監聽9161端口;
    • 配置Prometheus(在prometheus.yml中添加scrape_configs,指向oracledb_exporter的地址);
    • 在Grafana導入Oracle監控儀表板(如社區提供的模板ID:12345),實現CPU、內存、SGA/PGA命中率、慢SQL等指標的可視化。
  • Zabbix
    • 安裝Zabbix Server和Agent(參考官方文檔);
    • 導入Oracle監控模板(社區模板如“Oracle Database Monitoring”);
    • 配置Zabbix Agent的zabbix_agentd.conf文件(添加Oracle監控的自定義參數,如UserParameter=oracle.status[*],sqlplus -s / as sysdba @$1);
    • 通過模板自動發現Oracle表空間使用率、連接數、DML語句變化趨勢等指標,并設置告警規則(如表空間剩余空間低于10%時發送郵件)。

3. Oracle專用監控工具(全面且專業)

  • Oracle Enterprise Manager (OEM)
    • 安裝OEM(Oracle Database安裝介質中包含,或通過opatch auto部署);
    • 配置OEM與Oracle數據庫的連接(通過emca命令創建管理倉庫);
    • 登錄OEM Web界面(默認端口7803),實現數據庫實例的實時監控(性能指標、空間使用、資源分配)、自動修復(如重啟失敗的進程)、備份恢復管理及性能優化建議。
  • OSWatcher
    • 下載Oracle提供的oswatcher工具包(oswatcher.tar.gz);
    • 解壓后執行./oswatcher.sh -o /tmp/osw -t 60 -d 1-o指定輸出目錄,-t為采集間隔秒數,-d為采集持續時間天);
    • 收集系統性能數據(CPU、內存、磁盤I/O、網絡流量),用于離線分析Oracle性能問題(如CPU瓶頸是否由系統進程引起)。

4. SQL腳本監控(針對性強)

  • 編寫SQL腳本監控活躍SQL
    SET LINESIZE 200;
    COL inst_sid HEADING "INST_ID|:SID" FORMAT A7;
    COL username FORMAT A10;
    COL machine FORMAT A12;
    COL sql_exec_start HEADING "SQL START TIME" FORMAT A20;
    COL sql_id FORMAT A13;
    COL sql_text FORMAT A40;
    COL event FORMAT A33;
    COL wait_sec HEADING "WAIT (SEC)" FORMAT 99999;
    SELECT 
      ses.inst_id || ':' || ses.sid AS inst_sid,
      ses.username,
      ses.machine,
      TO_CHAR(ses.sql_exec_start, 'YYYY-MM-DD HH24:MI:SS') AS sql_exec_start,
      ses.sql_id,
      SUBSTR(sql.sql_text, 1, 40) AS sql_text,
      SUBSTR(
        CASE 
          WHEN ses.time_since_last_wait_micro = 0 THEN 
            CASE ses.wait_class 
              WHEN 'Idle' THEN 'IDLE: ' || ses.event 
              ELSE ses.event 
            END 
          ELSE 'ON CPU' 
        END, 1, 33
      ) AS event,
      CASE 
        WHEN ses.time_since_last_wait_micro = 0 THEN ses.wait_time_micro / 1000000 
        ELSE ses.time_since_last_wait_micro / 1000000 
      END AS wait_sec
    FROM 
      gv$session ses
    LEFT JOIN 
      gv$sql sql ON ses.sql_id = sql.sql_id
    WHERE 
      ses.status = 'ACTIVE'
      AND ses.username IS NOT NULL
      AND ses.inst_id = SYS_CONTEXT('USERENV', 'INSTANCE')
    ORDER BY 
      ses.sql_exec_start, ses.username, ses.sid;
    
    該腳本可監控當前活躍SQL的執行時間、等待事件(如I/O等待、鎖等待),幫助定位性能瓶頸。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女