web-dev-qa-db-fra.com

Connexion à la transaction manquante en chaîne, possible de sauter

Nous avons eu l'un de nos clients des serveurs SQL s'écrase et avons besoin de le restaurer au plus récent moment possible. Nous avons une sauvegarde complète des journaux de lundi et des transactions qui fonctionnent toutes les heures jusqu'à ce que ce matin à 02h01, mais nous manquons un journal de transaction d'une base de données afin que nous ne puissions donc pas restaurer cette base de données pour mercredi.

Est-il possible de sauver un journal de transaction et de continuer à récupérer la base de données à la date la plus récente avec les journaux restants?

EDIT: Il n'y avait aucune modification à la base de données effectuée au moment où nous manquons, le journal des transactions n'aurait donc rien de

4
Scott H

Est-il possible de sauver un journal de transaction et de continuer à récupérer la base de données à la date la plus récente avec les journaux restants? [~ # ~] Edit [~ # ~ ~]: Il n'y avait aucune modification de la base de données effectuée au moment où nous manquons, le journal de transaction n'aurait donc rien de pièce

Oui, seulement s'il y a Pas d'espace dans les numéros de séquence de journal des sauvegardes de journal.

Vous trouverez ci-dessous vous expliquer plus en détail.

create database logbackup_test
go

-- take a full backup, else the database will be in pseudo-full recovery
backup database logbackup_test to disk = 'C:\sandbox\logbackup_test_full.bak'
with compression, stats =10

use logbackup_test
go
CREATE TABLE dbo.Table_1
       (
       Name varchar(50) NULL
       )  ON [PRIMARY]
GO

--Insert a 1st Row in TEST table
Insert into dbo.Table_1 values ('Kin-1')
GO
--Take 1st T-LOG backup.
BACKUP LOG logbackup_test TO  DISK = N'C:\sandbox\logbackup_test-TLog1.trn' with stats =10
go

--Insert a 2nd Row in TEST table
Insert into dbo.Table_1 values ('Kin-2')
GO

--Take 2nd T-LOG backup.
BACKUP LOG logbackup_test TO  DISK = N'C:\sandbox\logbackup_test-TLog2.trn' with stats =10
go

--Insert a 3rd Row in TEST table
Insert into dbo.Table_1 values ('Kin-3')
GO

--Take 3rd T-LOG backup
BACKUP LOG logbackup_test TO  DISK = N'C:\sandbox\logbackup_test-TLog3.trn' with stats =10
go

-

--Take 4th T-LOG backup -- NOTE That there is no activity .. no transactions (NO INSERTS DONE) !!!
BACKUP LOG logbackup_test TO  DISK = N'C:\sandbox\logbackup_test-TLog4.trn' with stats =10
go
/*Processed 0 pages for database 'logbackup_test', file 'logbackup_test_log' on file 1.
100 percent processed.
BACKUP LOG successfully processed 0 pages in 0.072 seconds (0.000 MB/sec).
*/

-

--Insert a 4th Row in TEST table
Insert into dbo.Table_1 values ('Kin-4')
GO
--Take 5th T-LOG backup
BACKUP LOG logbackup_test TO  DISK = N'C:\sandbox\logbackup_test-TLog5.trn' with stats =10
go

Vérifiez les données maintenant:

enter image description here

Vous trouverez ci-dessous vous expliquer pourquoi vous pouvez ignorer la sauvegarde du journal. Il repose sur LSN (numéro de séquence de journal) . Il dépasse la portée de cette réponse pour entrer en détail sur la LSN, mais le lien vous donnera une bonne idée de ce que c'est.

RESTORE HEADERONLY vous dira que first LSN et Last LSN Comme ci-dessous:

enter image description here

--- Maintenant, commencez la restauration

-- restore a full backup
restore database logbackup_test
from disk = N'C:\sandbox\logbackup_test_full.bak'
with norecovery, replace, stats =10
go

-- restore consequent log backups !! - 1,2,3 and 5. WE ARE SKIPPING TLog4 !!
restore log logbackup_test
from disk = N'C:\sandbox\logbackup_test-TLog1.trn'
with norecovery, stats =10
go
restore log logbackup_test
from disk = N'C:\sandbox\logbackup_test-TLog2.trn'
with norecovery, stats =10
go
restore log logbackup_test
from disk = N'C:\sandbox\logbackup_test-TLog3.trn'
with norecovery, stats =10
go
-- NOTE -- I am skipping Log4 as it did not have any transaction .....
restore log logbackup_test
from disk = N'C:\sandbox\logbackup_test-TLog5.trn'
with recovery, stats =10 

Vous trouverez ci-dessous le résultat .. Nous sommes en mesure de restaurer la sauvegarde du journal 1,2,3 et 5. Nous avons sauté TLog4 alors que le LastLSN de TLog3 était le premierLSN de TLog5.] ==

enter image description here

4
Kin Shah

Non, même si cela est possible, les données résultantes n'auraient pas de sens si un journal de transaction a été ignoré.

0
Daniel B