Sauvegarder plusieurs bases de données dans le service Stockage Blob Azure - PowerShellBack up Multiple Databases to Azure Blob Storage - PowerShell

Cette rubrique s’applique à : OuiSQL Serveraucunbase de données SQL AzureaucunAzure SQL Data Warehouse aucun Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Cette rubrique fournit des exemples de script pouvant être utilisés pour automatiser les sauvegardes dans le service Stockage Blob Microsoft Azure à l'aide d'applets de commande PowerShell.This topic provides sample scripts that can be used to automate backups to Windows Azure Blob storage service using PowerShell cmdlets.

Présentation des applets de commande PowerShell pour la sauvegarde et la restaurationOverview of PowerShell cmdlets for Backup and Restore

Backup-SqlDatabase et Restore-SqlDatabase sont les deux principales applets de commande disponibles pour effectuer des opérations de sauvegarde et de restauration.The Backup-SqlDatabase and Restore-SqlDatabase are the two main cmdlets available to do backup and restore operations. En outre, d'autres applets de commande peuvent être nécessaires pour automatiser les sauvegardes dans le service de stockage d'objets blob Windows Azure, comme l'ensemble d'applets de commande SqlCredential . Voici une liste des applets de commande PowerShell disponibles dans SQL Server 2017SQL Server 2017 , qui sont utilisées dans les opérations de sauvegarde et de restauration :In addition, there are other cmdlets that may be required to automate backups to Windows Azure Blob storage like the set of SqlCredential cmdlets Following is a list of PowerShell cmdlets available in SQL Server 2017SQL Server 2017 that are used in backup and restore operations:

Backup-SqlDatabaseBackup-SqlDatabase
Cette applet de commande permet de créer une sauvegarde SQL ServerSQL Server .This cmdlet is used to create a SQL ServerSQL Server Backup.

Restore-SqlDatabaseRestore-SqlDatabase
Utilisée pour restaurer une base de données.Used to restore a database.

New-SqlCredentialNew-SqlCredential
Cette applet de commande permet de créer des informations d'identification SQL à utiliser pour la sauvegarde SQL Server dans le stockage Windows Azure.This cmdlet is used to create a SQL Credential to use for SQL Server Backup to Windows Azure Storage. Pour plus d’informations sur les informations d’identification et leur utilisation dans Sauvegarde et restauration SQL Server, consultez Sauvegarde et restauration SQL Server avec le service de stockage d’objets blob Microsoft Azure.For more information on credentials and their use in SQL Server Backup and Restore, see SQL Server Backup and Restore with Microsoft Azure Blob Storage Service.

Get-SqlCredentialGet-SqlCredential
Cette applet de commande est utilisée pour récupérer l'objet contenant les informations d'identification et ses propriétés.This cmdlet is used to retrieve the Credential object and its properties.

Remove-SqlCredentialRemove-SqlCredential
Supprime un objet contenant les informations d'identification SQLDelete a SQL Credential object

Set-SqlCredentialSet-SqlCredential
Cette applet de commande est utilisée pour modifier ou définir les propriétés de l'objet contenant les informations d'identification SQL.This cmdlet is used to change or set the properties of the SQL Credential Object.

Conseil

Les applets de commande Credential sont utilisées dans les scénarios de sauvegarde et de restauration dans le stockage d'objets blob Windows Azure.The Credential cmdlets are used in Backup and Restore to Windows Azure Blob storage scenarios.

PowerShell pour des opérations de sauvegarde de plusieurs bases de données, sur plusieurs instancesPowerShell for Multi-Database, Multi-Instance Backup Operations

Les sections suivantes contiennent des scripts pour différentes opérations, notamment créer des informations d'identification SQL sur plusieurs instances de SQL Server, sauvegarder toutes les bases de données utilisateur dans une instance de SQL Server, etc.The following sections include scripts for various operations like creating a SQL Credential on multiple instance of SQL Server, backing up all user databases in an instance of SQL Server, and such. Utilisez ces scripts pour automatiser ou planifier des opérations de sauvegarde en fonction des spécifications de votre environnement.You can use these scripts to automate or schedule backup operations according to the requirements of your environment. Les scripts fournis ici sont des exemples, et peuvent être modifiés ou étendus pour votre environnement.The scripts provided here are examples, and may be modified or extended for your environment.

