Bonjour,
J'aimerais automatiser un restore sur une BD test à partir de mon dernier backup de ma BD prod. Une partie de mon problème est que le nom du fichier du backup change à tous les nuits à cause de la date.
Merci
Bonjour,
J'aimerais automatiser un restore sur une BD test à partir de mon dernier backup de ma BD prod. Une partie de mon problème est que le nom du fichier du backup change à tous les nuits à cause de la date.
Merci
Si c'est sur le même serveur (même instance) alors il suffit de lire les tables de msdb pour savoir quelle est cette dernière sauvegarde et quel est son fichier.
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Oui c'est sur la même instance et serveur. Est-ce que tu as plus d'informations?
Tu trouveras la liste des sauvegardes avec cette requête :
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SELECT @@SERVERNAME AS SERVER_NAME, BS.database_name, BS.backup_start_date, BS.backup_finish_date, BS.expiration_date, CASE BS.type WHEN 'D' THEN 'Database' WHEN 'L' THEN 'Log' END AS backup_type, BS.backup_size, MF.logical_device_name, MF.physical_device_name, BS.name AS backupset_name, BS.description FROM msdb.dbo.backupmediafamily AS MF INNER JOIN msdb.dbo.backupset AS BS ON MF.media_set_id = BS.media_set_id
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Hello,
Tu as les dbatools qui permet de simplifier le travail et notamment la commande Restore-DbaDatabase.
La commande va soit chercher é reconstituer la chaîne des backups en fonction des fichiers scannés sur le chemin spécifié, soit il fait confiance à l'historique dans msdb via l'option -TrustDbBackupHistory
++
La commande ressemblerait à quoi si je veux prendre le dernier backup dans un dossier local x et l'importer sur une BD qui n'est pas celle du backup? C'est sûr le serveur de production donc je ne veux vraiment pas me tromper! Notre serveur de dev n'est pas dans la même version pour l'instant donc je ne peux pas tester.
Pour connaître les éléments nécessaire et prendre la dernière sauvegarde FULL d'une base de nom "Ma_base", voici la requête à faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 RESTORE nom_de_la_nouvelle_base FROM DISK = 'Répertoire\Fichier_de_sauvegarde' WITH MOVE 'nom_fichier_logique1' TO 'Emplacement_disque_fichier_physique\nom_Fichier_physique1', MOVE 'nom_fichier_logique2' TO 'Emplacement_disque_fichier_physique\nom_Fichier_physique2', MOVE ...
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT TOP 1 BS.database_name, MF.physical_device_name AS emplacement_fichier_sauvegarde, BF.logical_name, BF.logical_name + '.' + PARSENAME(physical_name, 1) AS physical_name FROM msdb.dbo.backupmediafamily AS MF INNER JOIN msdb.dbo.backupset AS BS ON MF.media_set_id = BS.media_set_id INNER JOIN msdb.dbo.backupfile AS BF ON BS.backup_set_id = BF.backup_set_id WHERE BS.type = 'D' AND BS.database_name = 'master' ORDER BY BS.backup_start_date DESC
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
et avec dbatools:
Comme ca tu as les choix de l'outil
Code : Sélectionner tout - Visualiser dans une fenêtre à part Restore-DbaDatabase -SqlInstance 'nom_instance' -Path 'Répertoire\Fichier_de_sauvegarde' -DestinationFilePrefix 'nom_de_la_nouvelle_base_' -DatabaseName 'nom_de_la_nouvelle_base' `
++
Est-ce que ça fonctionne si la DB existe déjà? Ce que je dois faire, c'est mettre à jour une DB test à partir des backups de la prod.
Oui l'idées des 2 commandes proposés est de créer une nouvelle base de données à partir d'un backup d'une base de données existante sur ton serveur.
++
Je ne veux pas créer une nouvelle BD mais écraser une existante. De plus, je ne peux pas un nom de fichier car le nom du fichier change à chaque nuit.
Ok clarifions un peu le scénario. De ce que je comprends:
1) DB_PROD -> Backup -> Restore DB_TEST
2) DB_TEST existe déjà et tu veux remplacer DB_TEST
Si nous sommes alignés sur le besoin alors les commandes précédentes fonctionnent:
Dans cette commande PowerShell / dbatools, tu n'as pas besoin de connaitre le nom de ton backup (qui change tout le temps). Par défaut, cette commande te restaure les derniers backups
Code : Sélectionner tout - Visualiser dans une fenêtre à part Restore-DbaDatabase -SqlInstance 'nom_instance' -Path 'Répertoire_des_sauvegardes_DB_PROD' -DestinationFilePrefix 'DB_TEST_' -DatabaseName 'DB_TEST' -WithReplace
Avec les scripts fournis par SQLPro, il te faut d'abord utiliser celui-ci pour chercher le dernier backup (que tu peux mettre dans une table temporaire / variable de table)
... Et ensuite utiliser le script SQL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT TOP 1 BS.database_name, MF.physical_device_name AS emplacement_fichier_sauvegarde, BF.logical_name, BF.logical_name + '.' + PARSENAME(physical_name, 1) AS physical_name FROM msdb.dbo.backupmediafamily AS MF INNER JOIN msdb.dbo.backupset AS BS ON MF.media_set_id = BS.media_set_id INNER JOIN msdb.dbo.backupfile AS BF ON BS.backup_set_id = BF.backup_set_id WHERE BS.type = 'D' AND BS.database_name = 'master' ORDER BY BS.backup_start_date DESC
Ca demande un peu plus de travail de codage mais ca fonctionne aussi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 RESTORE DB_TEST FROM DISK = 'Répertoire_des_sauvegardes_DB_PROD\Fichier_de_sauvegarde' WITH REPLACE, MOVE 'nom_fichier_logique1' TO 'Emplacement_disque_fichier_physique\nom_Fichier_physique1', MOVE 'nom_fichier_logique2' TO 'Emplacement_disque_fichier_physique\nom_Fichier_physique2', MOVE ...
++
Je m'y approche!! Il me manque seulement comment installer le DBAtools sur un Windows 2008 R2, mais j'ai réussi sur mon Windows 2019!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager