Sauvegarde à froid des bases systèmes SQL Server en PowerShell
Il peut être intéressant de disposer une sauvegarde à froid des bases systèmes de SQL Server, lorsqu’une de ces bases est corrompue et qu’il vous est impossible de relancer votre instance MSSQL. Jusqu’à présent, j’utilisais les commandes Windows pour effectuer cette opération. Nous disposons aujourd’hui du PowerShell.
Installation de la dernière version du module PowerShell SQL Server
A partir de l’éditeur Windows PowerShell ISE ou de l’interpréteur PowerShell, tapez la commande suivant pour bénéficier de l’usage du module PowerShell SQL Server :
Install-Module -Name SqlServer -RequiredVersion 21.1.18245 -AllowClobber
Le script de sauvegarde à froid des bases systèmes SQL Server
Les commentaires parlent d’eux-mêmes.
Clear-Host # Importation des modules SQL Server Import-Module SQLPS Import-Module SQLServer # Destination de la sauvegarde $dest='e:\sauve' # Requêtes pour disposer de la liste des chemins complets des bases système $SQL=' SELECT physical_name FROM master.sys.database_files UNION SELECT physical_name FROM msdb.sys.database_files UNION SELECT physical_name FROM model.sys.database_files '; $Tempdb=' SELECT physical_name FROM tempdb.sys.database_files '; # Exécution des requêtes Invoke-Sqlcmd -ServerInstance 'PAULINE' -Query $Tempdb|export-csv -Path "$dest\tempdb.csv" $rows=Invoke-Sqlcmd -ServerInstance 'PAULINE' -Query $SQL # Arrêt des services Agent et Instance SQL Server Stop-Service -Name SQLSERVERAGENT -Force Stop-Service -Name MSSQLSERVER -Force # Sauvegarde des chemins des fichiers des bases système $rows|export-csv -Path "$dest\bdsys.csv" # Copie des fichiers à froid foreach($row in $rows) { $src=$row.physical_name copy-item -Path "$src" -destination "$dest" -Force } # Redémarrage des services arrêtés ci-dessus Start-Service -Name MSSQLSERVER Start-Service -Name SQLSERVERAGENT
Le script de restauration
Il faut savoir restaurer les fichiers après les avoir sauvegardés :
Clear-Host Import-Module SQLPS Import-Module SQLServer # Arrête des services Agent et Instance SQL Server Stop-Service -Name SQLSERVERAGENT -Force Stop-Service -Name MSSQLSERVER -Force # Chemin du répertoire des fichiers de sauvegarde $dest='e:\sauve' # Copie des fichiers vers les répertoires d'origine $rows=import-csv -Path "$dest\bdsys.csv" foreach($row in $rows) { $src=$row.physical_name $debut=$src.LastIndexOfAny('\') $file=$src.substring($debut+1,$src.length-$debut-1) copy-item -Path "$dest\$file" -destination "$src" -Force } # Redémarrage des services Start-Service -Name MSSQLSERVER Start-Service -Name SQLSERVERAGENT