You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部分用户无法获取sys.dm_tran_commit_table视图当前行数据的问题

Change Tracking同步EDW时sys.dm_tran_commit_table的数据权限问题

长期使用Change Tracking将数据同步至EDW,此前所有表均为SCD Type 0或Type 1。在配置SCD Type 2表时,将sys.dm_tran_commit_table加入查询,此时发现数据缺失问题。

设置了简单测试:

SELECT MAX(commit_ts), MAX(commit_time) FROM sys.dm_tran_commit_table

执行该查询时,本人能获取当前值,但其他用户得到的数据存在数小时延迟,具体结果如下:

用户IDMAX(commit_ts)MAX(commit_time)
本人18753902022-10-11 17:21:21.330
其他用户18752002022-10-11 16:09:30.640

未找到相关解决方案。此外还发现一个相关问题:某数据库中本人能获取当前数据,但其他用户得到的数据截至2022-09-29(延迟11至23天),该数据库所在服务器为MSSQL 2017 RTM(未更新),数据库兼容级别设为SQL Server 2008(100)。

更新1

测试了6个不同系统(SQL2016至SQL2017 CU30),均出现相同结果。MSSQL2017RTM的问题自行解决,但非sysadmin用户查询sys.dm_tran_commit_table的最大值时仍无法获取当前信息。修改了测试查询:

SELECT CHANGE_TRACKING_CURRENT_VERSION(), MAX(commit_ts), MAX(commit_time), GETUTCDATE() FROM sys.dm_tran_commit_table

结果如下:

用户IDCTCV()MAX(commit_ts)MAX(commit_time)UTCDATE()
本人4342443454342443442022-10-12 18:33:25.0502022-10-12 18:33:25.050
其他用户4342443554342401492022-10-12 18:25:08.3272022-10-12 18:33:26.287

仅找到以下说明:

数据库中所有启用Change Tracking的表的变更跟踪信息存储在内存行存储(syscommittable)中,该内存行存储会在每次检查点时刷新到磁盘表(syscommittab),syscommittab内部表的行在每次检查点时被移除。

无法理解为何非sysadmin用户无法从sys.dm_tran_commit_table视图获取当前数据。

编辑2

注意到非sysadmin用户的执行计划中,服务器从SYSCOMMITTABLE返回0行,但sysadmin用户能返回行。两类用户均能从syscommittab的聚集索引扫描获取行,这解释了用户无法查看当前数据的原因。现在认为这是权限问题,正在排查前DBA对系统的配置操作。

内容的提问来源于stack exchange,提问作者CMTalon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:01:21