Voici quelques observations concernant les exemples de script :The following are considerations for the sample scripts:

  1. Parcourir les chemins d'accès PowerShell SQL Server : Windows PowerShell implémente des applets de commande pour parcourir la structure de chemin d'accès qui représente la hiérarchie des objets pris en charge par un fournisseur PowerShell.Navigating SQL Server PowerShell paths: Windows PowerShell implements cmdlets to navigate the path structure that represents the hierarchy of objects supported by a PowerShell provider. Une fois que vous avez accédé à un nœud dans le chemin d'accès, vous pouvez utiliser d'autres applets de commande pour exécuter des opérations de base sur l'objet actif.When you have navigated to a node in the path, you can use other cmdlets to perform basic operations on the current object.

  2. Applet de commandeGet-ChildItem : les informations retournées par Get-ChildItem dépendent de l’emplacement dans un chemin PowerShell SQL Server.Get-ChildItem cmdlet: The information returned by the Get-ChildItem depends on the location in a SQL Server PowerShell path. Par exemple, si l'emplacement est au niveau de l'ordinateur, cette applet de commande retourne toutes les instances du moteur de base de données SQL Server installées sur l'ordinateur.For example, if the location is at the computer level, this cmdlet returns all the SQL Server database engine instances installed on the computer. Si l'emplacement est au niveau de l'objet, tel que des bases de données, cette applet de commande retourne une liste d'objets de base de données.As another example, if the location is at the object level such as databases, then this cmdlet returns a list of database objects. Par défaut, l’applet de commande Get-ChildItem ne retourne pas d’objets système.By default the Get-ChildItem cmdlet does not return system objects. Pour afficher les objets système, utilisez le paramètre –Force.Using the –Force parameter you can see the system objects.

    Pour plus d’informations, consultez Navigate SQL Server PowerShell Paths.For more information, see Navigate SQL Server PowerShell Paths.

  3. Bien que chaque exemple de code puisse être exécuté indépendamment en modifiant les valeurs de variable, vous devez créer un compte de stockage Windows Azure et des informations d'identification SQL pour toutes les opérations de sauvegarde et de restauration dans le service de stockage d'objets blob Windows Azure.Although each code sample can be tried independently by changing the variable values, creating a Windows Azure Storage Account and a SQL Credential are prerequisites and required for all backup and restore operations to Windows Azure Blob storage service.

Créer des informations d'identification SQL sur toutes les instances de SQL ServerCreate a SQL Credential on All the Instances of SQL Server

Il y a deux exemples de script, et les deux créent les informations d'identification SQL « mybackupToURL » sur toutes les instances de SQL Server sur un ordinateur.There are two sample scripts, and both create a SQL Credential “mybackupToURL” on all the instances of SQL Server on a computer. Le premier exemple crée les informations d'identification et n'intercepte pas les exceptions.The first example creates is simple and creates the credential and does not trap exceptions. Par exemple, s'il existe déjà des informations d'identification avec le même nom sur une des instances de l'ordinateur, le script échoue.For example, if there was already an existing credential with the same name on one of the instances of the computer, the script would fail. Le deuxième exemple intercepte les erreurs et permet au script de continuer.The second example traps errors and allows the script to continue.


import-module sqlps  

# create variables  
$storageAccount = "mystorageaccount"  
$storageKey = "<storageaccesskeyvalue>"  
$secureString = convertto-securestring $storageKey  -asplaintext -force  
$credentialName = "mybackuptoURL"  

