Oracle触发器实验

【开两个终端窗口方便操作】

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】

【关闭虚拟机再打开查询记录表信息】

  • 43
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值