Trabalhando em um script para remover bancos de dados .
Em alguns ambientes, nossos bancos de dados são restaurados regularmente do ativo, a replicação (mesclagem ou transacional) é estabelecida, os processos são executados e testados e, então, os bancos de dados precisam ser descartados, pois todo o desenvolvimento foi implantado no ativo. Agora, outro ciclo começa.
como parte da automação da eliminação do banco de dados até agora, criei este script abaixo:
select
DROP_DB_SCRIPT='use master;' + char(13)
+ case when source_database_id is not null -- this is a database snapshot
then ''
else
' alter database ' + name + ' set single_user with rollback immediate ' + -- put db in single user mode
case when (sb.is_published = 1 or sb.is_merge_published = 1)
then 'EXEC sp_removedbreplication ' + '''' + name + '''' -- remove db from the replication
else ''
end +char(13)
end +char(13) +
' drop database ' + quotename(name) +char(13)
,*
from sys.databases sb
where database_id >= 5
and is_distributor= 0
O script acima não fará nada além de produzir um script que eu possa usar para excluir um banco de dados ou conjunto de bancos de dados desejado.
ele leva em consideração a replicação (você precisa remover a replicação separadamente) e se o banco de dados é um snapshot de banco de dados , o que é uma coisa diferente .
Não considerei o seguinte:
Um banco de dados OFFLINE deve ser DEFINIDO COMO EMERGÊNCIA antes de ser descartado?
a questão aqui é: há algo, alguma verificação, que você pode ver que eu deveria ter adicionado, mas não adicionei?
Eu lidei com duas coisas:
- banco de dados é um instantâneo
- banco de dados está envolvido na replicação
Eu não lidei com:
- O banco de dados faz parte de um grupo de disponibilidade (nesse caso, eu precisaria removê-lo do AG primeiro)
- mais alguma coisa que você possa ver?
database_id > 5 não é uma boa ideia. Há algumas circunstâncias em que o id do banco de dados do sistema pode ser >= 5 (atualização local como exemplo)...
Então, use:
Também para AG você pode usar: