中易网

创建一个触发器功能:当数据库启动后,可自动记载启动时间、启动数据库的用户

答案:2  悬赏:50  
解决时间 2021-11-15 23:15
创建一个触发器功能:当数据库启动后,可自动记载启动时间、启动数据库的用户
最佳答案
1.建立例程启动和关闭触发器:

为了跟踪例程启动和关闭事件,可以分别建立例程启动触发器和历程关闭触发器

为了记载历程启动和或关闭事件和时间,首先建立事件表event_table:
conn sys/oracle as sysdba

create table event_table(event varchar2(30),time date);

在建立了事件表event_table之后,就可以在触发器中引用该表了。

例程启动触发器和关闭触发器只有特权用户才能建立,例程启动触发器只能使用AFTER关键字,而例程关闭触发器只能使用BEFORE关键字

CREATE OR REPPLACE TRIGGER tr_startup
AFTER STARTUP ON DATABASE
BEGIN
INSERT INTO event_table VALUES(ora_sysevent,SYSDATE);
END;
/

CREATE OR REPLACE TRIGGER tr_shutdown
BEFORE SHUTDOWN ON DATABASE
BEGIN
INSERT INTO event_table VALUES(ora_sysevent,SYSDATE);
END;
/
在建立了tr_startup触发器之后,当打开数据库之后会执行该触发器相应代码,在建立触发器tr_shutdown之后,在关闭例程之前,会执行触发器的相应代码,但SHUTDOWN
ABORT(关闭数据库)不会触发该触发器。

2.建立登录和退出触发器

为了记载用户登录和退出事件,可以分别建立登录和退出触发器。为了记载登录用户和退出用户的名称。时间和IP地址,应该首先建立专门存档登录和退出的信息表LOG_TABLE
conn sys/oracle as sysdba

CREATE TABLE log_table(
username VARCHAr2(20),login_time DATE,
logoff_time DATE,address VARCHAr2(20)
);

在建立了LOG_TABLE表之后,就可以在触发器中引用该表了。

要用特权身份用户来建立登录和退出触发器,并且登录触发器只能使用AFTER关键字,而退出触发器用BEFORE

CREATE OR REPLACE TRIGGER tr_logon
AFTER LOGIN ON DATABASE
BEGIN
INSERT INTO log_table(username,logon_time,address)
VALUES(ora_login_user,SYSDATE,ora_client_ip_address);
END;
/

CREATE OR REPLACE TRIGGER tr_logoff
BEFORE LOGOFF ON DATABASE
BEGIN
INSERT INTO log_table(username,logoff_time,address)
VALUES(ora_login_user,SYSTEM,ora_client_ip_address);
END;
/

在建立了触发器tr_logon之后,当用户登录到数据库之后,会执行其触发器代码;在建立了触发器tr__logoff之后,当用户断开数据库连接之前,会执行其触发器代码。
全部回答
---------------------创建数据库表------------------------- if exists(select * from sysobjects where name='p') drop table p go use test go create table p (  pno char(2),  --零件编号  pname varchar(15), --零件名称  color char(2),  --零件颜色  weight int   --零件重量 ) ---------------------创建触发器----------------------- if exists(select * from sys.triggers where name ='test_trigger') drop trigger test_trigger go create trigger test_trigger on p for insert as    begin tran   declare @pno char(2)   declare @pname varchar(15)   declare @color char(2)   declare @weight int     declare @errorsum int = 0   select @pno=pno,@pname=pname,@color=color,@weight=weight from inserted   if exists(select * from sysobjects where name='test_table')    begin     insert into test_table values(@pno,@pname,@color,@weight)     set @errorsum+=@@error    end    else     begin     select * into test_table from inserted     set @errorsum+=@@error    end   if(@errorsum<>0)    begin     rollback tran        end    else    commit tran     go   --看看这个能不能解决问题,我自己写的
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
克詰的意思是什么?克詰的释义是什么啊?
做梦梦见大鱼是什么意思?好不好呢?
淮南除了教院那里,还有哪些地方有卖sj的周边
诸暨有没有到黄山的汽车?具体什么时间?
硬件和软件哪个比较容易。。
摩的读音是什么
蜂王浆泡酒老人喝好吗
双颖窗帘城怎么去啊,我要去那办事
轎幰的意思是什么?轎幰的释义是什么啊?
乌鲁木齐市中山路附近那里有月票充值点
ZL 2006 2 0151854.0是个什么专利 谁能帮忙查
最有效的美白祛斑产品
南京市珠江路648号南京数码港02栋(东面)15楼1
梦见自己在沙漠中行走是什么意思?好不好呢?
注册会计师考试《审计》哪个老师讲的比较好
推荐资讯
报废煤气罐怎么处理
類錫的意思是什么?類錫的释义是什么啊?
QQ企鹅怎么升级快啊?
从火车站搭什么车到长沙市天心区富景园区(省
天啊!珠海升鸿模具厂拖欠我工资三个月多!请
我想知道石家庄有啥好玩的?
有谁可以说说混合砂浆跟水泥砂浆的区别?
高安农商银行(瑞兴分社)怎么去啊,有事要去办
请教大家:汽车的全时四驱和超选4驱哪个更好?
汽车音响商行地址好找么,我有些事要过去
秋去冬来是什么意思啊?
九个月的宝宝晚上睡觉爱出汗是怎么回事?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?