请问一下有没有这种触发器?

dengwei007 2005-04-04 03:50:33
有没有可能用一个触发器监视所有table的操作?然后把该table的名,操作(insert,update,delete),某个字段的值记录下来。

例如我在table A中插入一个记录,A中的字段id号为100,那么触发器就在我给定的table中插入('A','insert',100)这样的记录,如果是修改另外一个table B,就插入('B','update',20)之类的记录。
也就是说触发器能监视所有的table,而且能返回table的名字,操作的类型,以及修改的数据。

谢谢!如果有解决的方法,分数不是问题。
...全文
146 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
developer2002 2005-04-05
  • 打赏
  • 举报
回复
即使有,对于系统的开销也很大。
dengwei007 2005-04-04
  • 打赏
  • 举报
回复
谢谢了。
但是我要的不是对create table,drop table的监视,我需要的是对任意table中数据操作的监视。
能有个log也行啊。
beckhambobo 2005-04-04
  • 打赏
  • 举报
回复
用如下的方式可以審計執行drop動作的事件:
/**
* drop語句的審計日誌表
*/
create table drop_log
(
session_id int not null, -- sessionid
drop_time date, -- drop的時間
ip_address varchar2(20), -- ip地址
object_owner varchar2(30), -- 對象的擁有者
object_name varchar2(30), -- 對象名稱
object_type varchar2(20), -- 對象類型
drop_by_user varchar2(30) -- 執行drop語句的用戶
);

create or replace trigger drop_info
after drop on mfg0513user.schema -- 在mfg0513user用戶上創建審計drop的觸發器
begin
insert into drop_log
(session_id,
drop_time,
ip_address,
object_owner,
object_name,
object_type,
drop_by_user)
values(USERENV('SESSIONID'),
sysdate,
SYS_CONTEXT('USERENV','IP_ADDRESS'),
sys.dictionary_obj_owner,
sys.dictionary_obj_name,
sys.dictionary_obj_type,
sys.login_user);
end;

執行drop的語句我沒有辦法給你抓出來,就像你說的那樣,v$sql不紀錄DDL語句,
不過對象名稱和對象類型都可以抓出來,我想這對你來說應該足夠了.

另外:create和alter動作都可以按照上面的方式建類似的表和類似的觸發器做到.
希望對你有所幫助.
'Alan 2005-04-04
  • 打赏
  • 举报
回复
对所有的表监控??

没见过。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