none
Backup Database avec Agent MS SQL RRS feed

  • Question

  • Bonjour à tous,

    Je débute sur SQL Server Management Studio et possède la version MSSQL 2014.

    J'aimerai planifier un backup complet de chacune de mes bases de données ( systèmes et données ) dans un fichier séparé et automatiser le backup de ses bases pour obtenir un backup quotidien, qui viendra à chaque exécution créer un fichier filename$datedujour.bak avec $filename qui correspondrait au nom de ma base.

    Pour se faire, j'ai créer un nouveau travail sous Agent SQL Server : 

    1 - Dans ce travail, j'ai ajouté une étape de type Transact-SQL, pointant sur la base de données master.

    Voilà ma commande Transact-SQL pour la base système 'Master' que j'ai renseigné : 

    BACKUP DATABASE [master] TO  DISK = N'C:\TestBCK\Bak\MasterBCK\master.bak' WITH NOFORMAT, NOINIT,  NAME = N'master-Complète Base de données Sauvegarde', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    GO

    Cette commande fait bien le backup complet de la database master sur mon disque. Seulement si je relance mon travail, il continue d'écrire dans le même fichier, ce que je ne souhaite pas car j'aimerai un fichier unique par sauvegarde.

    Alors j'ai tenté d'ajouter une étape de type " PowerShell " avant mon étape " Transact-SQL " comme suit : 

    $SourceFilePath = "C:\TestBCK\Bak\MasterBCK\master.bak" #Chemin complet du fichier
    $DateNow = Get-Date -Format "yyyyMMdd" #Date du jour

    $FileName = [io.path]::GetFileNameWithoutExtension($SourceFilePath) #Récupère le nom du fichier uniquement
    $FileExtension = [io.path]::GetExtension($SourceFilePath) #Récupère l'extension du fichier uniquement

    Rename-Item -Path $SourceFilePath -newname $FileName$DateNow$FileExtension #Renommage du fichier

    Malheureusement cela ne fonctionne pas.. je n'ai pas d'erreur lors de l’exécution de mon job complet contenant mes 2 étapes, mais le fichier n'est pas renommé et l’exécution du backup se fait toujours dans ce même fichier.

    Je ne sais pas si ma logique et bonne ou s'il existe d'autres méthodes, plus simple et efficace pour arriver à mes fins.

    Merci d'avance pour les retours que vous pourrez m'apporter et passer une excellente journée à tous.

    Cdt, 

    Killian.


    vendredi 26 avril 2019 10:12

Toutes les réponses

  • Bonjour

    Voila un lien qui peut etre t'aidera

    https://docs.microsoft.com/fr-fr/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server?view=sql-server-2017

    Limitations et restrictions

    • L'instruction BACKUP n'est pas autorisée dans une transaction explicite ou implicite.

    • Les sauvegardes créées avec une version plus récente de SQL Server ne peuvent pas être restaurées dans les versions antérieures de SQL Server.

    • Pour obtenir une vue d’ensemble et approfondir vos connaissances des concepts de sauvegarde et des tâches, consultez Vue d’ensemble de la sauvegarde (SQL Server) avant de continuer.

    Recommandations

    • À mesure que la taille d’une base de données augmente, les sauvegardes complètes de base de données nécessitent davantage de temps et d’espace de stockage. Pour les bases de données volumineuses, songez à compléter les sauvegardes complètes avec une série de sauvegardes différentielles de base de données. Pour plus d’informations, consultez SQL Server Backup to URL.

    • Vous pouvez estimer la taille d’une sauvegarde complète de base de données en utilisant la procédure stockée système sp_spaceused .

    • Par défaut, chaque opération de sauvegarde réussie ajoute une entrée au journal des erreurs SQL Server et au journal des événements système. Si vous effectuez régulièrement une sauvegarde, ces messages de réussite s’accumuleront rapidement et vos journaux d’erreurs deviendront énormes. Cela peut rendre la recherche d’autres messages difficile. Dans ces cas-là, vous pouvez supprimer ces entrées de journaux de sauvegarde en utilisant l’indicateur de trace 3226 si aucun de vos scripts ne dépend de ces entrées. Pour plus d’informations, consultez Indicateurs de trace (Transact-SQL).


    "Marquer comme réponse" les réponses qui ont résolu votre problème


    vendredi 26 avril 2019 17:29
  • Bonjour

    Pourquoi tout simplement ne pas :

     - utiliser un plan de maintenance SQL Server
     - utiliser les scripts de OLA HALLENGREN

    qui font ce genre de chose tout a fait convenablement.

    Si néanmoins vous souhaitez poursuivre en PowerShell, pourquoi ne pas directement appeller le cmdlet backup-sqldatabase

    PS C:\> Set-Location "SQLSERVER:\SQL\Computer\Instance\Databases" PS SQLSERVER:\SQL\Computer\Instance\Databases> foreach ($database in (Get-ChildItem)) { $dbName = $database.Name Backup-SqlDatabase -Database $dbName -BackupFile "\\mainserver\databasebackup\$dbName.bak" }

    Ou bien en vous appuyant sur les commandes de la biblioth_que dbatools.io ?

    Backup-Dbadatabase -SqlInstance localhost  -BackupDirectory c:\temp\backup -Type Full

    cdlt
    Christophe


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    mercredi 22 mai 2019 12:41