免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1085 | 回复: 0

Trigger 审计与日志 [复制链接]

论坛徽章:
0
发表于 2011-12-21 08:44 |显示全部楼层
Trigger:表数据写入、更新、删除动作时候自动备份到log表,能正常运行

当想在trigger下调用pkg时候报错:

ORA-04091 - "Table <table_name> is mutating " error.

ORA-04092 cannot COMMIT in a trigger

 

ORA-04091 报错原因在trigger里面调用的pkgtrigger本体表做了dml动作 导致oracle认为trigger在循环处理

ORA-04092 报错原因在trigger里面调用的pkgcommit语句,因为我的触发器是dml(insertupdatedelete)触发器,不能包含ddl(createdropalter)语句和dcl(commitrollbacksavepoint)语句

 

这两个报错在初学使用trigger时最容易出现,怎么解决

ORA-04091 不在trigger里对本体表做操作,我碰到的比较好处理,不在trigger里面调pkg,在其他时机其他pkg下调此pkg就解决了,所以没有碰到一定要在trigger下处理本体表的

 

ORA-04092 trigger下的ddl语句移出,建另外的pkg来实现或者在系统级trigger下执行

 

Trigger

 功能:
  1 允许/限制/自动执行对表的修改
  2 强制数据一致性
  3 提供审计和日志记录
  4 防止无效的事务处理
  5 处理复杂的业务逻辑

 

 触发器类型
  1 语句触发器
  2 行触发器
  3 INSTEAD OF 触发器
  4 系统条件触发器
  5 用户事件触发器

 

 事务处理:
  在触发器中,不能使用commit / rollback
  因为ddl语句具有隐式的commit,所以也不允许使用

 视图:
  dba_triggers

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP