SQL Server单库所有系统版本表出现两个历史表如何修正?
根因说明
首先可以排除master数据库损坏的可能,该现象通常由两类问题导致:
- SSMS本地缓存渲染异常,对象资源管理器加载了过期的元数据,导致跨库的历史表被错误显示在当前库的系统版本表关联项中
- 两个数据库中存在指向对方库历史表的同义词,系统版本表的关联检索逻辑会将同名同义词识别为关联历史表
修复操作步骤
- 清理SSMS缓存
关闭所有SSMS窗口,删除本地缓存目录:C:\Users\<你的系统用户名>\AppData\Local\Microsoft\SQL Server Management Studio\<SSMS版本号>\ComponentModelCache,重启SSMS后再次检查表的关联情况,90%的同类显示异常会在这一步解决 - 检查并删除冗余同义词
如果清理缓存后问题依旧,分别在两个数据库执行以下SQL查询是否存在跨库同义词:
若查询到指向另一个库历史表的同义词,直接删除即可:SELECT name, base_object_name FROM sys.synonyms WHERE base_object_name LIKE '%_his%' OR base_object_name LIKE '%HISTORY%'DROP SYNONYM [dbo].[<查询到的同义词名称>] - 重新绑定系统版本控制(可选,用于合并历史数据)
如果你需要保留记录数更多的那部分历史数据,先关闭两个库对应表的系统版本控制,合并历史记录(注意去重时间区间和主键,避免开启版本控制时一致性校验报错),再显式指定当前库的完整表名重新开启版本控制,避免歧义:USE [你要保留历史表的目标库名] GO ALTER TABLE ba SET (SYSTEM_VERSIONING = OFF); -- 此处自行插入历史数据合并的逻辑 ALTER TABLE ba SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [目标库名].[dbo].[ba_his] , DATA_CONSISTENCY_CHECK = ON )); GO
内容的提问来源于stack exchange,提问作者emphyrio
相关产品推荐
相关产品推荐

