Fazendo backup de vários bancos de dados no mesmo ponto no tempo

10

Geralmente, quando iniciamos o backup, não permitimos que alterações sejam confirmadas ou o banco de dados não estará acessível. Quero dizer, o banco de dados estará no modo de usuário único, mas quero iniciar o backup e liberar o banco de dados para uso. Além disso, depois de iniciar o backup, não quero que as alterações em andamento sejam gravadas no arquivo de backup. Quero saber como conseguir isso no Microsoft SQL Server 2012.Por favor, me ajude.

Bem, deixe-me explicar meu problema primeiro. Atualmente, estou configurando o banco de dados para o modo de usuário único até que o backup seja concluído. Este modo servirá ao meu objetivo de evitar as alterações de dados quando o backup estiver em andamento. Mas meu aplicativo está vinculado aos vários bancos de dados (cada banco de dados está interligado e há var dbs que continua criando mensalmente). Portanto, o backup de todos esses bancos de dados se tornou um processo tedioso e, mais importante, eu tenho que manter os usuários fora do sistema quando o backup estiver em andamento.

Então, eu estou procurando um mecanismo de backup que atenda aos requisitos mencionados abaixo.

  1. Inicie o backup de todos os dbs de cada vez e libere o db para uso.
  2. Como os bancos de dados estão interligados, desejo manter a consistência dos dados nos arquivos de backup. Portanto, devido a esse requisito de consistência de dados, não quero que as alterações sejam confirmadas no meu arquivo de backup.

Tudo o que eu quero é - backup de todos os dbs em um determinado momento.

Praveen
fonte
2
Você não precisa definir seu banco de dados para o modo de usuário único ao fazer backups. O SQL Server nunca incluirá transações não confirmadas no seu backup. Para obter uma resposta mais completa, edite sua postagem para incluir detalhes do seu modelo de recuperação, se você quer dizer backups de log de transações, backups completos ou incrementais, bem como qual problema está ocorrendo. Tal como está, sua pergunta não é clara.
21716 Daniel Hutmacher
11
O que você deseja alcançar com esse backup? Recuperabilidade total até este ponto - ou algo mais? Em outras palavras ... Se você precisar restaurar a partir deste backup, o que deve ser restaurado - alguma alteração na DDL? Alterações nos dados ou o quê?
Seventyeightist # 20/16
O que você deseja não é possível no SQL 2012. Nos dias do SQL 7.0, o conjunto de backup do banco de dados foi usado para recriar o banco de dados como estava no momento em que a instrução BACKUP foi iniciada. A partir do SQL 2000 e em diante, um conjunto de backup de banco de dados é usado para recriar o banco de dados como estava no momento em que a instrução BACKUP foi concluída.
stacylaray
@DanielHutmacher Estou procurando backups completos.
Praveen 24/03

Respostas:

13

Estou assumindo que sua tarefa é criar um conjunto de backups em que você possa restaurar todos eles em um único ponto estático (sem transações abertas) (tudo em sincronia). Semelhante ao que um ponto de inatividade fará por você no DB2. Infelizmente, não há nada no SQL Server que faça exatamente isso. No entanto, supondo que seus bancos de dados estejam no modo de recuperação COMPLETO, você pode fazer algo semelhante.

Você pode criar uma única MARKEDtransação em todos os bancos de dados de uma só vez . Em seguida, você faz um backup do log de transações de cada banco de dados. Supondo que você esteja acompanhando seus backups de log (o que você deve fazer de qualquer maneira), os backups de log não demoram muito tempo. E não há necessidade de impedir que alguém esteja no sistema (exceto talvez o tempo suficiente para você criar sua transação marcada).

Nesse ponto, se você precisar fazer uma restauração, faça um RESTORE STOPBEFOREMARKem cada um dos seus bancos de dados. Isso restaurará todos os bancos de dados no mesmo ponto (com base na sua transação). Nota: Também há um STOPATMARK se você deseja incluir essa transação.

Se você quiser um exemplo, eu tenho um no link acima, juntamente com um pouco de leitura adicional.

Sei que isso não responde exatamente à sua pergunta, mas espero que resolva o seu problema.

