Ubuntu系統監控Oracle運行狀態的方法
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
:監控監聽器狀態(如連接請求、錯誤)。sudo apt install libaio1
,下載并解壓Oracle Instant Client Basic Lite包,設置LD_LIBRARY_PATH
環境變量);oracledb_exporter
(git clone https://github.com/iamseth/oracledb_exporter.git && cd oracledb_exporter && go build
);config.yml
(添加Oracle數據庫的用戶名、密碼、服務名等信息);oracledb_exporter
(./oracledb_exporter
),默認監聽9161
端口;prometheus.yml
中添加scrape_configs
,指向oracledb_exporter
的地址);zabbix_agentd.conf
文件(添加Oracle監控的自定義參數,如UserParameter=oracle.status[*],sqlplus -s / as sysdba @$1
);opatch auto
部署);emca
命令創建管理倉庫);7803
),實現數據庫實例的實時監控(性能指標、空間使用、資源分配)、自動修復(如重啟失敗的進程)、備份恢復管理及性能優化建議。oswatcher
工具包(oswatcher.tar.gz
);./oswatcher.sh -o /tmp/osw -t 60 -d 1
(-o
指定輸出目錄,-t
為采集間隔秒數,-d
為采集持續時間天);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等待、鎖等待),幫助定位性能瓶頸。