Estou usando DBCC CLONEDATABASE para criar cópias de banco de dados sem dados. Há uma série de bancos de dados que não serão clonados. A mensagem de erro é:
Não é possível inserir linha de chave duplicada no objeto 'sys.sysschobjs' com índice exclusivo 'clst'. O valor da chave duplicada é (565577053).
É sempre um dos três IDs: 245575913, 565577053, 885578193. Os três IDs sempre serão o object_id de um tipo de tabela definido pelo usuário no banco de dados com falha ao clonar. A maioria dos meus bancos de dados tem tipos de tabela definidos pelo usuário, no entanto, alguns serão clonados, outros não. No banco de dados modelo, dois desses IDs estão relacionados às tabelas internas sys.plan_persist_context_settings
& sys.plan_persist_query_hints
. O terceiro não corresponde em model.sys.objects.
Eu vi outros blogs mencionarem a queda dos objetos no modelo. O banco de dados modelo não possui nenhum código de usuário e não consegui descartar essas tabelas internas enquanto estava conectado com o DAC. Os bancos de dados teriam sido inicialmente criados no SQL Server 2016 Std, a instância foi atualizada para 2019 Std CU17. Os bancos de dados são restaurados para um servidor sandbox também 2019 Std CU17. É aqui que o clone falha. Antes da atualização (a produção e o sandbox foram atualizados juntos), apenas 2 bancos de dados não clonavam, agora tenho 10!
Não tenho certeza se é relevante, mas o tipo de tabela em sys.table_types é dbo.TableType, correspondente em type_table_object_id. em sys.objects é sys.TT_TableType_34C8D9D1, is_ms_shipped definido como 1. Eles são criados como dbo.TableType.
Qualquer ajuda apreciada
(Substitui minha resposta anterior devido a descobertas ao reprovar isso.)
Isso falha para mim também. Não tenho nada estranho em meus bancos de dados, então o problema parece ser com coisas novas no banco de dados do modelo. Este comando simples falha para mim:
Portanto, parece-me que DBCC CLONEDATABASE está quebrado em 2022. Eu mencionei isso, veremos se ele será detectado em, digamos, um dia. Caso contrário, devemos relatar isso como um bug.