Debian上Oracle日志分析实操指南
一 日志类型与定位
lsnrctl status 查看监听状态与日志文件路径。系统层面日志在 /var/log/(如 syslog、auth.log、kern.log),可用 journalctl 检索与 Oracle 相关的服务日志。若未设置 ORACLE_BASE,可在 SQL*Plus 中 SHOW PARAMETER ORACLE_BASE 确认。二 快速排查与常用命令
ps -ef | grep ora_pmonlsnrctl statustail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log | egrep -i "ORA-|Error|Fail|Warning"SELECT a.tablespace_name,
ROUND(a.bytes/1024/1024,2) "总大小(MB)",
ROUND((a.bytes-b.bytes)/1024/1024,2) "已用(MB)",
ROUND((a.bytes-b.bytes)/a.bytes*100,2) "使用率%"
FROM (SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;
SELECT s.sid, s.username, s.status, s.machine, sq.sql_text
FROM v$session s JOIN v$sql sq ON s.sql_id = sq.sql_id
WHERE s.status='ACTIVE' AND s.username IS NOT NULL;
SELECT sql_id, sql_text, elapsed_time/1e6 "耗时(秒)", executions
FROM v$sql ORDER BY elapsed_time DESC FETCH FIRST 10 ROWS ONLY;
top、df -h、free -mtail -f /var/log/kern.log、journalctl -u oracle-<service>.service --since "2025-12-03 00:00:00"。三 日志轮转与保留策略
/u01/app/oracle/diag/tnslsnr/*/trace/*.log
/u01/app/oracle/diag/rdbms/*/*/trace/alert_*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
copytruncate
dateext
}
说明:Oracle 自身按 ADR 策略滚动跟踪文件;对外部工具不易轮转的文件(如监听日志)使用 copytruncate 更安全。测试与强制执行:logrotate --debug /etc/logrotate.d/oracle、logrotate -f /etc/logrotate.conf。系统日志统一由 journald 管理,可按服务与时间段检索。四 集中化与可视化分析
五 高效检索与自动化建议
egrep -i "ORA-|TNS-|Error|Fail|Warning|started|shutdown" 快速筛查异常;结合时间戳与实例名缩小范围。tail -f listener.log | egrep "TNS-12518|TNS-12541|status|established"。