Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de restauration de base de donnée via un script SQL

2 réponses
Avatar
Nic0
Bonjour à tous,

J'ai actuellement un problème de restauration de backup d'une base de
données SQL Server via un script SQL.


Je dois créer une procédure de restauration automatique d'une base de
données qui a les cédules de backup suivantes :

Backup complet : 1 fois par semaine

Backup incrémental : 1 fois par jour

Backup du journal : 1 fois aux 10 minutes



Le tout effectué via des jobs dans SQL Server.



Voilà le problème auquel je fais face :

Lorsque je procède à une restauration par script SQL, à l'aide de la
commande RESTORE, cette commande ne restore que le plus ancien backup du
fichier contenant les backups des journaux. Le même comportement est observé
pour les backups incrémentaux.




Ex : Pour un fichier contenant des backups incrémentaux pris à 2 :00 ; 2 :15
; 2 :30 ; 2 :45 ; 3 :00 ; Lors de la restauration via l'utilisation de la
commande "RESTORE DATABASE", SEUL la sauvegarde de 2 :00 sera restauré.




Cependant, lorsque je vérifie le contenu des fichiers de backups que je
souhaite restaurer à l'aide des outils de Enterprise Manager, je constate
que les fichiers de backups contiennent TOUT les backups ayant été pris (les
5 si on se fie à l'exemple précédent).



De plus, lorsque je restaure la base de données via l'option "Restore
Database" de Enterprise manager :

-TOUT mes backups de journaux et incrémentaux sont disponibles

-TOUT ces backups sont restaurés ; pas seulement le plus ancien, comme c'est
le cas lorsque j'utilise la commande "RESTORE" par SQL.





Voici les syntaxes de "BACKUP" utilisées dans les jobs de prise de backup

1 : BACKUP DATABASE SUPERVISION TO Supervision_BackupComplet WITH
INIT, NOSKIP

2: BACKUP DATABASE SUPERVISION TO Supervision_BackupIncremental WITH
DIFFERENTIAL, NOINIT, SKIP

3: BACKUP LOG SUPERVISION TO Supervision_BackupJournal WITH NOINIT,
SKIP





Voici les syntaxes de "RESTORE" pour la restauration

1: RESTORE DATABASE Supervision FROM Supervision_BackupComplet WITH
NORECOVERY

2: RESTORE DATABASE Supervision FROM Supervision_BackupIncremental
WITH NORECOVERY

3: RESTORE LOG Supervision FROM Supervision_BackupJournal WITH
RECOVERY



On m'a mentionné que l'utilisation de l'option NO_TRUNCATE ferait en sorte
que les fichiers de log deviendraient trop volumineux sur une base de
données ayant à traiter plusieurs transactions à la minute et devrait
idéalement être évitée.



Y a-t-il une option à spécifier à la commande RESTORE pour que celle-ci
procède à la restauration de TOUT les backups contenus dans un fichier de
sauvegarde et si oui, quelle est-elle ? Est-ce que c'est la façon dont j'effectue
ma prise de backup qui cause ce problème ?



Merci à l'avance



Cordialement,



Nico

2 réponses

Avatar
Fred BROUARD
Nic0 a écrit :
Bonjour à tous,

J'ai actuellement un problème de restauration de backup d'une base de
données SQL Server via un script SQL.


Je dois créer une procédure de restauration automatique d'une base de
données qui a les cédules de backup suivantes :

Backup complet : 1 fois par semaine

Backup incrémental : 1 fois par jour

Backup du journal : 1 fois aux 10 minutes



Ce genre de chose ne sert pas à grand chose dans la réalité car vous ne
pouvez prendre en compte toutes les situations de restauration telles
que l'erreur humaine (RESTORE LOG ... WITh STOPAT (time/MARK)) ou encore
la restauration sur une autre base, un autre serveur....




Le tout effectué via des jobs dans SQL Server.



Voilà le problème auquel je fais face :

Lorsque je procède à une restauration par script SQL, à l'aide de la
commande RESTORE, cette commande ne restore que le plus ancien backup du
fichier contenant les backups des journaux. Le même comportement est observé
pour les backups incrémentaux.



La sauvegarde incrémentale n'existe pas. En revanche il y a une
sauvegarde différentielle !





Ex : Pour un fichier contenant des backups incrémentaux pris à 2 :00 ; 2 :15
; 2 :30 ; 2 :45 ; 3 :00 ; Lors de la restauration via l'utilisation de la
commande "RESTORE DATABASE", SEUL la sauvegarde de 2 :00 sera restauré.



Normal puisque le notion d'incrémentale n'existe pas.

Si vous vouliez reqtaurer à la dernière sauvegarde il suffit de faire :
Dernière complet + denière différentielle + tous journaux de transaction
depuis la dernière différentielle

D'ou votre erreur !






Cependant, lorsque je vérifie le contenu des fichiers de backups que je
souhaite restaurer à l'aide des outils de Enterprise Manager, je constate
que les fichiers de backups contiennent TOUT les backups ayant été pris (les
5 si on se fie à l'exemple précédent).



De plus, lorsque je restaure la base de données via l'option "Restore
Database" de Enterprise manager :

-TOUT mes backups de journaux et incrémentaux sont disponibles

-TOUT ces backups sont restaurés ; pas seulement le plus ancien, comme c'est
le cas lorsque j'utilise la commande "RESTORE" par SQL.





Voici les syntaxes de "BACKUP" utilisées dans les jobs de prise de backup

1 : BACKUP DATABASE SUPERVISION TO Supervision_BackupComplet WITH
INIT, NOSKIP

2: BACKUP DATABASE SUPERVISION TO Supervision_BackupIncremental WITH
DIFFERENTIAL, NOINIT, SKIP

3: BACKUP LOG SUPERVISION TO Supervision_BackupJournal WITH NOINIT,
SKIP





Voici les syntaxes de "RESTORE" pour la restauration

1: RESTORE DATABASE Supervision FROM Supervision_BackupComplet WITH
NORECOVERY

2: RESTORE DATABASE Supervision FROM Supervision_BackupIncremental
WITH NORECOVERY

3: RESTORE LOG Supervision FROM Supervision_BackupJournal WITH
RECOVERY



On m'a mentionné que l'utilisation de l'option NO_TRUNCATE ferait en sorte
que les fichiers de log deviendraient trop volumineux sur une base de
données ayant à traiter plusieurs transactions à la minute et devrait
idéalement être évitée.



Y a-t-il une option à spécifier à la commande RESTORE pour que celle-ci
procède à la restauration de TOUT les backups contenus dans un fichier de
sauvegarde et si oui, quelle est-elle ? Est-ce que c'est la façon dont j'effectue
ma prise de backup qui cause ce problème ?



Merci à l'avance



Cordialement,



Nico









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Med Bouchenafa
C'est le comportement normal d'un BACKUP
Dans ton cas, Il faut ne pas oublier de rajouter l'option NORECOVERY pour
que tu puisses restaurer tes backup differentiels et tes log backups
Un peu comme ceci

--Full Backup
RESTORE DATABASE
FROM ...
WITH NORECOVERY

--Dernier Backup Differentiel
RESTORE DATABASE
FROM ...
WITH NORECOVERY

--Tes Log Backups
RESTORE LOG
FROM ...
WITH NORECOVERY

--Ton dernier Log Backups
RESTORE LOG
FROM ...
WITH RECOVERY

Tout le process est normalement bien documenté dans l'Aide En Ligne
--
Bien cordialement
Med Bouchenafa

"Nic0" wrote in message
news:8O52h.125120$
Bonjour à tous,

J'ai actuellement un problème de restauration de backup d'une base de
données SQL Server via un script SQL.


Je dois créer une procédure de restauration automatique d'une base de
données qui a les cédules de backup suivantes :

Backup complet : 1 fois par semaine

Backup incrémental : 1 fois par jour

Backup du journal : 1 fois aux 10 minutes



Le tout effectué via des jobs dans SQL Server.



Voilà le problème auquel je fais face :

Lorsque je procède à une restauration par script SQL, à l'aide de la
commande RESTORE, cette commande ne restore que le plus ancien backup du
fichier contenant les backups des journaux. Le même comportement est
observé pour les backups incrémentaux.




Ex : Pour un fichier contenant des backups incrémentaux pris à 2 :00 ; 2
:15 ; 2 :30 ; 2 :45 ; 3 :00 ; Lors de la restauration via l'utilisation
de la commande "RESTORE DATABASE", SEUL la sauvegarde de 2 :00 sera
restauré.




Cependant, lorsque je vérifie le contenu des fichiers de backups que je
souhaite restaurer à l'aide des outils de Enterprise Manager, je constate
que les fichiers de backups contiennent TOUT les backups ayant été pris
(les 5 si on se fie à l'exemple précédent).



De plus, lorsque je restaure la base de données via l'option "Restore
Database" de Enterprise manager :

-TOUT mes backups de journaux et incrémentaux sont disponibles

-TOUT ces backups sont restaurés ; pas seulement le plus ancien, comme
c'est le cas lorsque j'utilise la commande "RESTORE" par SQL.





Voici les syntaxes de "BACKUP" utilisées dans les jobs de prise de backup

1 : BACKUP DATABASE SUPERVISION TO Supervision_BackupComplet WITH
INIT, NOSKIP

2: BACKUP DATABASE SUPERVISION TO Supervision_BackupIncremental
WITH DIFFERENTIAL, NOINIT, SKIP

3: BACKUP LOG SUPERVISION TO Supervision_BackupJournal WITH
NOINIT, SKIP





Voici les syntaxes de "RESTORE" pour la restauration

1: RESTORE DATABASE Supervision FROM Supervision_BackupComplet
WITH NORECOVERY

2: RESTORE DATABASE Supervision FROM Supervision_BackupIncremental
WITH NORECOVERY

3: RESTORE LOG Supervision FROM Supervision_BackupJournal WITH
RECOVERY



On m'a mentionné que l'utilisation de l'option NO_TRUNCATE ferait en sorte
que les fichiers de log deviendraient trop volumineux sur une base de
données ayant à traiter plusieurs transactions à la minute et devrait
idéalement être évitée.



Y a-t-il une option à spécifier à la commande RESTORE pour que celle-ci
procède à la restauration de TOUT les backups contenus dans un fichier de
sauvegarde et si oui, quelle est-elle ? Est-ce que c'est la façon dont
j'effectue ma prise de backup qui cause ce problème ?



Merci à l'avance



Cordialement,



Nico