Kenneth Fisher
fonte
2
É assim que o BizTalk gerencia backups pontuais de vários bancos de dados. Se funcionar para o Microsoft BizTalk, é praticamente um recurso bem testado.
Max Vernon
Nós o usamos para bancos de dados TFS no loggingping, mudamos para alwaysOn.
Kin Shah
11
Um detalhe (implícito mas não dito) para levar a resposta de Ken para casa: Você não pode ter um backup COMPLETO consistente em vários bancos de dados. O mais próximo que você pode chegar é fazer uma rodada de backups completos, imediatamente seguida por uma transação marcada e, em seguida, uma rodada de backups de log. Essa primeira rodada de backups de log "confirmaria" a consistência até o momento.
AMtwo
@AMtwo tecnicamente você poderia usando o método OPs. Bloqueie todos para fora do sistema, verifique se não há conexões ativas (talvez marque os bancos de dados como somente leitura / restritos) e faça backups completos de todos os bancos de dados. No entanto, como o OP afirmou, não é o melhor método do mundo.
23416 Kenneth Fisher
7

Sua pergunta é semelhante à que eu respondi - Fazendo backup e restaurando 10-20 bancos de dados do SQL Server em um estado ~ síncrono?

Supondo que seu modelo de recuperação de banco de dados seja COMPLETO, faça um backup completo e use Transações marcadas .

Permite desmascarar seus mitos ...

Inicie o backup de todos os dbs de cada vez e libere o db para uso.

Dos mitos de backup (recomendo que você leia todos os mitos de backup) :

As operações de backup não usam bloqueios nos objetos do usuário. Os backups causam uma carga de leitura muito pesada no subsistema de E / S; portanto, pode parecer que a carga de trabalho está sendo bloqueada, mas na verdade não está. Está apenas sendo desacelerado. Há um caso especial em que um backup que precisa captar extensões registradas em massa terá um bloqueio de arquivo que pode bloquear uma operação de ponto de verificação - mas o DML nunca é bloqueado.

Como os bancos de dados estão interligados, desejo manter a consistência dos dados nos arquivos de backup. Portanto, devido a esse requisito de consistência de dados, não quero que as alterações sejam confirmadas no meu arquivo de backup.

Transações marcadas o ajudarão a fazer backup consistente do LOG e você poderá restaurá- las usando RESTORE ... WITH STOPBEFOREMARK = '<mark_name>'

Lembre-se de que as transações marcadas para todos os bancos de dados na instância também são registradas na dbo.logmarkhistorytabela no MSDBbanco de dados.

Kin Shah
fonte
-1
--]---- Begin Code ----[
--–declaring variables
DECLARE @dbname VARCHAR(100) -- database name
DECLARE @bupath VARCHAR(100) -- path for backup location
DECLARE @filename VARCHAR(100) -- filename used for backup files
DECLARE @datestamp VARCHAR(25) -- date used for backup file timestamp
-- specify database backup directory
SET @bupath = 'D:\DB Bkp\'
-- file date formatting
SELECT @datestamp = CONVERT(VARCHAR(20),GETDATE(),112) + REPLACE
(CONVERT(VARCHAR(20),GETDATE(),108),':','')
--specify databases to backup
DECLARE db_cursor CURSOR for
SELECT name
FROM master.dbo.sysdatabases
WHERE name not IN ('tempdb') -- excludes these databases, if excluding multiple databases, seprate them by a comma
--backup process
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
   SET @filename = @bupath + @dbname + '_' + @datestamp + '.bak'
   BACKUP DATABASE @dbname TO DISK = @filename WITH INIT,
   CHECKSUM; --init overwrites existing files with the same name, and checksum verifies the backup
       FETCH NEXT from db_cursor INTO @dbname
END
CLOSE db_cursor
DEALLOCATE db_cursor

para obter mais detalhes: https://blogs.technet.microsoft.com/letsdothis/2013/11/06/backup-multiple-sql-databases-in-a-single-swoop/

thambu
fonte
Isso não garante backups no mesmo ponto no tempo. É apenas uma sequência de backups consecutivos.
vonPryz 30/01