【问题标题】:Two history tables for system-versioned tables shown显示了两个系统版本表的历史表
【发布时间】:2021-10-22 13:47:47
【问题描述】:

今天我注意到我在 SQL Server 中的众多数据库之一有两个历史表,用于数据库中的所有系统版本表。

两个表的内容相似,但不相同。一个历史表的记录比另一个多。我试图关闭系统版本控制并重新打开。当我关闭它时,历史表消失(当然)。但是当我重新打开它时,我再次得到相同的两个历史表......?? 我用这个来试试这个:

ALTER TABLE ba SET (SYSTEM_VERSIONING = OFF);   
ALTER TABLE ba SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.ba_his , DATA_CONSISTENCY_CHECK = ON ));   
GO

奇怪的是,据我所知,它只发生在其中一个数据库上,但发生在该数据库中的所有系统版本表上。

我该如何纠正这种情况?我只想要一张历史记录表

===========

附加信息: 第二个历史表似乎属于另一个数据库。如果我使用 SSMS 上下文菜单查询历史表,它会显示不同的数据库:

/****** Script for SelectTopNRows command from SSMS ******/ 
SELECT TOP (10000) [baID] ,[baTypeID] , etc... 
FROM [esx100-1888888P].[dbo].[ba_his] 

SELECT TOP (10000) [baID] ,[baTypeID] , etc... 
FROM [esx100-1246890P].[dbo].[ba_his] 

不知何故,另一个数据库的历史表显示在错误的数据库下面!这到底是怎么发生的?几周前我创建了数据库 esx100-1888888P。

我检查了数据库 esx100-1888888P,是的,它还显示了两个历史表。与其他数据库相同的表。不知何故,SQL-server 中的表数据库链接数据搞砸了。这是主数据库中的问题吗? – 肺气肿 3 分钟前

【问题讨论】:

  • 这只是您的 SSMS 版本中的一个错误。获取最新的 SSMS 版本,这将是正确的。
  • 当您关闭系统版本控制时,历史表不会被删除,它会变成一个“普通”表。当您查询 sys.tables where name='ba_his' 或使用带有 for system_time 条件的 ba 表时,您会看到什么?
  • 您不应该在同一个架构中有两个不同的表,都称为ba_his。当您查询他们时,查询是什么样的?如果您看到不同的结果,则表名必须有所区别
  • 如果我查询 sys.tables 它只显示一个表: SELECT * FROM sys.tables where name='ba_his' 奇怪的是,如果我自己查询历史表,我会得到 75 条记录。如果我使用 SSMS 的上下文菜单查询 SSMS 中显示的两个表,一个表显示 67 条记录,另一个显示 75 条记录。但是SSMS生成的sql语句是完全一样的……!
  • 你能区分 SQL 语句吗?也许名字中有一个零宽度空间或其他东西

标签: sql-server tsql temporal-tables sql-server-2017-express


【解决方案1】:

我删除了数据库 esx100-1888888P(幸好这只是一个测试数据库)。这解决了问题。我认为这是因为我将数据库 esx100-1246890P 的备份恢复为数据库 esx100-1888888P。我这样做是为了做一些测试。不知何故,这种恢复导致了这个奇怪的问题。看起来这是 MS 没有正确解决的问题,当一个数据库被还原为另一个数据库并且它涉及系统版本控制的表时。

【讨论】:

  • 也许可以分享你用来做RESTORE的脚本?
  • 我使用 SSMS 数据库恢复恢复了数据库。我刚刚更改了数据库和文件名。我已经这样做了很多次,但从来没有使用系统版本表。在我看来,MS 没有正确解决此恢复问题。不知何故,它弄乱了数据库 - 历史表的表链接。
  • 问题不在于数据库本身。相关的系统表甚至不支持跨数据库引用。它只是在 SSMS 中。如果在不同的数据库中相同的命名对象(和对象 ID),它用于缓存此数据的任何数据结构都可能存在错误
猜你喜欢
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 2022-01-27
  • 2010-10-07
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多