#cd to computer level  
cd SQLServer:\SQL\$env:COMPUTERNAME  
# get the list of instances  
$instances = Get-childitem  
#pipe the instances to new-sqlcredentail cmdlet to create SQL credential  
$instances | new-sqlcredential -Name $credentialName  -Identity $storageAccount -Secret $secureString  

import-module sqlps  

# set the parameter values  

$storageAccount = "mystorageaccount"  
$storageKey = "<storageaccesskeyvalue>"  
$secureString = convertto-securestring $storageKey  -asplaintext -force  
$credentialName = "mybackuptoURL"  

#cd to computer level  
cd SQLServer:\SQL\$env:COMPUTERNAME  
# get the list of instances  
$instances = Get-childitem  
#loop through instances and create a SQL credential, output any errors  
foreach ($instance in $instances)  
{  
    Try  
{  
     new-sqlcredential -Name $credentialName -path "SQLServer:\SQL\$($instance.name)" -Identity $storageAccount -Secret $secureString -ea Stop   
}  
Catch [Exception]  
    {  

            write-host "instance - $($instance.name): "$_.Exception.Message  

    }  

 }  

Supprimer des informations d'identification SQL de toutes les instances de SQL ServerRemove A SQL Credential from All the Instances of SQL Server

Ce script permet de supprimer des informations d'identification spécifiques de toutes les instances de SQL Server installées sur l'ordinateur.This script can be used to remove a specific credential from all the instances of SQL Server installed on the computer. Si l'objet Credential n'existe pas sur une instance spécifique, un message d'erreur s'affiche, et le script continue jusqu'à ce que toutes les instances aient été vérifiées.If the Credential object does not exist on a specific instance, an error message is displayed, and the script continues until all instances are checked.


import-module sqlps  

cd SQLServer:\SQL\$env:COMPUTERNAME  
$credentialName = "mybackuptoURL"  

$instances = Get-childitem  

foreach ($instance in $instances)  
   {   
    try  
        {  
            $path = "SQLServer:\SQL\$($instance.name)\credentials\$credentialName"   
            Remove-sqlCredential -path $path -ea stop   
         }  
         catch [Exception]  
         {  
            write-host $_.Exception.Message  

        }  

    }  

Sauvegarde complète de base de données pour toutes les bases de données (y compris les bases de données système)Full Database Backup for all Databases (INCLUDING SYSTEM DATABASES)

Le script suivant crée des sauvegardes de toutes les bases de données sur l'ordinateur.The following script creates backups of all databases on the computer. Cela inclut les bases de données utilisateur et la base de données système msdb .This includes both user databases and msdb system database. Le script exclut les bases de données système tempdb et model .The script filters out tempdb and model system databases.


import-module sqlps  
# set the parameter values  
$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$credentialName = "mybackuptoURL"  

# cd to computer level  

cd SQLServer:\SQL\$env:COMPUTERNAME  
$instances = Get-childitem   
# loop through each instances and backup up all the  databases -filter out tempdb and model databases  

 foreach ($instance in $instances)  
 {  
   $path = "sqlserver:\sql\$($instance.name)\databases"  
   $alldatabases = get-childitem -Force -path $path |Where-object {$_.name -ne "tempdb" -and $_.name -ne "model"}   

   $alldatabases | Backup-SqlDatabase -BackupContainer $backupUrlContainer -SqlCredential $credentialName -Compression On -script   
 }  

Sauvegarde complète de base de données pour toutes les bases de données utilisateurFull Database Backup for ALL User Databases

Le script suivant peut être utilisé pour la sauvegarde de toutes les bases de données utilisateur sur toutes les instances de SQL Server sur l'ordinateur.The following script can be used to back up all the user databases on all the instances of SQL Server on the computer.


import-module sqlps   

$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$credentialName = "mybackuptoURL"  

# cd to computer level  

cd SQLServer:\SQL\$env:COMPUTERNAME  
$instances = Get-childitem   
# loop through each instances and backup up all the user databases  
 foreach ($instance in $instances)  
 {  
    $databases = dir "sqlserver:\sql\$($instance.name)\databases"  
   $databases | Backup-SqlDatabase -BackupContainer $backupUrlContainer -SqlCredential $credentialName -Compression On   
 }  

