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
语句来修改以上参数的值,例如:
-- 设置审计日志记录到数据库表中,并包含扩展信息 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 |