我计划在我的网站上审核/记录一些事件(比如添加/更新/删除几个表)。我打算添加数据库触发器,我认为在审计表可能包含大量数据的时候,在该表中插入行可能需要更多时间。 我的问题是触发器将运行异步或是否需要在前端调用返回之前完成?
由于
答案 0 :(得分:2)
几乎可以肯定它们是同步的,否则,你已经把整个原子性点吹走了(可能会原子地对表进行更改,然后触发器可能会失败,这意味着你的审计跟踪是无用的)。
我不是说异步触发器不可能,但我看不出它们对你有用。
如果你担心桌子越来越大,还有其他方法可以解决这个问题。一种是分区(例如,基于日期),或者,如果不可用,则将审计行定期传输到基于日期的存档表,然后在主表中删除它们。
这样,主表只保存过去N
个月的数据,所有其他数据都保存在其他地方。
答案 1 :(得分:2)
触发器始终同步。它们作为事务的一部分运行,无论是显式(使用BEGIN TRAN
)还是暗示(使用INSERT等)。
在大多数应用程序中,必须进行日志记录和审计:如果对日志或历史记录表的写入在触发器中失败,那么父INSERT等也会失败。
在使用循环,发送电子邮件或调用MS Word Spell Checker或calling web services
进行严格编码时,只需花费很长时间您也可以使用Change Data Capture
代替触发器答案 2 :(得分:1)