我为我的程序设计了一个日志系统,我需要知道系统中的任何事务何时提交或回滚。由于我从一个地方打开我的连接,并且从一个地方开始交易,我已经开始交易了#39; BEGIN TRANSACTION'覆盖但回滚我无法得到。
请注意,我可以完全控制打开和管理事务,我可以轻松地将其记录在那里,但我不认为这是一个好的设计,因为从那时起,程序员将不得不担心记录每个提交或回滚!
除了实现我自己的IConnection和IDbTransaction之外,什么是最好的解决方案?
答案 0 :(得分:0)
使用扩展事件记录所有内容。以下脚本记录回滚,但您可以添加Begin Transaction事件或其他任何内容:
CREATE EVENT SESSION [rollback] ON SERVER
ADD EVENT sqlserver.rollback_tran_completed,
ADD EVENT sqlserver.rollback_tran_starting
ADD TARGET package0.event_file(SET filename=N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\rollback.xel')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON)
然后您可以使用以下方式查询结果:
SELECT * FROM sys.fn_xe_file_target_read_file('C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\rollback.xel', null, null, null)