温馨提示×

centos上sqlplus日志分析方法

小樊
36
2025-12-21 11:36:56
栏目: 云计算

CentOS 上 SQL*Plus 日志分析方法

一 日志来源与定位

  • SQL*Plus 自身输出日志:由用户在会话中使用 SPOOL 或将命令行输出重定向到文件生成,常见路径为用户自定义目录(如 /var/log/sqlplus/ 或脚本目录)。示例:SPOOL /path/to/run.log;或 sqlplus user/pass@db @script.sql > run.log 2>&1。此类日志记录了脚本执行过程、结果集与报错输出。
  • 数据库告警与跟踪日志:用于定位实例级错误、启动关闭、内部异常等,路径由 ADR(自动诊断仓库) 管理,通常为 $ORACLE_BASE/diag/rdbms/<db_name>//trace/alert_.log,可用 adrci 或 SQL 查询 v$diag_info 获取实际路径。
  • 监听器日志:网络层面连接问题排查,位于 $ORACLE_HOME/network/log/listener.log
  • 联机重做日志与归档日志:用于恢复与“谁在何时改了什么”的取证分析,文件路径可通过 v$logfile 查询;历史归档序列与时间可通过 v$log_history 辅助定位。

二 快速查看与过滤

  • 实时查看 SQL*Plus 输出日志:tail -f /path/to/run.log。
  • 关键字筛选错误:grep -i “ORA-” /path/to/run.log;如需排除无关项可用 grep -v。
  • 按时间窗口提取(日志行内包含形如 YYYY-MM-DD HH:MM:SS 的时间戳时):awk ‘/2025-09-01 00:00:00/,/2025-09-01 23:59:59/’ /path/to/run.log。
  • 清理脚本注释行:sed ‘/^–/d’ script.sql(用于预处理脚本,便于后续分析)。
  • 系统级线索:若 sqlplus 崩溃或异常退出,可在 /var/log/messages/var/log/syslog 检索 sqlplus 相关条目(grep -i sqlplus)。

三 深入分析与取证

  • 使用 LogMiner 还原 DML 变更:适合定位“某时某表被谁改了什么”。基本步骤为:
    1. SYS 登录,选择数据字典来源(如 DBMS_LOGMNR_D.BUILD 生成字典文件,或使用 ONLINE_CATALOG);
    2. 通过 DBMS_LOGMNR.ADD_LOGFILE 将要分析的 归档日志/重做日志 加入列表;
    3. 以时间或 SCN 范围启动分析(DBMS_LOGMNR.START_LOGMNR);
    4. 查询 V$LOGMNR_CONTENTS 获取 SQL_REDO/SQL_UNDO、操作类型(INSERT/UPDATE/DELETE)、SCN、时间戳、用户名、表名等;
    5. 分析结束调用 DBMS_LOGMNR.END_LOGMNR 释放会话级结果。提示:SELECT 不产生 REDO,LogMiner 无法还原 SELECT 语句本身。
  • 审计线索:若已启用审计,可在 DBA_AUDIT_TRAIL 中查询到对象级访问记录(如 AUDIT SELECT ON schema.tbl BY ACCESS)。
  • SQL 执行痕迹与性能:对问题会话启用 SQL_TRACE,用 TKPROF 格式化跟踪文件,获取执行计划、CPU/IO 等性能指标。

四 自动化与运维建议

  • 日志轮转:为 SQL*Plus 输出日志配置 logrotate(示例:/etc/logrotate.d/sqlplus),如“daily rotate 7 compress missingok”,避免单文件过大。
  • 权限与目录:确保 Oracle 用户对日志目录(如 $ORACLE_BASE/diag、自定义日志目录)具备读写权限(chown -R oracle:oinstall /path)。
  • 清理策略:
    • 跟踪/告警文件可按时间清理(如 find trace/ -mtime +30 -name “.tr” -delete),清理前建议备份并观察业务影响;
    • alert_.log 可先备份后清空或删除,数据库会自动重建;必要时执行 ALTER SYSTEM SWITCH LOGFILE 触发新日志生成。
  • 集中化与可视化:将 SQL*Plus 输出与数据库日志接入 ELK(Logstash→Elasticsearch→Kibana),构建错误趋势、TOP 错误、慢脚本排行等图表。

五 常见场景命令清单

  • 定位告警日志与实时查看:
    • SQL> SELECT value FROM v$diag_info WHERE name=‘Diag Trace’;
    • tail -f $ORACLE_BASE/diag/rdbms///trace/alert_.log
    • 或:adrci> show alert -tail -f
  • 捕获 SQL*Plus 会话输出:
    • sqlplus user/pass@db @script.sql > run.log 2>&1
    • 或在会话中:SPOOL run.log … SPOOL OFF
  • 按时间筛选错误:
    • awk ‘/2025-09-01 10:00:00/,/2025-09-01 18:00:00/’ run.log | grep -i “ORA-”
  • 归档日志定位与 LogMiner 快速分析:
    • SQL> SELECT sequence#, first_time FROM v$log_history WHERE first_time BETWEEN to_date(‘2025-09-01’,‘yyyy-mm-dd’) AND to_date(‘2025-09-02’,‘yyyy-mm-dd’);
    • 使用 DBMS_LOGMNR_D.BUILD 生成字典 → DBMS_LOGMNR.ADD_LOGFILE 添加归档 → START_LOGMNR(时间/SCN)→ 查询 V$LOGMNR_CONTENTS → END_LOGMNR。

0