Este é o meu primeiro post no DBA.SE, por favor, informe-me de quaisquer erros, obrigado!
Eu sou um novo DBA (não um profissional de TI, apenas mais ninguém na empresa para fazê-lo); portanto, quanto mais básica a explicação, melhor. Eu tenho lido sobre estratégias de backup de banco de dados (ou, como aprendi a chamá-las, "estratégias de restauração"). Entendo o que os backups completos, diferenciais e do log de transações fazem, mas quero saber por que um backup diferencial pode ser baseado apenas no backup completo mais recente.
Se um backup diferencial é tudo o que mudou desde o último backup completo, por que o diferencial não pode se basear em nenhum backup de minha escolha? Para ser mais claro, estou perguntando sobre a especificação da base quando o backup é feito , e não durante a restauração. Estou assumindo que, ao restaurar, você escolheria a base correta e o diferencial correspondente para executar a restauração (não usando um diferencial feito da base B para restaurar da base A).
Qual é o motivo que impede que essa funcionalidade seja possível? Eu acho que deve haver uma razão, eu simplesmente não sei o que é.
Nota: Entendo que a base não pode ser especificada, mas minha pergunta é por que não ? (Também não estou interessado na discussão sobre "por que você faria isso?")
Analogia
Aqui está uma analogia de como eu entendo um backup diferencial:
Eu tenho um arquivo do Excel com alguns dados nas células.
No primeiro dia, eu faço uma cópia desse arquivo e o armazeno em outro lugar (o "backup completo").
No dia 2, olho para o arquivo e o comparo com a cópia de backup que fiz no dia 1 e observo todas as células que foram alteradas e quais são seus novos valores (um "backup diferencial"). Não estou anotando todas as alterações feitas em uma célula, apenas qual é o seu valor final. Se a célula A1 começou como "Alfred", mudou para "Betty", "Charlie" e depois "Dave", eu apenas notaria que "A1 agora é Dave".
No dia 3, comparo o arquivo atual com o arquivo de backup novamente e observo as alterações (outro "backup diferencial" com a mesma base do dia 2). Novamente, apenas observando os valores finais por célula no momento observado, nem todos os valores que a célula esteve ao longo do dia.
No dia 4, comparo novamente e observo as alterações novamente. Continuando com a célula A1, agora diz "Sarah", mesmo que tenham sido outros 10 nomes ao longo do dia, e tudo o que observo é "Agora A1 é Sarah".
No dia 5, meu arquivo fica bagunçado; então, olho para a cópia de backup que fiz no dia 1, depois para os estados finais anotados no dia 4 e aplico as alterações observadas na cópia de backup e agora tenho o arquivo "restaurado" como estava no dia 4 Então, eu olho para o backup feito no dia 1, vejo que no dia 4 a célula A1 terminou como "Sarah" e altero a célula de backup A1 para "Sarah".
Por que importaria se eu tivesse feito outra cópia de backup ("cheia") do arquivo no dia 2? Por que ainda não seria possível comparar (ler, "fazer um backup diferencial de") o arquivo no dia 3 ou 4 com a cópia feita no dia 1? Pelo que entendi, o SQL Server exigiria que eu comparasse (ao fazer outro backup diferencial) com um backup completo feito no dia 2 (se um tivesse sido feito) - nenhuma outra opção.
fonte
COPY_ONLY
- Se o OP fizesse um backup completo regular no dia 1 e umCOPY_ONLY
backup completo no dia 2, que problemas seriam causados pela aplicação de um diferencial posterior nessa mesma base para o dia 2 de backup?O recurso que você deseja pode existir em princípio. Não seria eficiente com as estruturas atuais do banco de dados (veja a resposta de Max Vernon). O SQL Server precisaria manter um conjunto de mapas de diferenças ou comparar o conteúdo atual do banco de dados com o backup completo especificado como base.
Existem aplicativos que desduplicam arquivos grandes. Você pode fazer dois backups completos e apenas os dados alterados serão realmente armazenados. É como um diff com base personalizada.
exdupe
por exemplo, pode fazer isso.O bom disso é que ele funciona com qualquer conjunto de arquivos de backup. De fato, começando com o terceiro arquivo de backup completo, você pagará apenas o uso de espaço incremental (e não diferencial). O uso do espaço é a diferença para o arquivo de backup anterior (não para o primeiro). O armazenamento com redução de redundância tem um comportamento semelhante.
Por que o recurso que você descreve não existe? Cada recurso consome orçamento, fazendo com que outros recursos não estejam presentes. Este aparentemente não chegou suficientemente longe na lista de prioridades. Não tenho certeza para o que seria bom. Parece um requisito bastante esotérico para usar bases personalizadas.
fonte
Não confunda backups de log de transações com backups diferenciais, pois eles têm finalidades diferentes! O que você está chamando de "backup diferencial", no qual você "observa todas as alterações nas células", é de fato um log de transações .
O objetivo de um backup diferencial é manter pequeno o tamanho do arquivo de backup resultante, registrando apenas as informações que foram alteradas desde o último backup completo e manter o tempo de restauração dentro do seu objetivo de tempo de recuperação (RTO).
A finalidade de um backup do log de transações é para deixá-lo repetir as transações a um ponto arbitrário no tempo - muitas vezes, mas definitivamente não necessariamente "a recente mais nada para acontecer".
O que você está falando é de fato possível - mas você precisa restaurar o backup completo e, em seguida, restaurar os logs de transações.
Se você tiver o backup completo do dia 1 e todos os backups do log de transações entre o dia 1 e o dia 5, não haverá nada para impedir a restauração do backup do dia 1 e a reprodução do log de transações até que você tenha os dados como no dia 4. Você também pode começar a partir do backup do dia 2, que seria um pouco mais rápido de restaurar, pois você repetiria menos transações. Você também pode restaurar o backup completo do dia 1, o backup diferencial do dia 3 e, em seguida, restaurar os logs de transações para o dia 4.
Editar: OK, sua analogia editada faz um pouco mais de sentido. A resposta é "porque você já pode conseguir o que deseja com os backups do log de transações". Um backup diferencial é apenas uma maneira barata e conveniente de registrar um monte de atividades no log de transações. Ele não oferece nenhuma granularidade de recuperação de dados que um backup de log de transações não oferece. Existem tantos recursos que oferecem "mera conveniência" que o transformam em um produto.
fonte
Fazer uma analogia com o Excel é comparar maçãs e laranjas. Por quê ? O Excel não é um banco de dados, pois não possui integridade dos dados. O Excel é um ótimo aplicativo de planilha e pode ser um complemento para o banco de dados.
O SQL Server é um sistema de banco de dados relacional que permite armazenar todos os seus dados e fornece um mecanismo para consultá-los. A parte importante é "Relacional", pois a relação de dados é importante junto com a integridade dos dados (propriedades ACID).
Fundamentos :
Os dados no banco de dados são organizados em componentes lógicos (tabelas, visualizações, procs, gatilhos, etc.) visíveis ao usuário. No mínimo, um banco de dados também é fisicamente implementado como dois (arquivo de dados e log) ou mais (arquivo de dados secundário) no disco.
Com base na sua analogia com o Excel, o que você está fazendo é aplicar o que mudou no primeiro. Isso está aplicando todas as transações confirmadas no log de transações
with STOP AT
(nota: no dia 5, o arquivo fica bagunçado e você está parando no dia 4)Em cada seção de 4 GB (chamada intervalo GAM) de cada arquivo de dados, há uma página de banco de dados especial chamada de bitmap diferencial que rastreia quais partes (chamadas extensões) dessa seção de 4 GB foram alteradas desde o último backup completo, indicando dados que foram alterados ou foi adicionado ao banco de dados.
Um backup diferencial verifica esses bitmaps e faz backup apenas das extensões do arquivo de dados marcadas como alteradas. Os bitmaps são redefinidos pelo próximo backup completo (portanto, um backup diferencial pode ser baseado apenas no backup completo mais recente) , para que você possa ver que, à medida que mais e mais alterações no banco de dados são alteradas, mais delas serão marcadas nos bitmaps diferenciais e backups diferenciais sucessivos serão cada vez maiores.
Você pode usar esse script para descobrir quanto do banco de dados mudou desde o último backup completo? .
As informações básicas diferenciais são armazenadas no
master
banco de dados -sys.database_file
ou (sys.master_files
- útil quando o banco de dados é somente leitura ou offline).Existem três colunas importantes que armazenam informações relacionadas à base diferencial .
differential_base_lsn
é a base para backups diferenciais. As extensões de dados que são alteradas depoisdifferential_base_lsn
serão incluídas no backup diferencial.differential_base_guid
é o identificador exclusivo do backup base no qual um backup diferencial se baseia.differential_base_time
é o tempo que corresponde adifferential_base_lsn
Um backup diferencial é útil para acelerar o RTO (objetivo do tempo de recuperação = tempo necessário para recuperar seu banco de dados), em oposição aos backups completos mais frequentes, que serão um problema para bancos de dados grandes ou para restaurar o volume de backups de log de transações, pois eles podem aumentar ao longo do tempo.
Nota: Um backup completo de COPY_ONLY não redefine a base diferencial, portanto, um backup de COPY_ONLY não pode servir como base diferencial.
Referências :
fonte