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.
- Criando arquivo de dados primário e arquivo de registro
- Adicionar espaços de dados secundários
- Adicionando arquivos secundários
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
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