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

AG架构下主从节点使用@@DBTS遭遇异常问题求助

针对AG辅助节点rowversion/@@DBTS异常的分析与解决方案

核心本质:@@DBTS是实例级变量,不参与AG同步

@@DBTS是SQL Server每个实例独有的全局变量,它并非存储在数据库的持久化页面中,而是保存在实例的内存和系统元数据里,AG的日志同步机制不会同步这个变量——这是你遇到所有问题的根源。

异常1:辅助节点@@DBTS不更新(数据已同步但变量不变)

主节点的@@DBTS会随数据修改递增,因为写操作在本地生成新的rowversion值。但辅助节点作为只读副本,所有数据变更都是通过主节点的日志重做完成的,这个过程不会触发辅助节点本地的@@DBTS递增。辅助节点的@@DBTS只会停留在副本初始化时的值,或者最后一次本地写操作(如果曾经有过)后的值,和主节点的变更完全无关。

异常2:辅助节点@@DBTS比主节点大

这种情况通常有两种原因:

  • 副本初始化时(比如从备份还原构建辅助节点),备份文件对应的数据库@@DBTS值本身就高于主节点当前值
  • 辅助节点曾经担任过主节点,或者有过本地写操作(比如早期允许读写的配置),切换为辅助节点后,本地的@@DBTS没有被重置,AG同步也不会覆盖这个实例级变量

解决建议

  • 放弃依赖辅助节点的@@DBTS:不要用它来判断数据变更,改用查询目标表的rowversion字段最大值,比如:
    SELECT MAX([YourRowVersionColumn]) AS LatestRowVersion FROM YourTableName;
    
    这个值是随主节点变更同步过来的,能准确反映数据的最新版本。
  • 如需全局版本标识,直接读取主节点的@@DBTS:如果ETL流程需要全局的版本号基准,从主节点获取后再到辅助节点过滤数据,避免在辅助节点依赖这个变量。
  • 重置辅助节点(可选):如果辅助节点的@@DBTS异常值影响了业务,可以考虑重新初始化AG副本(先移除辅助节点,用主节点最新备份重新还原并加入AG),确保副本初始化时的@@DBTS和主节点一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:28:32