J'ai une situation qui n'est pas facile à comprendre, et j'ai pensé demander à ce forum si d'autres pouvaient avoir des suggestions.
J'exécute SQL Server 2008 R2 Standard SP3 sur Windows Server 2008R2 Enterprise.
Une base de données avait besoin d'un peu de maintenance et, après coup, j'avais besoin de restaurer sur un autre serveur. J'ai une sauvegarde complète de la base de données effectuée avec COPY_ONLY plus un ensemble de 4 sauvegardes tlog.
- avant de commencer, créez tlogbackup1
- passer du
FULL
auBULK_LOGGED
modèle de récupération - ajouter un nouveau groupe de fichiers
- ajouter un fichier à newfilegroup
- définir newfilegroup comme valeur par défaut
- sélectionner dans la table (sur newfilegroup)
- déposer la table d'origine
- supprimer le fichier d'origine
- supprimer le groupe de fichiers d'origine
- changer le nom de la nouvelle table pour qu'elle corresponde à la table d'origine
- changer le nom de fichier de newfilegroup pour correspondre au groupe de fichiers d'origine
- changer le nom de fichier dans le catalogue pour correspondre au nom de fichier d'origine
- changer le nom du fichier au niveau du système d'exploitation pour correspondre au nom du fichier d'origine
- définir le groupe de fichiers par défaut comme l'original
- mettre db en ligne
- passer du
BULK_LOGGED
auFULL
modèle de récupération - Une fois toutes les étapes terminées, créez tlogbackup2
La restauration de toutes les sauvegardes doit utiliser WITH MOVE, en raison des modifications de la lettre de lecteur sur le serveur de restauration.
Étapes de récupération:
RESTORE database SomeDB FROM DISK = 'D:\REPRO\SomeDB.bak'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
RESTORE LOG SomeDB FROM DISK = 'D:\REPRO\tlogbackup1.trn'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
RESTORE LOG SomeDB FROM DISK = 'D:\REPRO\tlogbackup2.trn'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
La restauration finale du tlog atteint 100%, puis échoue avec l'erreur 3456:
368 pages traitées pour la base de données 'SomeDB', fichier 'SystemData' sur le fichier 1.
7656520 pages traitées pour la base de données 'SomeDB', fichier 'SystemDataPDS' sur le fichier 1.
172430 pages traitées pour la base de données 'SomeDB', fichier 'SystemData_log' sur le fichier 1.
Msg 3456, niveau 16, état 1, ligne 1
Impossible de refaire l'enregistrement du journal (210388: 123648: 232), pour l'ID de transaction (0: 1016710921), à la page (4: 8088), base de données 'SomeDB' (ID de base de données 6) . Page: LSN = (0: 0: 1), tapez = 11. Journal: OpCode = 4, contexte 11, PrevPageLSN: (210388: 122007: 1). Restaurez à partir d'une sauvegarde de la base de données ou réparez la base de données. Msg 3013, niveau 16, état 1, ligne 1 RESTORE LOG se termine anormalement.
Juste pour vérifier que la sauvegarde complète de la base de données était correcte, je l'ai restaurée CHECKDB
et il n'y a eu aucune erreur.
Tous les commentaires sont les bienvenus.
Merci d'avance,
Ned Otter