我想记录一个关与哪些人查询这个表的记录的日志怎么做
解决方案 »
- select 怎么根据不同的字段值取出另一个字段
- oracle10g高手请进,小帝急等!
- asp.net连接oracle8i数据库做了个删除操作是报错 -进者有分
- query error:ORA-00911: 无效字符
- 刚搞oracle9,oms中怎么没有我建好的数据库啊,独立启动可以看到所有的数据库,我该如何让oms里也有我建的数据库!(100分答玩就结)
- 急啊:oracle不能啓動
- 高分求助优化解决方案,应该不是太容易吧。愿用本人所拥有的分数的1/3作为酬劳。
- 如何删除一个index?
- 怎样根据一个表的某个字段排序建立这个表的视图
- 关于查询组合数的SQL
- 表空间的磁盘转移问题
- oracle 10G 在 plsql编程中 利用隐式游标循环如何取记录数?
对数据库中的DDL,DML事件进行监控……
这是我写的,对数据库中DDL事件进行监控的触发器,
仅供参考:create table sys.ddl_actions
(who varchar2(100),
what varchar2(2000),
when date,
ip_address varchar2(100),
terminal varchar2(100)
);
/-------------------------------------------------------------------
CREATE OR REPLACE TRIGGER sys.LogDDLActions
BEFORE DDL ON DATABASE
DECLARE
executor ddl_actions.who%TYPE;
action ddl_actions.what%TYPE;
ipaddr ddl_actions.ip_address%TYPE;
tterminal ddl_actions.terminal%TYPE;
BEGIN
executor := LOGIN_USER;
action := SYSEVENT||' '||DICTIONARY_OBJ_TYPE||' '
||DICTIONARY_OBJ_OWNER||'.'||DICTIONARY_OBJ_NAME;
SELECT DISTINCT TRIM(SYS_CONTEXT('userenv','ip_address')), terminal INTO ipaddr, tterminal
FROM V_$SESSION
WHERE NVL(USERNAME,'NULL') = USER
AND TERMINAL = USERENV('TERMINAL');
INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, ipaddr, tterminal);
EXCEPTION
WHEN OTHERS THEN
INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, null, null);
END;
/个人建议:最好不要使用基于数据库级别DML触发器,这样会给数据库的性能带来很大的影响!