如果一个触发器中只有一条Null语句,是否会产生日志?为什么?

是否产生日志,以及产生多少日志,应区分:
三种不同的触发器(Befor,After,Instead),
三种不同的DML操作(Insert,Update,Delete),
两类Oracle版本(9i及以下,10G)区别来说.

触发器中的什么都不执行也可能产生日志,并且某些情况下产生大量的额外日志,影响性能.

主要情况如下:
1.Befor和After触发器在9i及以下进行Insert操作会额外增加近3倍的日志,Delete操作不受影响,Update操作只受Befor触发器影响不受After触发器影响
2.行的大小影响Insert操作产生的额外日志量,但不影响Update和Delete操作(注意:触发器中只有Null语句,按常理来讲都不应受行大小的影响)
3.Instead触发器不受影响

Oracle10G中,发生了一点变化,Befor和After触发器对Insert和Delete操作都不受影响,对Update操作都有影响.
按常规理解,这应算作Oracle的一个Bug,但Oracle没有这样认为,所以没有补丁,只有10G会缓解这种问题的影响.

详细的情况及实验脚本,参见Tom的两部著作中关于重作日志章节的讲解:
2002年,<Expert one on one Oracle>
2006年,<Expert.Oracle.Database.Architecture.9i.and.10g.Programming.Techniques.and.Solutions>

原文地址:https://www.cnblogs.com/zyk/p/531134.html