有没有一种方法而没有要更新的记录在审计表中的记录(通过触发器)被锁定,由于其触发触发器是在事务内的更新。SQL更新没有数据库锁定
因此,我们有一个用户表和一个触发器,用于插入,更新,删除和记录更改后的值给某个审计表,但我不希望审计表被锁定,以防止触发其他触发器来执行操作在审计表上。
编辑:只是为了澄清,我有问题是多个表通过不同的触发器到同一个审计表上报,这样的更新一个表锁被更新的所有其他表。至于关于事务回滚是什么的担忧,这不是一个问题,因为审计表仅用于更改跟踪,并且如果记录回滚,如果审计表不回滚则不是问题。
我想到了一种可能的方式,但我不知道这是否可行(或如何去做),有没有一种方法可以让触发器使用新连接而不是最初调用的连接?
如果事务回滚,您是否真的想要另一个进程在审计表中读取记录? – 2011-02-03 23:57:44
我会假设,是的,你想要审核表的数据被锁定。您真正的问题可能是您在审计表上有一个连续的(可能是集群的)主键索引,这会对审计表的叶节点进行热点检查,导致审计表中的所有插入操作全部进入相同的叶节点页面时间。将主键更改为更随机的排序方式,这可以解决您的锁定问题。 – 2011-02-04 00:10:23