我正在使用 DBCC CLONEDATABASE 创建没有数据的数据库副本。有许多数据库不会克隆。错误信息是:
无法在具有唯一索引“clst”的对象“sys.sysschobjs”中插入重复键行。重复键值为 (565577053)。
它始终是三个 ID 之一:245575913、565577053、885578193。这三个 ID 始终是克隆失败的数据库中用户定义表类型的 object_id。我的大多数数据库都有用户定义的表类型,但是有些会克隆,有些则不会。在模型数据库中,其中两个 ID 与内部表sys.plan_persist_context_settings
&相关sys.plan_persist_query_hints
。第三个在 model.sys.objects 中不匹配。
我看到其他博客提到删除模型中的对象。模型数据库没有任何用户代码,我在使用 DAC 登录时无法删除这些内部表。数据库最初是在 SQL Server 2016 Std 中创建的,实例已升级到 2019 Std CU17。数据库也恢复到沙箱服务器 2019 Std CU17。这是克隆失败的地方。在升级之前(生产和沙箱一起升级),只有 2 个数据库无法克隆,我现在有 10 个!
不确定它是否相关,但 sys.table_types 中的表类型是 dbo.TableType,与 type_table_object_id 匹配。在 sys.objects 中,它是 sys.TT_TableType_34C8D9D1,is_ms_shipped 设置为 1。它们被创建为 dbo.TableType。
任何帮助表示赞赏
(由于在重复此问题时的发现,我已经替换了之前的回复。)
这对我来说也失败了。我的数据库中没有任何奇怪的东西,所以问题似乎出在模型数据库中的新东西上。这个简单的命令对我来说失败了:
所以在我看来,DBCC CLONEDATABASE 在 2022 年被破坏了。我已经提到过这一点,我们会看看它是否会在一天之内恢复。否则我们应该将其报告为错误。