[分享]移动AUD$表到其他表空间,并且为表AUD$添加触发器_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4920 | 回复: 0   主题: [分享]移动AUD$表到其他表空间,并且为表AUD$添加触发器        下一篇 
unknsnow
注册用户
等级:上士
经验:272
发帖:78
精华:0
注册:2012-2-10
状态:离线
发送短消息息给unknsnow 加好友    发送短消息息给unknsnow 发消息
发表于: IP:您无权察看 2012-2-10 9:46:19 | [全部帖] [楼主帖] 楼主

适用于:

Oracle Server - Enterprise Edition - Version: 9.2.0.1 and later [Release: 9.2 and later ]
Information in this document applies to any platform.
Checked for relevance on 11-Sep-2010


目的:

特别注意:

强烈建议使用DBMS_MAMT包提供的DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION方法来代替这个文档中描述的方法。

查看:note 731908.1 "New Feature DBMS_AUDIT_MGMT To Manage And Purge Audit Information",可得到更多相关的信息。也要明白移动的审计表SYS.AUD$ (or SYSTEM.AUD$ in case of OLS) 和 FGA_LOG$是被DBMS_AUDIT_MGMT所支持的。 但是这里没有给出支持在表AUD$中添加触发器。

更多的额外的特征,比如Alerts可能关于Audit Vault,并且不需要再资源数据库中使用触发器实行,但是需要使用一个被支持的产品特征。

对于这个问题的更多信息,请阅读Oracle 8i的管理指南,第24章 “审计数据库使用”主题下的“控制审计线索的增长和规模”:

在数据库创建的数据库审计线索(SYS.AUD $表)的最大大小是预先确定的。默认情况下,高达99区段,每个10K的大小,可以分配给这个表。你不应该移动SYS.AUD $到另一个表作为审计线索的增长和规模控制的一种手段。但是,您可以修改SYS.AUD $默认的存储参数。

本文包含从SYS用户和表空间系统移动到另一个用户和表空间“SYS.AUD $”表的脚本。它还提供了一个可以添加额外的审计信息记录到结果表触发的例子。

本文分布外部由于客户的需求

运用范围:

此脚本已与Oracle8i中,Oracle9i的测试。它不支持,因为以下不支持

--走出SYSTEMSYS.AUD $
--移动SYS.AUD $SYS模式
--AUD $表中添加触发器


上述不支持的原因是因为Oracle的代码数据字典表SYS.AUD $,如可能导致问题升级和备份/恢复方案的隐含假设。 “不支持”意味着,如果出现问题,因为放在AUD $表上的触发器,Oracle支持不能涉及发展。强烈建议,以寻求支持的解决方案,可以安装使用任何额外的处理,你需要一个处理函数,如细粒度审计。

Moving AUD$


Oracle 存储在一个单一的表的审计跟踪记录,“SYS.AUD $”,是一个基础数据字典表,它不支持去改变它。然而,它支持修改默认的存储参数(除初始)“SYS.AUD $”。

通过改变“SYS.AUD $”的存储参数,表中可以成长为大,你需要的,但只在SYSTEM表空间。在Oracle8i/ Oracle9i的管理员指南包含在SYSTEM表空间管理这种增长方式,但没有通过移动提供额外的灵活性“SYS.AUD $”到另一个表空间。

下面的脚本将允许您移动SYSTEM表空间,并从SYSSYS.AUD $”表系统用户

1. Start the database with :

audit_trail=none
2. Run the following in Sqlplus:
connect sys/
create table system.aud$
tablespace
as select * from aud$;
create index system.i_aud1 on system.aud$(sessionid, ses$tid);
rename aud$ to aud$_temp;
create view aud$ as select * from system.aud$;
connect system/
grant all on aud$ to sys with grant option;
grant delete on aud$ to delete_catalog_role;
3. Re-Start the database with :
audit_trail=DB
4. Recreate the data dictionary views for auditing :
connect sys/
@%ORACLE_HOME%/rdbms/admin/cataudit.sql
Overview of adding triggers to AUD$


默认的Oracle审计纯粹的存储由用户执行的操作类型的记录;记录用户执行的动作的额外信息,它往往是有益的。

The following is a example of a trigger that could be added after the above script has been run :
create table system.accounting
(USERNAME VARCHAR2(30),
LOGIN_TIME DATE,
LOGOFF_TIME DATE,
SCHEMANAME VARCHAR2(30),
OSUSER VARCHAR2(15),
PROCESS VARCHAR2(12),
MACHINE VARCHAR2(64),
TERMINAL VARCHAR2(8),
PROGRAM VARCHAR2(64),
TYPE VARCHAR2(10),
LOGICAL_READ NUMBER,
PHYSICAL_READ NUMBER,
SID NUMBER,
SESSION_SID NUMBER,
CPU_TIME NUMBER)
tablespace
;
create or replace trigger acc_trigger
after update on system.aud$ for each row
when (new.action# = 101 or new.action# = 102)
declare
v_conc_id number;
begin
v_conc_id := 99;
insert into system.accounting
select :new.userid,
:new.timestamp#,
:new.logoff$time,
ss.schemaname,
ss.osuser,
ss.process,
ss.machine,
ss.terminal,
ss.program,
ss.type,
:new.logoff$lread,
:new.logoff$pread,
st.sid,
ss.audsid,
st.value
from V$STATNAME S, V$SESSTAT ST, V$SESSION SS
where S.STATISTIC# = ST.STATISTiC# AND ST.SID = SS.SID
and :new.sessionid = SS.AUDSID
and S.NAME='CPU used by this session';
end;
/
An example of querying the accounting table is :
select osuser,username,
to_char(LOGIN_TIME,'dd.mm.yy:hh:mi') login,
to_char(LOGOFF_TIME,'dd.mm.yy:hh:mi') logout,
MACHINE,
CPU_TIME
from accounting;




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论