数据库触发器,它是异步的吗? [复制]
Posted
技术标签:
【中文标题】数据库触发器,它是异步的吗? [复制]【英文标题】:Database Triggers, is it Async? [duplicate] 【发布时间】:2011-10-18 05:58:38 【问题描述】:我计划在我的网站上审核/记录一些事件(例如添加/更新/删除一些表)。我计划添加数据库触发器,我认为随着时间的推移审计表可能有很多数据,并且在该表中插入行可能需要更多时间。 我的问题是触发器将运行异步或者是否需要在前端调用返回之前完成?
谢谢
【问题讨论】:
几乎是个骗子,但不完全是。另一个 Q 询问如何使触发器异步,这个 Q 询问触发器是同步的还是异步的。虽然 answers 会有很多交叉,但我从不认为一个问题是骗子,除非它是另一个问题的正确子集(即 question 必须相同)。只是我的 0.02 美元。 【参考方案1】:几乎可以肯定它们将是同步的,否则,您就完全破坏了原子性(可能以原子方式对表进行更改,然后触发器可能会失败,这意味着您的审计跟踪是无用的)。
我并不是说异步触发器是不可能的,但我看不出它们对你有任何用处。
如果您担心桌子变大,还有其他方法可以解决这个问题。一种是分区(例如基于日期),或者,如果不可用,则定期将审计行传输到基于日期的存档表,然后在主表中删除它们。
这样,主表只保存最近N
个月的数据,而所有其他数据都存储在其他地方。
【讨论】:
最简单的方法就是在sql server中开启审计功能。 @TomTom:据我所知,与 CDC 或使用触发器相比,这很粗糙(没有过滤、记录系统内容和复制等) 它也是集成的,开发工作更少,并且已经应用了一定程度的测试。【参考方案2】:触发器总是同步的。它们作为事务的一部分运行,无论是显式(使用 BEGIN TRAN
)还是隐式(使用 INSERT 等)。
在大多数应用程序中,日志记录和审计是强制性的:如果在触发器中写入日志或历史记录表失败,那么父 INSERT 等也会失败。
仅在循环编码错误、发送电子邮件或调用MS Word Spell Checker 或calling web services 时触发需要很长时间
你也可以使用Change Data Capture代替触发器
【讨论】:
【参考方案3】: 我建议创建一个适当的审计表结构 示例:- 一个主审计表和一个具有旧值和新值的辅助表 审计日志可以通过触发器进行管理 如果管理得当,它不应该是开销 您应该有存档过程【讨论】:
以上是关于数据库触发器,它是异步的吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
用PLSQL导数据库数据,用Tools--Export Tables 导出 dmp文件,其中包括存储过程和触发器,函数等的吗?