Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Gera uma cópia somente esquema e somente leitura de um banco de dados usando DBCC CLONEDATABASE para investigar problemas de desempenho relacionados ao otimizador de consulta.
Transact-SQL convenções de sintaxe
Sintaxe
DBCC CLONEDATABASE
(
source_database_name
, target_database_name
)
[ WITH { [ NO_STATISTICS ] [ , NO_QUERYSTORE ] [ , VERIFY_CLONEDB | SERVICEBROKER ] [ , BACKUP_CLONEDB ] } ]
Argumentos
source_database_name
O nome do banco de dados a ser copiado.
target_database_name
O nome do banco de dados para o qual o banco de dados de origem será copiado. Esta base de dados será criada por DBCC CLONEDATABASE e ainda não deveria existir.
NO_STATISTICS
Aplica-se a: SQL Server 2014 (12.x) Service Pack 2 3, SQL Server 2016 (13.x) Service Pack 1 e versões posteriores.
Especifica se as estatísticas de tabela/índice precisam ser excluídas do clone. Se esta opção não for especificada, as estatísticas de tabela/índice serão automaticamente incluídas.
NO_QUERYSTORE
Aplica-se a: SQL Server 2016 (13.x) Service Pack 1 e versões posteriores.
Especifica se os dados do Repositório de Consultas precisam ser excluídos do clone. Se essa opção não for especificada, os dados do Repositório de Consultas serão copiados para o clone se o Repositório de Consultas estiver habilitado no banco de dados de origem.
VERIFY_CLONEDB
Aplica-se a: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) 8 e versões posteriores.
Verifica a consistência do novo banco de dados. Habilitar VERIFY_CLONEDB também desabilita estatísticas e a coleção do Repositório de Consultas, portanto, é equivalente a executar WITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTORE.
O comando a seguir pode ser usado para determinar se o banco de dados clonado foi verificado:
SELECT DATABASEPROPERTYEX('clone_database_name', 'IsVerifiedClone');
SERVICEBROKER
Aplica-se a: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) 8 e versões posteriores.
Especifica se os catálogos de sistema relacionados ao service broker devem ser incluídos no clone. A opção SERVICEBROKER não pode ser usada em combinação com VERIFY_CLONEDB.
BACKUP_CLONEDB
Aplica-se a: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) 8 e versões posteriores.
Cria e verifica um backup do banco de dados clonado. Se usado em combinação com VERIFY_CLONEDB, o banco de dados clonado é verificado antes que o backup seja feito.
Comentários
Um clone de um banco de dados gerado com DBCC CLONEDATABASE destina-se apenas para fins de solução de problemas e diagnóstico. O clone é uma cópia somente leitura e somente esquema do banco de dados original e tem limitações sobre quais objetos são copiados. Consulte a seção Objetos suportados para obter mais detalhes. Não há suporte para qualquer outro uso de um banco de dados clonado.
As validações a seguir são realizadas por DBCC CLONEDATABASE. O comando falhará se alguma das validações falhar.
- O banco de dados de origem deve ser um banco de dados de usuário. A clonagem de bancos de dados do sistema (
master,model,msdb,tempdb,distributionbanco de dados e assim por diante) não é permitida. - A base de dados de origem deve estar em linha ou ser legível.
- Um banco de dados que usa o mesmo nome que o banco de dados clonado ainda não deve existir.
- O comando não está em uma transação de usuário.
Se todas as validações forem bem-sucedidas, a clonagem do banco de dados de origem será executada pelas seguintes operações:
- Cria um novo banco de dados de destino que usa o mesmo layout de arquivo que a origem, mas com tamanhos de arquivo padrão do banco de dados
model. - Cria um instantâneo interno do banco de dados de origem.
- Copia os metadados do sistema do banco de dados de origem para o banco de dados de destino.
- Copia todo o esquema de todos os objetos do banco de dados de origem para o banco de dados de destino.
- Copia estatísticas de todos os índices do banco de dados de origem para o de destino.
Todos os arquivos no banco de dados de destino herdarão as configurações de tamanho e crescimento do banco de dados model. Os nomes de arquivo para o banco de dados de destino seguirão a convenção <source_file_name_underscore_random number>. Se o nome do arquivo gerado já existir na pasta de destino, DBCC CLONEDATABASE falhará.
DBCC CLONEDATABASE não oferece suporte à criação de um clone se houver algum objeto de usuário (tabelas, índices, esquemas, funções e assim por diante) que foram criados no banco de dados model. Se objetos de usuário estiverem presentes no banco de dados model, o clone do banco de dados falhará com a seguinte mensagem de erro:
Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object <system table> with unique index 'index name'. The duplicate key value is <key value>
Importante
Se você tiver índices columnstore, consulte Considerações ao ajustar as consultas com índices Columnstore em bancos de dados clonados atualizar as estatísticas de índice columnstore antes de executar o comando DBCC CLONEDATABASE. A partir do SQL Server 2019 (15.x), as etapas manuais descritas no artigo acima não serão mais necessárias, pois o comando DBCC CLONEDATABASE reúne essas informações automaticamente.
Blob de estatísticas para índices columnstore
A partir do SQL Server 2019 (15.x), o DBCC CLONEDATABASE captura automaticamente os blobs de estatísticas para índices columnstore, portanto, nenhuma etapa manual é necessária.
DBCC CLONEDATABASE cria uma cópia somente de esquema de um banco de dados que inclui todos os elementos necessários para solucionar problemas de desempenho de consulta sem copiar os dados. Em versões anteriores do SQL Server, o comando não copiava as estatísticas necessárias para solucionar com precisão as consultas de índice columnstore e as etapas manuais eram necessárias para capturar essas informações.
Para obter informações relacionadas à segurança de dados em bancos de dados clonados, consulte Noções básicas sobre segurança de dados em bancos de dados clonados.
Instantâneo do banco de dados interno
DBCC CLONEDATABASE usa um instantâneo do banco de dados interno do banco de dados de origem para a consistência transacional necessária para executar a cópia. O uso desse instantâneo evita problemas de bloqueio e simultaneidade quando esses comandos são executados. Se não for possível criar um instantâneo, DBCC CLONEDATABASE falhará.
Os bloqueios no nível do banco de dados são mantidos durante as seguintes etapas do processo de cópia:
- Validar o banco de dados de origem
- Obter bloqueio compartilhado (S) para o banco de dados de origem
- Criar instantâneo do banco de dados de origem
- Criar um banco de dados clone (um banco de dados vazio herdado do banco de dados
model) - Obter bloqueio exclusivo (X) para o banco de dados de clones
- Copie os metadados para o banco de dados clonado
- Liberar todos os bloqueios de banco de dados
Assim que o comando terminar de ser executado, o instantâneo interno será descartado.
TRUSTWORTHY e DB_CHAINING opções são desativadas em um banco de dados clonado.
Objetos suportados
Somente os seguintes objetos podem ser clonados no banco de dados de destino. Os objetos criptografados são clonados, mas não são utilizáveis no banco de dados de clones. Os objetos que não estão listados na seção a seguir não são suportados no clone:
- FUNÇÃO DO APLICATIVO
- GRUPO DE DISPONIBILIDADE
- ÍNDICE COLUMNSTORE
- CDB
- CDC
- Controle de alterações 6, 7, 8
- CLR 1, 2
- PROPRIEDADES DO BANCO DE DADOS
- INADIMPLÊNCIA
- FICHEIROS E GRUPOS DE FICHEIROS
- Texto integral 3
- FUNÇÃO
- ÍNDICE
- INICIAR SESSÃO
- FUNÇÃO DE PARTIÇÃO
- ESQUEMA DE PARTIÇÃO
- PROCESSO 4
- ARMAZENAMENTO DE CONSULTAS 2, 5
- FUNÇÕES
- REGRA
- ESQUEMA
- SEQUÊNCIA
- ÍNDICE ESPACIAL
- ESTATÍSTICA
- SINÓNIMO
- QUADRO 9
- TABELAS OTIMIZADAS PARA MEMÓRIA 2
- OBJETOS FILESTREAM E FILETABLE 1, 2
- GATILHO
- TIPO
- BANCO DE DADOS ATUALIZADO
- UTILIZADOR
- VISÃO
- ÍNDICE XML
- COLEÇÃO DE ESQUEMA XML
1 A partir do SQL Server 2014 (12.x) Service Pack 2 3.
2 a partir do SQL Server 2016 (13.x) Service Pack 1.
3 a partir do SQL Server 2016 (13.x) Service Pack 1 2.
4 procedimentos Transact-SQL são suportados em todas as versões a partir do SQL Server 2014 (12.x) Service Pack 2. Os procedimentos CLR são suportados a partir do SQL Server 2014 (12.x) Service Pack 2 3. Há suporte para procedimentos compilados nativamente a partir do SQL Server 2016 (13.x) Service Pack 1.
5 dados do Repositório de Consultas são copiados somente se estiverem habilitados no banco de dados de origem. Para copiar as estatísticas de tempo de execução mais recentes como parte do Repositório de Consultas, execute sp_query_store_flush_db para liberar as estatísticas de tempo de execução para o Repositório de Consultas antes de executar DBCC CLONEDATABASE.
6 A partir do SQL Server 2016 (13.x) Service Pack 2 10.
7 a partir do SQL Server 2017 (14.x) Service Pack 2 17.
8 A partir do SQL Server 2019 (15.x) 1 e versões posteriores.
9 A maioria das tabelas do sistema sinalizadas como is_ms_shipped não são clonadas.
Permissões
Requer associação ao sysadmin função de servidor fixa.
Mensagens de registo de erros
As mensagens a seguir são um exemplo das mensagens registradas no log de erros durante o processo de clonagem:
2018-03-26 15:33:56.05 spid53 Database cloning for 'sourcedb' has started with target as 'sourcedb_clone'.
2018-03-26 15:33:56.46 spid53 Starting up database 'sourcedb_clone'.
2018-03-26 15:33:57.80 spid53 Setting database option TRUSTWORTHY to OFF for database 'sourcedb_clone'.
2018-03-26 15:33:57.80 spid53 Setting database option DB_CHAINING to OFF for database 'sourcedb_clone'.
2018-03-26 15:33:57.88 spid53 Starting up database 'sourcedb_clone'.
2018-03-26 15:33:57.91 spid53 Database 'sourcedb_clone' is a cloned database. A cloned database should be used for diagnostic purposes only and is not supported for use in a production environment.
2018-03-26 15:33:57.92 spid53 Database cloning for 'sourcedb' has finished. Cloned database is 'sourcedb_clone'.
Sobre service packs para SQL Server
Os service packs são cumulativos. Cada novo service pack contém todas as correções que estão em service packs anteriores, juntamente com quaisquer novas correções. Nossa recomendação é aplicar o service pack mais recente e a atualização cumulativa mais recente para esse service pack. Não é necessário instalar um service pack anterior antes de instalar o service pack mais recente. Consulte Tabela 1 em Atualizações mais recentes e histórico de versões do SQL Server para encontrar mais informações sobre o service pack mais recente e a atualização cumulativa mais recente.
Observação
O banco de dados recém-gerado gerado a partir do DBCC CLONEDATABASE não é suportado para ser usado como um banco de dados de produção e destina-se principalmente para fins de solução de problemas e diagnóstico. Recomendamos desanexar o banco de dados clonado após a criação do banco de dados.
Propriedades do banco de dados
DATABASEPROPERTYEX('dbname', 'IsClone') retornará 1 se o banco de dados tiver sido gerado usando DBCC CLONEDATABASE.
DATABASEPROPERTYEX('dbname', 'IsVerifiedClone') retornará 1 se o banco de dados tiver sido verificado com êxito usando WITH VERIFY_CLONEDBo .
Exemplos
Um. Criar um clone de um banco de dados que inclua esquema, estatísticas e Repositório de Consultas
O exemplo a seguir cria um clone do banco de dados AdventureWorks2025 que inclui esquema, estatísticas e dados do Repositório de Consultas (SQL Server 2016 (13.x) Service Pack 1 e versões posteriores):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO
B. Criar um clone somente de esquema de um banco de dados sem estatísticas
O exemplo a seguir cria um clone do banco de dados AdventureWorks2025 que não inclui estatísticas (SQL Server 2014 (12.x) Service Pack 2 3 e versões posteriores):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO
C. Criar um clone somente de esquema de um banco de dados sem estatísticas e Repositório de Consultas
O exemplo a seguir cria um clone do banco de dados AdventureWorks2025 que não inclui estatísticas e dados do Repositório de Consultas (SQL Server 2016 (13.x) Service Pack 1 e versões posteriores):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS, NO_QUERYSTORE;
GO
D. Criar um clone de um banco de dados que é verificado
O exemplo a seguir cria um clone somente de esquema do banco de dados AdventureWorks2025 sem estatísticas e dados do Repositório de Consultas verificados (SQL Server 2016 (13.x) Service Pack 2 e versões posteriores):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO
E. Criar um clone de um banco de dados verificado para uso que inclua um backup do banco de dados clonado
O exemplo a seguir cria um clone somente de esquema do banco de dados AdventureWorks2025 sem estatísticas e dados do Repositório de Consultas que são verificados para uso. Um backup verificado do banco de dados clonado também será criado (SQL Server 2016 (13.x) Service Pack 2 e versões posteriores).
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB, BACKUP_CLONEDB;
GO