Oracle数据库的日志文件集中存储在**Automatic Diagnostic Repository (ADR)**目录下,Ubuntu系统中的默认路径为:
$ORACLE_BASE/diag/rdbms/{数据库名}/{实例名}/trace/(单实例)或$ORACLE_BASE/diag/rdbms/{数据库名}/{实例名}/trace/(RAC集群)。
其中关键日志文件包括:
alert_{实例名}.log(记录数据库运行中的重要事件、错误和警告,是日常监控的核心日志);ora_{进程ID}.trc(记录数据库进程的详细跟踪信息,用于诊断具体问题,如死锁、性能瓶颈);archivelog/目录下(记录重做日志的归档版本,用于数据恢复,需开启归档模式)。使用tail -f命令实时监控Alert日志的最新内容,快速定位当前问题:
tail -f $ORACLE_BASE/diag/rdbms/{数据库名}/{实例名}/trace/alert_{实例名}.log
例如,查看orcl实例的Alert日志:tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log。
使用grep命令过滤日志中的错误代码(以ORA-开头),快速定位异常:
grep "ORA-" $ORACLE_BASE/diag/rdbms/{数据库名}/{实例名}/trace/alert_{实例名}.log
例如,查找所有ORA-01555(快照过旧)错误:grep "ORA-01555" /path/to/alert_orcl.log。
结合awk、sort、uniq -c命令统计错误代码的出现次数,识别高频问题:
grep "ORA-" /path/to/alert_orcl.log | awk '{print $NF}' | sort | uniq -c | sort -nr
该命令会输出每个错误代码及其出现次数(按频率降序排列),帮助优先处理高频错误。
LogMiner是Oracle提供的命令行工具,用于解析重做日志(redo log)和归档日志(archived log),提取SQL操作、数据变更等详细信息,适用于性能分析、数据恢复或安全审计。
使用步骤:
① 开启数据库的追加日志功能(若未开启):
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
② 创建数据字典文件(用于解析日志中的对象信息):
BEGIN
DBMS_LOGMNR_D.BUILD(
OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS
);
END;
/
③ 添加要分析的日志文件:
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/u01/app/oracle/archivelog/1_12345.arc', -- 替换为实际归档日志路径
OPTIONS => DBMS_LOGMNR.NEW
);
④ 启动LogMiner并指定选项(如使用数据字典文件):
EXECUTE DBMS_LOGMNR.START_LOGMNR(
DictFileName => '/u01/app/oracle/diag/rdbms/orcl/orcl/trace/dict.ora', -- 数据字典文件路径
Options => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE
);
⑤ 查询V$LOGMNR_CONTENTS视图获取分析结果(如SQL语句、执行用户、时间戳):
SELECT SQL_REDO, USERNAME, TIMESTAMP
FROM V$LOGMNR_CONTENTS
WHERE SEG_OWNER = 'SCOTT' -- 筛选特定用户的操作
ORDER BY TIMESTAMP;
⑥ 结束LogMiner会话:
EXECUTE DBMS_LOGMNR.END_LOGMNR;
AWR(Automatic Workload Repository)是Oracle的性能分析工具,通过收集数据库的历史性能数据,生成详细的报告(如SQL执行计划、等待事件、系统负载),帮助识别性能瓶颈。
生成AWR报告步骤:
① 登录SQL*Plus(以SYSDBA身份):
sqlplus / as sysdba
② 创建AWR快照(若未自动创建):
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
END;
/
③ 执行AWR报告脚本(位于$ORACLE_HOME/rdbms/admin/目录下):
@?/rdbms/admin/awrrpt.sql
④ 按照提示选择快照范围(如最近1小时、1天),生成HTML格式的报告,通过浏览器打开查看。
Ubuntu自带的logrotate工具可自动轮换、压缩、删除旧的Oracle日志文件,防止日志占用过多磁盘空间。
配置示例:
编辑/etc/logrotate.d/oracle文件(若不存在则创建),添加以下内容:
$ORACLE_BASE/diag/rdbms/*/trace/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
参数说明:
daily:每天轮换一次;rotate 7:保留最近7个日志文件;compress:压缩旧日志(节省空间);copytruncate:复制日志文件后清空原文件(不影响Oracle写入)。adrci是Oracle提供的ADR命令行接口,可用于查看、导出和管理诊断信息(包括Alert日志、Trace文件)。
常用命令:
① 查看Alert日志:
adrci show alert -tail -f(实时查看Alert日志);
② 导出特定Trace文件:
adrci set home diag/rdbms/orcl/orcl(切换到目标实例的ADR目录);
adrci export trace /tmp/ora_1234.trc(导出ora_1234.trc文件到/tmp目录)。
对于需要图形化界面或高级功能的场景,可集成第三方日志分析工具(如Splunk、ELK Stack、Toad),实现日志的可视化、告警自动化和趋势分析。这些工具支持Oracle日志的解析、过滤和自定义报表,提升分析效率。
通过以上方法,可在Ubuntu系统上高效地管理和分析Oracle数据库日志,快速定位问题、优化性能并保障数据库安全。