我正在使用 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 (AdventureworksDW, AdventureworksDW_Copy)
WITH VERIFY_CLONEDB, BACKUP_CLONEDB;
Msg 2601, Level 14, State 1, Line 13
Cannot insert duplicate key row in object 'sys.sysschobjs' with unique index 'clst'. The duplicate key value is (341576255).
SELECT OBJECT_NAME(341576255, DB_ID()) --None
SELECT OBJECT_NAME(341576255, DB_ID('model')) --'db_ledger_blocks'
Run Code Online (Sandbox Code Playgroud)
所以在我看来,DBCC CLONEDATABASE 在 2022 年就被破坏了。我已经提到过这一点,我们将看看它是否会在一天内恢复。否则我们应该将此报告为错误。
归档时间: |
|
查看次数: |
314 次 |
最近记录: |