创建一个触发器功能:当数据库启动后,可自动记载启动时间、启动数据库的用户
答案:2 悬赏:50
解决时间 2021-11-15 23:15
- 提问者网友:野性
- 2021-11-15 04:21
创建一个触发器功能:当数据库启动后,可自动记载启动时间、启动数据库的用户
最佳答案
- 二级知识专家网友:冷态度
- 2021-11-15 05:43
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之后,当用户断开数据库连接之前,会执行其触发器代码。
为了跟踪例程启动和关闭事件,可以分别建立例程启动触发器和历程关闭触发器
为了记载历程启动和或关闭事件和时间,首先建立事件表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之后,当用户断开数据库连接之前,会执行其触发器代码。
全部回答
- 1楼网友:厌今念往
- 2021-11-15 06:21
---------------------创建数据库表-------------------------
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
--看看这个能不能解决问题,我自己写的
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