Eu uso o SQL SMS (SSMS) para executar todas as ações no meu único MS SQL DB. Sou apenas um administrador. Nunca restaurei um backup.
Quando faço um backup completo, tudo funciona. Depois, se eu quiser fazer um backup diferencial no dia seguinte, recebo um erro em que ele não consegue encontrar o backup:
Não é possível executar um backup diferencial do banco de dados "PMI" porque não há backup do banco de dados atual.
Desculpe, não forneço mais informações. Todos os erros aparecem em francês (idioma do sistema).
Não tenho problemas se eu fizer backups diferenciais logo após o backup completo.
Esta solicitação SQL:
SELECT
msdb.dbo.backupset.database_name,
msdb.dbo.backupset.backup_start_date,
msdb.dbo.backupset.backup_finish_date,
msdb.dbo.backupset.expiration_date,
msdb..backupset.type,
CASE msdb..backupset.type
WHEN 'D' THEN 'Full'
WHEN 'I' THEN 'Diff'
WHEN 'L' THEN 'Log'
END AS backup_type,
CASE msdb.dbo.backupmediafamily.device_type
WHEN 2 THEN 'Disk'
WHEN 5 THEN 'Tape'
WHEN 7 THEN 'Virtual Device'
WHEN 9 THEN 'Azure Storage'
WHEN 105 THEN 'A permanent backup device'
ELSE 'Unknown'
END AS device_type_desc,
msdb.dbo.backupmediafamily.physical_device_name,
msdb.dbo.backupset.is_copy_only,
msdb.dbo.backupset.is_snapshot,
msdb.dbo.backupset.first_lsn,
msdb.dbo.backupset.last_lsn,
msdb.dbo.backupset.database_backup_lsn,
msdb.dbo.backupset.checkpoint_lsn,
msdb.dbo.backupset.differential_base_lsn,
msdb.dbo.backupset.fork_point_lsn,
msdb.dbo.backupmediaset.name,
msdb.dbo.backupmediaset.software_name,
msdb.dbo.backupset.user_name,
'EOR'
FROM msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset
ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
INNER JOIN msdb.dbo.backupmediaset
on msdb.dbo.backupmediaset.media_set_id = backupmediafamily.media_set_id
WHERE 1 = 1
AND (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7)
AND database_name IN ('PMI')
ORDER BY --2,
2 desc,3 desc;
Resultado de retorno:
database_name backup_start_date backup_finish_date expiration_date type backup_type device_type_desc physical_device_name is_copy_only is_snapshot first_lsn last_lsn database_backup_lsn checkpoint_lsn differential_base_lsn fork_point_lsn name software_name user_name
-------------- ----------------------- ----------------------- ----------------------- ---- ----------- ------------------------- ------------------------------------------------------------- ------------ ----------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- --------------- ----- --------------------- --------------------
PMI 2024-11-19 20:25:21.000 2024-11-19 20:25:33.000 2024-12-04 20:25:21.690 D Full Disk D:\SQL Backup\PMI\PMI_backup_2024_11_19_202521_6517704.bak 0 0 104302000000558300001 104302000000558600001 104222000001229700037 104302000000558300001 NULL NULL NULL Microsoft SQL Server sa
PMI 2024-11-19 01:59:51.000 2024-11-19 01:59:53.000 2024-11-27 01:59:51.703 D Full Virtual Device {960E26B9-BCB7-482C-BDAC-207548B83077}3 0 1 104222000001229700037 104222000001231400001 104222000001228000001 104222000001229700037 NULL NULL NULL Microsoft SQL Server AUTORITE NT\Système
PMI 2024-11-19 00:59:26.000 2024-11-19 00:59:37.000 2024-12-04 00:59:26.060 D Full Disk D:\SQL Backup\PMI\PMI_backup_2024_11_19_005925_9360289.bak 0 0 104222000001228000001 104222000001228300001 104219000001378500037 104222000001228000001 NULL NULL NULL Microsoft SQL Server sa
PMI 2024-11-18 01:59:47.000 2024-11-18 01:59:49.000 2024-11-26 01:59:46.977 D Full Virtual Device {230EA0F3-9D31-4279-A5DB-D1E74A9F800D}3 0 1 104219000001378500037 104219000001380200001 104219000001374100001 104219000001378500037 NULL NULL NULL Microsoft SQL Server AUTORITE NT\Système
PMI 2024-11-17 23:00:05.000 2024-11-17 23:00:05.000 2024-11-25 23:00:05.213 I Diff Disk D:\SQL Backup\PMI\PMI_backup_2024_11_17_230005_0981356.diff 0 0 104219000001377400001 104219000001377700001 104219000001374100001 104219000001377400001 104219000001374100001 NULL NULL Microsoft SQL Server sa
PMI 2024-11-17 22:00:07.000 2024-11-17 22:00:19.000 2024-11-25 22:00:07.307 D Full Disk D:\SQL Backup\PMI\PMI_backup_2024_11_17_220007_1834384.bak 0 0 104219000001374100001 104219000001374400001 104219000001366900037 104219000001374100001 NULL NULL NULL Microsoft SQL Server sa
PMI 2024-11-17 09:59:50.000 2024-11-17 09:59:53.000 2024-11-25 09:59:50.867 D Full Virtual Device {04A6F783-F33B-4558-8DCE-53D7FEB0CAEC}3 0 1 104219000001366900037 104219000001368600001 104219000001362500037 104219000001366900037 NULL NULL NULL Microsoft SQL Server AUTORITE NT\Système
PMI 2024-11-17 01:59:54.000 2024-11-17 01:59:56.000 2024-11-25 01:59:54.717 D Full Virtual Device {13E16352-8EC7-48B9-9FEF-B4C486907099}3 0 1 104219000001362500037 104219000001364200001 104219000001355000001 104219000001362500037 NULL NULL NULL Microsoft SQL Server AUTORITE NT\Système
PMI 2024-11-16 23:00:05.000 2024-11-16 23:00:06.000 2024-11-24 23:00:05.683 I Diff Disk D:\SQL Backup\PMI\PMI_backup_2024_11_16_230005_5608786.diff 0 0 104219000001361400001 104219000001361700001 104219000001355000001 104219000001361400001 104219000001355000001 NULL NULL Microsoft SQL Server sa
PMI 2024-11-16 15:45:35.000 2024-11-16 15:45:35.000 2024-11-24 15:45:35.063 I Diff Disk D:\SQL Backup\PMI\PMI_backup_2024_11_16_154535_0369182.diff 0 0 104219000001359000001 104219000001359300001 104219000001355000001 104219000001359000001 104219000001355000001 NULL NULL Microsoft SQL Server sa
PMI 2024-11-16 15:45:21.000 2024-11-16 15:45:22.000 2024-11-24 15:45:21.850 I Diff Disk D:\SQL Backup\PMI\PMI_backup_2024_11_16_154521_8283665.diff 0 0 104219000001358100001 104219000001358400001 104219000001355000001 104219000001358100001 104219000001355000001 NULL NULL Microsoft SQL Server sa
PMI 2024-11-16 15:44:55.000 2024-11-16 15:45:06.000 2024-11-24 15:44:55.180 D Full Disk D:\SQL Backup\PMI\PMI_backup_2024_11_16_154455_1502171.bak 0 0 104219000001355000001 104219000001355300001 104219000001346600001 104219000001355000001 NULL NULL NULL Microsoft SQL Server sa
PMI 2024-11-16 15:41:46.000 2024-11-16 15:41:58.000 2024-11-24 15:41:46.560 D Full Disk D:\SQL Backup\PMI\PMI_backup_2024_11_16_154146_5409243.bak 0 0 104219000001346600001 104219000001346900001 104219000001325800261 104219000001346600001 NULL NULL NULL Microsoft SQL Server sa
PMI 2024-11-16 01:59:50.000 2024-11-16 01:59:53.000 2024-11-24 01:59:50.890 D Full Virtual Device {404A5262-328C-46C9-B456-31D0B249A06D}3 0 1 104219000001325800261 104219000001336600001 104213000001527500272 104219000001325800261 NULL NULL NULL Microsoft SQL Server AUTORITE NT\Système
PMI 2024-11-15 01:59:56.000 2024-11-15 01:59:58.000 2024-11-23 01:59:56.130 D Full Virtual Device {B685428C-A7AE-4642-A17B-CC729BD16D77}3 0 1 104213000001527500272 104213000001538700001 104203000000360300144 104213000001527500272 NULL NULL NULL Microsoft SQL Server AUTORITE NT\Système
PMI 2024-11-14 01:59:52.000 2024-11-14 01:59:55.000 2024-11-22 01:59:52.267 D Full Virtual Device {BE641173-DEA0-400A-A31B-2658897D80B9}3 0 1 104203000000360300144 104203000000366400001 104129000000461200270 104203000000360300144 NULL NULL NULL Microsoft SQL Server AUTORITE NT\Système
PMI 2024-11-13 02:00:05.000 2024-11-13 02:00:08.000 2024-11-21 02:00:04.993 D Full Virtual Device {B7FE8CE1-83D0-4384-BBBC-B729A957527D}3 0 1 104129000000461200270 104129000000472300001 104122000002730300037 104129000000461200270 NULL NULL NULL Microsoft SQL Server AUTORITE NT\Système
Posso ver uma tarefa às 02:00:00... Acho que é syspolicy_purge_history
uma tarefa padrão do sistema SQL.
ATUALIZAÇÃO: Desativei esta tarefa e continua o mesmo problema.
Você tem uma ideia?
Seu comando para examinar as informações de backup poderia ser expandido por algumas colunas. Duas que vêm à mente são
is_snapshot
eis_copy_only
e então o aplicativo que está executando o backup:software_name
.Como você ainda não elaborou seus detalhes, esta é apenas uma recomendação geral para descobrir se você está possivelmente interferindo na solução de terceiros ou vice-versa. Você veria isso talvez na
software_name
coluna.Você pode ter uma solução de terceiros realizando alguns backups e restaurações de teste engraçados, então dê uma olhada na
msdb.dbo.restorehistory
tabela. Pode ser até mesmo outro DBA.Restaurar um banco de dados pode alterar o
database_backup_lsn
ou qualquer outro....lsn
documentado no histórico de backup. Isso pode, por sua vez, impedir que você execute backups diferenciais adicionais após uma restauração ter ocorrido.Recomendação: Após uma restauração de banco de dados, sempre execute um backup completo do banco de dados.
Após estudar a saída do seu histórico de backup para o banco de dados PMI, posso fazer uma suposição. Aqui está uma análise codificada por cores dos backups sendo realizados:
Por favor, pressione CTRL + clique na imagem para visualizá-la em uma nova aba
Como você pode ver no exemplo codificado pela cor azul, o Backup FULL tem um
first_lsn
(lsn = Número de Sequência de Log) de104219000001355000000
. Este é o lsn em que o banco de dados estava quando o backup FULL começou.Os backups DIFF subsequentes são todos baseados no
first_lsn
do backup FULL. Você pode ver isso emdatabase_backup_lsn
e nasdifferential_base_lsn
colunas.O exemplo codificado pela cor laranja é similar. Há um backup FULL que ocorre em
104219000001374000000
e este é odatabase_backp_lsn
edifferential_base_lsn
para o backup DIFF subsequente.SUPOSIÇÃO
Como você pode ver nos elementos codificados por cores rosa, eles meio que se destacam. Eles realizam um backup COMPLETO todos os dias às 2h (02:00). No entanto, esse backup COMPLETO não é um backup como o SQL Server faria, é um backup de snapshot. A E/S é congelada nos discos e a solução de terceiros realiza um snapshot dos discos.
Então, alguma solução de terceiros ou seu ambiente de virtualização está realizando um snapshot do servidor. Este snapshot é registrado no
msdb
histórico de backup do banco de dados como um backup COMPLETO. Isso ocorre porque eleSQL Server Writer Service
recebe uma solicitação do SO para congelar todas as E/S. Como o SQL Server está envolvido, ele marca este snapshot como um backup COMPLETO nomsdb
banco de dados.Mesmo sendo um snapshot, ele redefinirá as colunas
first_lsn
edatabase_backup_lsn
.Vejamos o exemplo rosa superior.
O Snapshot Backup em
2024-11-17 01:59:54.000
tem umfirst_lsn
de104219000001362000000
. Este é então odatabase_backup_lsn
para o segundo snapshot que é executado e para o backup COMPLETO que foi executado por você.Seu backup FULL não será quebrado, porque ele não precisa depender da presença do backup instantâneo FULL anterior. Ele apenas pega o que tem das páginas no arquivo *.mdf e faz backup disso junto com quaisquer transações confirmadas.
Olhando o histórico de backup, imagino que você esteja tendo problemas ao executar um backup DIFF após um SNAPSHOT.
Por que?
O backup instantâneo não pode ser usado para executar um backup DIFF adicional do banco de dados. Isso ocorre porque o snapshot não é um backup FULL verdadeiro (em termos de SQL Server). Ele é consistente e pode (na maioria dos casos) ser usado para colocar um servidor online novamente, mas não pode ser usado como base para restaurações adicionais (pense em restaurações DIFF e TLOG).
Um backup instantâneo voltará a ficar online e será recuperado. Você não pode parar no meio do caminho (WITH NO_RECOVERY) e então restaurar backups DIFF e/ou TLOG adicionais.
Soluções possíveis
Diga à sua solução de terceiros para adicionar a
COPY_ONLY
opção ao snapshot. Com essa opção, odatabase_backup_lsn
não é redefinido e sempre apontará para o último backup FULL que não era um backup snapshot. Os backups DIFF subsequentes funcionarão!Depois que a solução de terceiros executar um snapshot, faça com que seu software de backup execute um backup COMPLETO consistente do seu banco de dados.
Se você puder definir a opção 1. e estiver realizando backups reais do SQL Server com uma solução de backup, não há necessidade de realizar um backup COMPLETO após a solução de terceiros ter realizado um snapshot. Basta executar um backup DIFF que deve referenciar seu último Backup COMPLETO do SQL Server (
first_lsn
) e tudo estará bem.Informações adicionais sobre instantâneos
...com base no comentário: Depois de pensar sobre isso, tenho um snapshot de VM com Proxmox. Eu não sabia que snapshots de VM podiam registrar um backup no SQL Server. Como faço para contornar isso? Quero manter snapshots Proxmox agendados.
Você não pode parar o automatismo. Isso é explicado no artigo SQL Writer service (Microsoft Learn | SQL).
Mais abaixo no artigo você encontrará o propósito desta estrutura:
...que inclui seu Proxmox Snapshot.
A seguir você tem essas informações:
Referência: Serviço SQL Writer (Microsoft Learn | SQL)
Em essência, você não pode alterar como o SQL Writer Service auxilia na criação de snapshots e também no registro dos snapshots. É uma parte essencial de como snapshots consistentes são realizados. SE você desativasse o SQL Writer Service, você teria um snapshot Proxmox corrompido .
Uma pergunta semelhante foi feita em Uso de backup VSS de terceiros mais backup SQL nativo (DBA Stackexchange) e também foi respondida por mim.
Minha conclusão foi:
Mais informações sobre o VSS e o SQL Writer Service foram fornecidas por mim na minha resposta sobre Como posso fazer backup de um banco de dados SQL Server usando o Windows Server Backup? (Serverfault).