2011-10-18 55 views
0

我打算在我的网站上审核/记录少量事件(如添加/更新/删除少量表格)。我打算添加数据库触发器,我认为审计表可能有很多数据,并且在该表中插入行可能需要更多时间。 我的问题是,触发器将运行异步或是否需要在前端调用返回之前完成?数据库触发器,它是异步?

感谢

+1

可能重复Server 2005/2008](http://stackoverflow.com/questions/766761/asynchronous-triggers-in-sql-server-2005-2008) –

+0

耶几乎!!!! – Tippu

+1

_几乎是一个愚蠢的但不完全。另一个问是询问如何使触发器异步,这是询问触发器是同步还是异步。虽然_answers_会有很多交叉,但我从来不会考虑一个问题,除非它是另一个问题的适当子集(即,_question_必须相同)。只是我的$ .02。 – paxdiablo

回答

2

几乎可以肯定,因为,否则,你就吹原子整点离开,他们将是同步的(变化可能给表进行原子则触发可能会失败,这意味着审计线索是无用的)。

我不是说异步触发器是不可能的,但我看不到它们对您有任何用处。

如果您担心桌子变大,还有其他方法可以解决这个问题。一个是分区(例如基于日期),或者如果不可用,则将审计行定期传输到基于日期的归档表,然后在主表中删除它们。

这样,主表只保存最近N个月的数据,其他所有数据都存储在别处。

+0

最简单的方法就是打开sql server中的审计功能。 – TomTom

+0

@TomTom:据我所知,这是粗略的(没有过滤,记录系统的东西和复制等)与CDC或使用触发器 – gbn

+0

它也是集成的,花费较少的努力来开发和已经应用一定水平的测试。 – TomTom

1
  • 我建议创建一个适当的审计表(一个或多个)结构
  • 实施例: - 一个灵长类审计表和旧&新值的二次表
  • 审计-日志可经由被管理触发
  • 如果管理得当
  • 你应该有存档过程中的地方。它不应该是一个开销
2

ŧ索具是总是同步。它们作为交易的一部分运行,无论是明确的(使用BEGIN TRAN)还是隐含的(使用INSERT等)。

在大多数应用程序中,日志记录和审计是强制性的:如果在触发器中写入日志或历史记录表失败,则父INSERT等失败。

触发器只需要在与循环编码错误,或发送电子邮件,或调用MS Word Spell Checkercalling web services

INSTEAD OF触发器,您还可以使用很长一段时间Change Data Capture

[异步触发器在SQL的