Ubuntu Oracle如何进行日志管理
导读:Ubuntu 上 Oracle 日志管理实操指南 一 日志类型与定位 警报日志 Alert Log:记录数据库启动/关闭、结构变更、错误等,路径通常为:$ORACLE_BASE/diag/rdbms/<db_name>/<...
Ubuntu 上 Oracle 日志管理实操指南
一 日志类型与定位
- 警报日志 Alert Log:记录数据库启动/关闭、结构变更、错误等,路径通常为:$ORACLE_BASE/diag/rdbms/< db_name> /< instance_name> /trace/alert_.log。
- 跟踪与诊断文件:按会话/进程生成,位于同一 trace 目录,如 ora_*.trc。
- 监听日志 Listener Log:记录网络连接请求,路径通常为:$ORACLE_HOME/network/log/listener.log。
- 重做日志 Redo Logs:数据库事务日志,路径由控制文件/参数决定,可用 SQL 查询具体成员。
- 归档日志 Archive Logs:数据库在 ARCHIVELOG 模式下产生的历史重做日志,用于恢复与备份。
以上路径与定位方法适用于 Ubuntu 上的 Oracle 单实例环境,具体目录以实际安装为准。
二 查看与实时监控
- 实时查看警报日志:
tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log - 查看跟踪文件:
tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/ora_1234.trc - 格式化跟踪文件(便于阅读):
tkprof /u01/app/oracle/diag/rdbms/orcl/orcl/trace/ora_1234.trc output.txt explain scott/tiger@orcl - 监听日志查看:
tail -f $ORACLE_HOME/network/log/listener.log
以上命令覆盖日常排错与审计中最常用的日志查看方式。
三 数据库内日志管理 SQL 要点
- 查看当前日志模式与数据库信息:
SELECT log_mode FROM v$database;
SELECT dbid, name, created, log_mode FROM v$database; - 切换归档模式(需停机到 mount 再打开):
shutdown immediate;
startup mount;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN; - 归档相关查询与维护:
SELECT recid, stamp, thread#, sequence#, name FROM v$archived_log;
SELECT dest_name, status, destination FROM v$archive_dest;
ALTER SYSTEM ARCHIVE LOG ALL; - 重做日志组与成员管理:
SELECT * FROM v$log;
SELECT * FROM v$logfile;
ALTER DATABASE ADD LOGFILE GROUP 4 (‘/u02/oradata/redo04a.log’,‘/u03/oradata/redo04b.log’) SIZE 100M;
ALTER DATABASE DROP LOGFILE GROUP 4;
ALTER DATABASE ADD LOGFILE MEMBER ‘/u02/oradata/redo01b.log’ TO GROUP 1;
ALTER DATABASE DROP LOGFILE MEMBER ‘/u02/oradata/redo01b.log’; - 强制日志切换与检查点:
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT; - 归档目的地空间与清理(RMAN):
SELECT space_limit/1024/1024/1024 AS quota_g, space_used/1024/1024 AS used_m,
space_used/space_limit*100 AS used_pct, number_of_files
FROM v$recovery_file_dest;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=40G;
RMAN> LIST ARCHIVELOG ALL;
RMAN> DELETE ARCHIVELOG UNTIL TIME ‘SYSDATE-1’;
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
以上 SQL 覆盖归档模式切换、日志组维护、空间监控与归档日志生命周期管理。
四 系统级日志轮转与清理
- 使用 logrotate 管理 Oracle 文本日志(如 alert、listener、trace 等):
- 新建配置:/etc/logrotate.d/oracle
/u01/app/oracle/diag/rdbms///trace/alert_.log
/u01/app/oracle/diag/tnslsnr///trace/.log
/u01/app/oracle/network/log/*.log
{
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 oracle oinstall
sharedscripts
postrotate
/bin/kill -HUP $(cat /var/run/oracle.pid 2> /dev/null) 2> /dev/null || true
endscript
} - 测试与强制执行:
logrotate -d /etc/logrotate.d/oracle # 预演
logrotate -f /etc/logrotate.d/oracle # 强制执行
- 新建配置:/etc/logrotate.d/oracle
- 监听日志的安全截断(避免直接 rm 导致句柄写入异常):
lsnrctl set log_status off
mv $ORACLE_HOME/network/log/listener.log $ORACLE_HOME/network/log/listener_$(date +%F).log$ORACLE_HOME/network/log/listener.log
lsnrctl set log_status on - 系统日志与审计:
journalctl -u oracle.service -f # 若以 systemd 托管 Oracle 服务
tail -f /var/log/syslog
以上做法确保文本日志按策略轮转、压缩与清理,同时避免在线删除导致文件句柄占用问题。
五 备份恢复与日志挖掘
- 归档日志备份与清理:使用 RMAN 进行定期备份与过期清理,例如:
RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;
RMAN> DELETE ARCHIVELOG UNTIL TIME ‘SYSDATE-7’; - 日志挖掘 LogMiner(分析重做日志内容):
- 构建数据字典:
EXEC DBMS_LOGMNR_D.BUILD(‘dict.ora’, ‘/u01/app/oracle/logmnr’); - 添加日志文件:
EXEC DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME=> ‘/u02/oradata/redo01.log’, OPTIONS=> DBMS_LOGMNR.NEW); - 启动分析(可按时间/SCN 限制):
EXEC DBMS_LOGMNR.START_LOGMNR(DICTFILENAME=> ‘/u01/app/oracle/logmnr/dict.ora’,
STARTTIME=> TO_DATE(‘2025-04-01’,‘YYYY-MM-DD’),
ENDTIME=> TO_DATE(‘2025-04-30’,‘YYYY-MM-DD’)); - 查询分析结果:
SELECT scn, timestamp, username, sql_redo FROM V$LOGMNR_CONTENTS WHERE username=‘SCOTT’; - 结束分析:
EXEC DBMS_LOGMNR.END_LOGMNR;
以上流程适用于误操作审计、变更追踪与历史事务分析。
- 构建数据字典:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Oracle如何进行日志管理
本文地址: https://pptw.com/jishu/782408.html
