【开两个终端窗口方便操作】
1.【在Oracle用户下vim编辑sql文件(su - oracle)】
2.【连接sql环境运行sql文件(sqlplus system/密码),emp表在Scott用户下,连接(conn scott/tiger)】
1.跟踪某个表,当有用户对它进行增删改,把用户名,操作类型以及操作时间记录到事先创建好的跟踪审计表中。
【vim 811.sql】(创建跟踪审计表)
create table tr_stu_log(
log_id number,
log_user varchar(20),
log_action varchar(10),
log_date date);
/
commit;
【vim 81.sql】(创建触发器)
create or replace trigger tr_stu after insert or update or delete
on students
declare
ope tr_stu_log.log_action%type;
begin
if inserting then
ope:='inserting';
elsif updating then
ope:='updating';
elsif deleting then
ope:='deleting';
end if;
insert into tr_stu_log values(user,ope,to_char(sysdate,'yyyy-mm-dd hh24:mm:ss'));
end;
/
commit;
【SQL环境下运行sql 文件:start 811.sql 和 start 81.sql】
【然后对students表进行增删改操作(students表为自建表,然后插入一些数据)】
【查询跟踪审计表 tr_stu_log 中的操作记录】
2.当用户登录,注销服务时,记录下登机下机的时间,并记录共在线时间。
【vim 82.sql】(创建记录信息的表)
create table user_log(
log_user varchar(20),
login_time date,
logout_time date,
total_time date);
【运行:start 82.sql】(查询表是否存在)
【vim 821.sql】(上线触发器)
create or replace trigger log_on
after logon on database
begin
insert into user_log(log_user,login_time)
values(ora_login_user,sysdate);
end;
/
commit;
【vim 822.sql】(下线触发器)
create or replace trigger log_out
before logoff on database
begin
update user_log set logout_time=sysdate where log_user!=null;
update user_log set total_time=round((logout_time-login_time)*1440)
where log_user!=null;
end;
/
commit;
【运行sql文件创建触发器:start 821.sql 和 start 822.sql】
【关闭虚拟机再打开查询记录表信息】