1. 概述


Oracle数据库提供了审计和日志记录功能,用于跟踪和记录数据库中发生的活动和事件。审计是指对数据库的操作进行监控和记录,以便后续的安全审计和故障排除。日志记录是指将数据库的活动和事件记录到日志文件中,以便后续的分析和故障排查。本章节将详细介绍Oracle审计和日志记录的功能和使用方法。


2. Oracle审计


Oracle审计功能可以记录用户对数据库的各种操作,如登录、DDL语句、DML语句、系统权限的授予和撤销等。审计功能可以用于满足安全合规性要求,以及跟踪和诊断数据库中的问题。

2.1 审计设置

Oracle审计功能通过以下参数进行配置:


  • AUDIT_TRAIL:该参数指定了审计日志的记录方式,可以设置为NONE(不记录审计日志)、OS(记录到操作系统日志文件)、DB(记录到数据库表中)或DB_EXTENDED(记录到数据库表中,并包含扩展信息)。
  • AUDIT_SYS_OPERATIONS:该参数指定是否审计系统级操作,如创建用户、授予角色等。默认值为FALSE,表示不审计系统级操作。
  • AUDIT_TRAIL_TIMESTAMP:该参数指定审计日志的时间戳格式,可以设置为DB(使用数据库服务器的时间)或OS(使用操作系统的时间)。
  • AUDIT_FILE_DEST:该参数指定审计日志文件的存储路径。


可以使用ALTER SYSTEM语句来修改以上参数的值,例如:

ABP 将审计日志保存到Mongodb oracle 审计日志保留时间_oracle


-- 设置审计日志记录到数据库表中,并包含扩展信息
ALTER SYSTEM SET AUDIT_TRAIL = DB_EXTENDED SCOPE = SPFILE;

-- 设置审计系统级操作
ALTER SYSTEM SET AUDIT_SYS_OPERATIONS = TRUE SCOPE = SPFILE;

-- 设置审计日志的时间戳格式为数据库时间
ALTER SYSTEM SET AUDIT_TRAIL_TIMESTAMP = DB SCOPE = SPFILE;

-- 设置审计日志文件的存储路径
ALTER SYSTEM SET AUDIT_FILE_DEST = '/u01/app/oracle/audit_logs' SCOPE = SPFILE;

-- 重启数据库使参数生效
SHUTDOWN IMMEDIATE;
STARTUP;

2.2 审计对象

除了全局的审计配置外,还可以为特定的数据库对象启用审计,例如表、视图、存储过程等。Oracle提供了以下语句来启用和禁用对象级审计:


  • AUDIT:启用或禁用对象级审计。
  • NOAUDIT:禁用或启用对象级审计。


可以使用如下示例代码来启用或禁用表的审计:

-- 启用表的审计
AUDIT SELECT, INSERT, UPDATE, DELETE ON hr.employees;

-- 禁用表的审计
NOAUDIT SELECT, INSERT, UPDATE, DELETE ON hr.employees;

2.3 查看审计日志

审计日志可以通过以下方式查看:


  • DBA_AUDIT_TRAIL视图:该视图包含了所有的审计日志记录,通过查询该视图可以获取审计的详细信息。
  • DBA_AUDIT_SESSION视图:该视图包含了所有会话级的审计记录。
  • DBA_AUDIT_OBJECT视图:该视图包含了所有对象级的审计记录。


可以使用如下示例代码来查询审计日志:


-- 查询所有的审计记录
SELECT * FROM DBA_AUDIT_TRAIL;

-- 查询会话级的审计记录
SELECT * FROM DBA_AUDIT_SESSION WHERE USERNAME = 'SCOTT';

-- 查询对象级的审计记录
SELECT * FROM DBA_AUDIT_OBJECT WHERE OWNER = 'HR';

3. Oracle日志记录


Oracle数据库提供了多种日志记录功能,包括错误日志、跟踪日志、重做日志和监听器日志等。这些日志记录功能可以帮助管理员诊断和解决数据库中的问题。

3.1 错误日志

错误日志(Error Log)记录了数据库中发生的错误和异常。Oracle数据库自动记录了许多错误,包括数据库启动失败、备份恢复失败、SQL语句执行错误等。错误日志可以通过以下方式查看:


  • V$DIAG_INFO视图:该视图包含了数据库的诊断信息,可以查询其中的DEFAULT_TRACEFILE列来获取错误日志文件的路径。
  • V$DIAG_ALERT_EXT视图:该视图包含了数据库的警报信息,可以查询其中的NAME列来获取错误日志文件的路径。


可以使用如下示例代码来查看错误日志:


-- 查询错误日志文件路径
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';

-- 查询错误日志
SELECT * FROM V$DIAG_ALERT_EXT;

3.2 跟踪日志

跟踪日志(Trace Log)记录了数据库的详细操作信息,包括SQL语句的执行计划、锁定等待情况等。跟踪日志可以用于性能调优和故障排查。跟踪日志可以通过以下方式开启和关闭:


  • ALTER SESSION语句:可以使用该语句开启和关闭会话级的跟踪日志。
  • ALTER SYSTEM语句:可以使用该语句开启和关闭系统级的跟踪日志。


可以使用如下示例代码来开启和关闭跟踪日志:


-- 开启会话级的跟踪日志
ALTER SESSION SET SQL_TRACE = TRUE;

-- 关闭会话级的跟踪日志
ALTER SESSION SET SQL_TRACE = FALSE;

-- 开启系统级的跟踪日志
ALTER SYSTEM SET SQL_TRACE = TRUE;

-- 关闭系统级的跟踪日志
ALTER SYSTEM SET SQL_TRACE = FALSE;

3.3 重做日志

重做日志(Redo Log)是Oracle数据库用于恢复和故障恢复的关键组件,它记录了数据库中发生的所有事务操作。重做日志可以用于数据库的恢复和故障恢复。重做日志文件包括了未提交事务的所有修改操作,以及用于恢复数据库的信息。

可以使用如下示例代码来查看重做日志的相关信息:


-- 查询当前重做日志组
SELECT * FROM V$LOG;

-- 查询当前正在使用的重做日志文件
SELECT * FROM V$LOGFILE;

-- 查询重做日志的切换历史
SELECT * FROM V$LOG_HISTORY;

3.4 监听器日志

监听器日志(Listener Log)记录了Oracle监听器的活动信息,包括监听器的启动、连接请求的处理等。监听器日志可以用于跟踪和排查与客户端的连接问题。监听器日志文件默认位于$ORACLE_HOME/network/log目录下。

可以使用如下示例代码来查看监听器日志:


-- 查看监听器日志文件
$ tail -f $ORACLE_HOME/network/log/listener.log