Estou tentando configurar uma caixa de proteção para nossos desenvolvedores de relatórios trabalharem. Meu plano atual é "redefinir" o banco de dados todas as noites, mas não tenho certeza de como fazer isso. O que quero dizer com redefinição é que quero eliminar essencialmente todas as tabelas de usuário, exibições, procedimentos armazenados, etc. de todos, exceto um banco de dados no servidor. Suponho que outra opção seria descartar e recriar o banco de dados também, mas tenho certeza de que isso significaria conceder novamente o acesso a todos os grupos/pessoas AD apropriados também.
Eu realmente não sei qual seria a melhor maneira de fazer isso, então espero que alguns de vocês possam fornecer algumas boas ideias/sugestões. Obrigado.
Para maior clareza, queremos essencialmente fazer isso com nosso banco de dados: http://try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57 . A única diferença é que não queremos recriar nossos usuários todos os dias.
Versão: SQL Server 2008
Edition: Developer & Enterprise
Outra ideia seria simplesmente configurar um trabalho noturno que faça um backup copy_only e o restaure no servidor dev (ou no mesmo servidor, se você tiver apenas um, mas isso pode não ser uma boa ideia). O bom disso é que a restauração pode ir para qualquer servidor (ou vários servidores) e pode ser completamente dissociada de qualquer atividade no banco de dados primário.
No servidor 1:
No servidor 2:
Você também pode precisar adicionar
MOVE
comandos se o layout do disco entre os servidores for diferente (ou se estiver colocando a cópia no mesmo servidor).Se você estiver restaurando no mesmo servidor, não deverá ter problemas com os usuários. Se você restaurar para um servidor diferente, seus usuários existirão, mas os logins no nível do servidor podem não existir. Existem scripts para corrigir isso e um novo recurso no SQL Server 2012 ( Contained Databases ) que elimina o problema completamente.
Como você tem uma instância com o mecanismo Enterprise Edition, eu usaria instantâneos de banco de dados .
Isso permitirá que você reverta rápida e facilmente quaisquer alterações feitas durante o dia, sem precisar restaurar todo o banco de dados.
Observe que, se os desenvolvedores planejam fazer cargas de big data (parece que não?), Isso pode não ser apropriado.
Deixe-me adicionar meus poucos centavos para ver se isso ajuda você:
Na minha empresa, estamos passando pela mesma situação em que todas as noites os desenvolvedores desejam atualizar os bancos de dados que usaram durante o dia. Isso significa que temos um conjunto de bancos de dados que os desenvolvedores não tocam - digamos A e outro conjunto de bancos de dados que são a cópia exata A, mas eles fazem suas coisas, mas querem ser atualizados todas as noites - digamos B . Isso acontece em uma única instância do servidor.
O que implementei é um PROCESSO DE RESTAURAÇÃO NOITE para conseguir isso. Abaixo está como funciona:
Crie uma tabela de driver com uma lista de bancos de dados que precisam ser restaurados todas as noites (como você mencionou).
Tabela: nightly_restore (OriginalDB, RestoreDB, backuplocation, enabled_YN, Resultados, PASS_FAIL)
Em seguida, você pode escrever algum TSQL que percorrerá a lista de bancos de dados da tabela acima e, em seguida, executará as restaurações e registrará qualquer sucesso ou falha em Resultados e um bit 1 = Aprovado ou 0 = Reprovado. Enabled_YN determinará se esse banco de dados precisa ser restaurado ou não.
Se houver mais bancos de dados que serão adicionados no futuro, basta inseri-los na tabela e definir o bit enabled_YN como Y (habilitado).
Desta forma, o processo será mais flexível e gerenciável.
Se você quiser o SQL que escrevi (tenho certeza, você será capaz de escrevê-lo :-)), apenas me envie um ping ou adicione um comentário e eu o compartilharei.
HTH