oracle 能跟踪用户正在操作那张表吗?

[复制链接]
查看11 | 回复6 | 2010-5-15 01:01:05 | 显示全部楼层 |阅读模式
如题,请教各位
目的:用触发器实现用户对表删除的跟踪
问题:除了表名外,其他的都能知道,通过sys_context,那要如何定位表名呢?
create or replace trigger dbtest_audit_droptable
before drop on schema

declare
-- local variables here
begin
insert into dbtest_audit_info values (
sys_context('userenv','os_user'),
sys_context('userenv','terminal'),
sys_context('userenv','host'),
sys_context('userenv','ip_address'),
to_char(sysdate,'yyyy-mm-dd hh24:mm:ss'));
drop_temp_table('after_tab');
dbtest_print;
end dbtest_audit_droptable;
回复

使用道具 举报

千问 | 2010-5-15 01:01:05 | 显示全部楼层
DDL不可以吧,不过oracle有内部表,可以在上面做delete跟踪
回复

使用道具 举报

千问 | 2010-5-15 01:01:05 | 显示全部楼层
使用关键字DICTIONARY_OBJ_NAME 返回操作的对象名
回复

使用道具 举报

千问 | 2010-5-15 01:01:05 | 显示全部楼层
CREATE OR REPLACE TRIGGER trig_ddl
AFTERDROPON DATABASE
DECLARE
Event VARCHAR2(20); Typ VARCHAR2(20);
v_Name VARCHAR2(30);Owner VARCHAR2(30);
BEGIN
-- 读取DDL事件属性
Event := SYSEVENT;
--激活触发器的事件名称
Typ := DICTIONARY_OBJ_TYPE;--语句所操作的数据库对象类型
v_Name := DICTIONARY_OBJ_NAME;--语句所操作的数据库对象名称
Owner := DICTIONARY_OBJ_OWNER;--语句所操作的数据库对象所有者名称
-- 将事件属性插入到事件日志表中
INSERT INTO event_log
VALUES(event, typ, v_name, owner);
END;
回复

使用道具 举报

千问 | 2010-5-15 01:01:05 | 显示全部楼层
多谢各位,sys.dictionary_obj_name 真是一个好东西
回复

使用道具 举报

千问 | 2010-5-15 01:01:05 | 显示全部楼层
nice
回复

使用道具 举报

千问 | 2010-5-15 01:01:05 | 显示全部楼层
create or replace trigger dbtest_audit_droptable
before drop on schema

declare
begin

insert into dbtest_audit_info values (
sys_context('userenv','os_user'),
sys_context('userenv','terminal'),
sys_context('userenv','host'),
sys_context('userenv','ip_address'),
sys.dictionary_obj_name,
sys.sysevent,
to_char(sysdate,'yyyy-mm-dd hh24:mm:ss'));

end dbtest_audit_droptable;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行