Estou utilizando SSMS
(sou desenvolvedor de software, não DBA) e a cada lançamento de aplicativo preciso liberar o banco de dados com suas tabelas (algumas com dados outras apenas com esquema).
Eu tentei fazer 3 coisas ( SSMS
):
Using Database --> Tasks -> Generate scripts...
Isso é bom, para bancos de dados pequenos, quando os scripts têm mais de 200 MB, os usuários relatam problemas de memória, tanto durante a execuçãosqlcmd.exe
quanto deSSMS
. Além disso, tenho que me lembrar de disparar scripts e nunca tenho certeza se os scripts geram um banco de dados idêntico.Tentei usar a
Back Up
opção mas acho que essa opção serve para backup e não para exportação de dados, isso me impede de exportar apenas o esquema por exemplo. Os backups também mantêm históricos para restaurações diferenciais, o que não é minha intenção.Eu tentei
Script Database as... CREATE To..
. mas estes não mantêm gatilhos e dados. Além disso, esse script usa caminhos codificados para .mdf e .idf, que mudam de um servidor para outro.
Qual é a abordagem correta para replicar um banco de dados para outro servidor?
PS Sou novo neste site do Stack Exchange, li várias perguntas, mas não encontrei uma resposta depois de examinar várias perguntas.
Se você deseja o esquema e os dados, a melhor e mais segura maneira é um backup copy_only. Não gosta do histórico de backup que acompanha as tabelas do MSDB? Ok, exclua-o e inicie uma nova cadeia de backup executando um backup completo assim que a cópia for restaurada no novo servidor.
Se você quer apenas esquema, há muitas opções. Prefiro o SQL Compare do RedGate, mas há muitas ferramentas alternativas , incluindo o SSDT que (acho que com a atualização mais recente) tem funcionalidade de comparação de esquema.
Como você é um programador, não um DBA, eu recomendaria a maneira correta do programador fazer essas coisas.
Não atualize o banco de dados diretamente - nunca. Mantenha todas as alterações de esquema e alterações de dados de base em arquivos que são enviados com seu lançamento.
Não sei qual é a sua linguagem de escolha, mas existem muitas ferramentas para fazer isso, Ruby tem sua própria ferramenta - rake - com a qual você faz isso. E aqui estão outros dois:
Se preferir usar a GUI, você pode lidar com esse problema com o SSIS (Integration Services). Crie um novo pacote com uma única tarefa, a Tarefa de Transferência de Banco de Dados. Uma vez feito e salvo, você pode automatizar este processo com o Agente. Você pode lançar este pacote todas as noites, por exemplo, e manter seus diferentes ambientes atualizados.
Também existem muitas outras maneiras de fazer isso... Supus que seus ambientes não precisam estar sincronizados o dia todo (por exemplo, uma plataforma de desenvolvimento e produção).