Sauvegarde complète des bases de données MASTER et MSDB (bases de données système) sur toutes les instances de SQL ServerFull Database Backup for MASTER and MSDB (SYSTEM DATABASES) On All the Instances of SQL Server

Le script suivant peut être utilisé pour la sauvegarde des bases de données master et msdb sur toutes les instances de SQL Server installées sur l’ordinateur.The following script can be used to back up master and msdb databases on all the instances of SQL Server installed on the computer.


import-module sqlps  

$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$credentialName = "mybackupToUrl"  
$sysDbs = "master", "msdb"  

#cd to computer level  
cd SQLServer:\SQL\$env:COMPUTERNAME  
$instances = Get-childitem   
foreach ($instance in $instances)  
 {  
      foreach ($s in $sysdbs)  
     {  
Backup-SqlDatabase -Database $s -path "sqlserver:\sql\$($instance.name)" -BackupContainer  $backupUrlContainer -SqlCredential $credentialName -Compression On   
}    
 }  

Sauvegarde complète de toutes les bases de données utilisateur sur une instance de SQL ServerFull Database Backup for All User Databases on an Instance of SQL Server

Le script suivant est utilisé pour sauvegarder uniquement les bases de données utilisateur disponibles sur une instance nommée de SQL Server.The following script is used to back up only the user databases available on a named instance of SQL Server. Ce script peut être utilisé pour l'instance par défaut sur l'ordinateur en modifiant la valeur du paramètre $srvPath.The same script can be used for the default instance on the computer by changing the $srvPath parameter value.


import-module sqlps  

$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$srvPath = "SQLServer:\SQL\$env:COMPUTERNAME\INSTANCENAME"  # for default instance, the $srvpath variable is "SQLServer:\SQL\$env:COMPUTERNAME\DEFAULT"  
$credentialName = "mybackupToUrl"  

#cd to computer level  
cd SQLServer:\SQL\$env:COMPUTERNAME  

#retrieves the database objects for a specific instance  
$databases = dir $srvPath\databases  

#backup all the user databases  
$databases | Backup-SqlDatabase -BackupContainer $backupUrlContainer -SqlCredential $credentialName -Compression On  

Sauvegarde complète des bases de données système (MASTER et MSDB) sur une instance de SQL ServerFull Database Backup for Only System Databases (MASTER AND MSDB) On an Instance of SQL Server

Le script complet peut être utilisé pour la sauvegarde des bases de données master et msdb sur une instance nommée de SQL Server.The full script can be used to back up the master and the msdb databases on a named instance of SQL Server. Ce script peut être utilisé pour l'instance par défaut sur l'ordinateur en modifiant la valeur du paramètre $srvPath.The same script can be used for the default instance on the computer by changing the $srvpath parameter value.


import-module sqlps  

$storageAccount = "mystorageaccount"  
$blobContainer = "privatecontainertest"  
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"  
$srvPath = "SQLServer:\SQL\$env:COMPUTERNAME\INSTANCENAME" # for default instance, the $srvpath variable is "SQLServer:\SQL\$env:COMPUTERNAME\DEFAULT"  
$credentialName = "mybackupToUrl"  

#navigate to instance level  
cd $srvPath  

$sysDbs = "master", "msdb"  
foreach ($s in $sysDbs)   
{  
Backup-SqlDatabase -Database $s -BackupContainer $backupUrlContainer -SqlCredential $credentialName -Compression On  
}  

Voir aussiSee Also

Sauvegarde et restauration SQL Server avec le service de stockage d’objets blob Microsoft Azure SQL Server Backup and Restore with Microsoft Azure Blob Storage Service
Bonnes pratiques en matière de sauvegarde SQL Server vers une URL et résolution des problèmes associésSQL Server Backup to URL Best Practices and Troubleshooting