Sauvegarde à froid des bases systèmes SQL Server en PowerShell

Sauvegarde à froid des bases systèmes SQL Server en PowerShellIl 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
 

MSSQL /