Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Usando DBCC CLONEDATABASE para gerar uma cópia de esquema e estatísticas apenas de um banco de dados de usuário no SQL Server 2014 SP2

DBCC CLONEDATABASE é um novo comando DBCC introduzido no SQL Server 2014 SP 2 que é usado para criar o clone de um banco de dados de usuário especificado que ajuda na solução de problemas de desempenho relacionados ao otimizador de consulta.

Quando um clone do banco de dados for criado usando DBCC CLONEDATABASE, ele criará uma cópia de esquema e estatísticas apenas do banco de dados especificado e não contém nenhuma cópia dos dados.

Criar o clone é tão simples quanto passar a fonte nome do banco de dados e clone o nome do banco de dados para o comando DBCC.
DBCC CLONEDATABASE ('SansSQL', 'SansSQL_Clone') 

Saída do comando DBCC

Quando a clonagem for concluída, o banco de dados clonado estará no modo Somente leitura.

SELECT name, database_id, is_read_only FROM sys.databases WHERE name in ('SansSQL ', 'SansSQL_Clone') 

Então, o que realmente acontece quando emitimos o comando DBCC CLONEDATABASE em um banco de dados?
Ele começará com algumas validações antes que o clone seja criado. As validações a seguir são executadas pelo 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, banco de dados de distribuição etc.) não é permitida.
  • O banco de dados de origem deve estar online ou legível.
  • Um banco de dados que usa o mesmo nome do banco de dados clone ainda não deve existir.
  • O comando não está em uma transação do usuário.
Se todas as validações forem bem-sucedidas, DBCC CLONEDATABASE fará as seguintes operações:
  • Criando arquivo de dados primário e arquivo de registro
  • Adicionar espaços de dados secundários
  • Adicionando arquivos secundários
Os arquivos de banco de dados de destino herdarão as configurações de tamanho e crescimento do banco de dados modelo e os nomes de arquivo do banco de dados de destino seguirão a convenção source_file_name _underscore_random_number.
SELECT database_id, file_id, type_desc, name, physical_name FROM sys.master_files WHERE DB_NAME(database_id) in ('SansSQL', 'SansSQL_Clone') 


Então o DBCC CLONEDATABASE fará um Internal Database Snapshot com os seguintes passos
  • Validar o banco de dados de origem
  • Obter bloqueio S para o banco de dados de origem
  • Criar instantâneo do banco de dados de origem
  • Crie um banco de dados clone (este é um banco de dados vazio que herda do modelo)
  • Obtenha o bloqueio X para o banco de dados clone
  • Copiar os metadados para o banco de dados clone
  • Liberar todos os bloqueios de banco de dados
Usando o comando abaixo, podemos verificar se um banco de dados é um clone ou um banco de dados normal.
SELECT DATABASEPROPERTYEX('SansSQL','isClone') AS SansSQL_DB_CloneStatus ,DATABASEPROPERTYEX('SansSQL_Clone','isClone') AS SansSQL_CloneDB_CloneStatus 

Referência:https://support.microsoft.com/en-in/kb/3177838