Backup di più database nel servizio di archiviazione BLOB di Azure - PowerShellBack up Multiple Databases to Azure Blob Storage - PowerShell

In questo argomento si applica a: SìSQL ServernonDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In questo argomento vengono forniti alcuni script di esempio che possono essere utilizzati per automatizzare i backup nel servizio di archiviazione BLOB di Windows Azure mediante i cmdlet di PowerShell.This topic provides sample scripts that can be used to automate backups to Windows Azure Blob storage service using PowerShell cmdlets.

Panoramica dei cmdlet di PowerShell per il backup e il ripristinoOverview of PowerShell cmdlets for Backup and Restore

Backup-SqlDatabase e Restore-SqlDatabase sono i due principali cmdlet disponibili per eseguire operazioni di backup e ripristino.The Backup-SqlDatabase and Restore-SqlDatabase are the two main cmdlets available to do backup and restore operations. Inoltre, sono presenti altri cmdlet che possono essere necessari per automatizzare i backup nel servizio di archiviazione BLOB di Windows Azure come il set di cmdlet SqlCredential . Di seguito è riportato un elenco di cmdlet di PowerShell disponibili in SQL Server 2017SQL Server 2017 utilizzati nelle operazioni di backup e ripristino: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
Questo cmdlet viene utilizzato per creare un backup di SQL ServerSQL Server .This cmdlet is used to create a SQL ServerSQL Server Backup.

Restore-SqlDatabaseRestore-SqlDatabase
Questo cmdlet viene utilizzato per ripristinare un database.Used to restore a database.

New-SqlCredentialNew-SqlCredential
Questo cmdlet viene utilizzato per creare le credenziali SQL da utilizzare per il backup di SQL Server nel servizio di archiviazione di Windows Azure.This cmdlet is used to create a SQL Credential to use for SQL Server Backup to Windows Azure Storage. Per altre informazioni sulle credenziali e sul relativo uso nelle operazioni di backup e ripristino di SQL Server, vedere Backup e ripristino di SQL Server con il servizio di archiviazione BLOB di 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
Questo cmdlet viene utilizzato per recuperare l'oggetto Credential e le relative proprietà.This cmdlet is used to retrieve the Credential object and its properties.

Remove-SqlCredentialRemove-SqlCredential
Questo cmdlet viene utilizzato per eliminare un oggetto Credential di SQL.Delete a SQL Credential object

Set-SqlCredentialSet-SqlCredential
Questo cmdlet viene utilizzato per modificare o impostare le proprietà dell'oggetto Credential di SQL.This cmdlet is used to change or set the properties of the SQL Credential Object.

Suggerimento

I cmdlet relativi alle credenziali vengono utilizzati nelle operazioni di backup e ripristino negli scenari del servizio di archiviazione BLOB di Windows Azure.The Credential cmdlets are used in Backup and Restore to Windows Azure Blob storage scenarios.

PowerShell per le operazioni di backup di più istanze di più databasePowerShell for Multi-Database, Multi-Instance Backup Operations

Nelle sezioni seguenti vengono forniti alcuni script per diverse operazioni quali la creazione di credenziali SQL in più istanze di SQL Server, il backup di tutti i database utente in un'istanza di SQL Server e simili.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. È possibile utilizzare questi script per automatizzare e pianificare le operazioni di backup in base ai requisiti dell'ambiente.You can use these scripts to automate or schedule backup operations according to the requirements of your environment. Gli script forniti di seguito sono esempi e possono essere modificati o estesi per l'ambiente in uso.The scripts provided here are examples, and may be modified or extended for your environment.

Di seguito sono riportate alcune considerazioni per gli script di esempio:The following are considerations for the sample scripts:

  1. Spostamento all'interno dei percorsi di SQL Server PowerShell: Windows PowerShell implementa alcuni cmdlet per spostarsi all'interno della struttura del percorso che rappresenta la gerarchia di oggetti supportati da un provider 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. Quando si passa a un nodo nel percorso, è possibile utilizzare altri cmdlet per eseguire operazioni di base sull'oggetto corrente.When you have navigated to a node in the path, you can use other cmdlets to perform basic operations on the current object.

  2. CmdletGet-ChildItem : le informazioni restituite da Get-ChildItem dipendono dal percorso di PowerShell per SQL Server.Get-ChildItem cmdlet: The information returned by the Get-ChildItem depends on the location in a SQL Server PowerShell path. Ad esempio, se il percorso è a livello di computer, questo cmdlet restituisce tutte le istanze del motore di database di SQL Server installate nel computer.For example, if the location is at the computer level, this cmdlet returns all the SQL Server database engine instances installed on the computer. Sempre a titolo di esempio, se il percorso è a livello di oggetto come i database, questo cmdlet restituisce un elenco di oggetti di database.As another example, if the location is at the object level such as databases, then this cmdlet returns a list of database objects. Per impostazione predefinita il cmdlet Get-ChildItem non restituisce oggetti di sistema.By default the Get-ChildItem cmdlet does not return system objects. Se si utilizza il parametro –Force è possibile visualizzare gli oggetti di sistema.Using the –Force parameter you can see the system objects.

    Per altre informazioni, vedere Navigate SQL Server PowerShell Paths.For more information, see Navigate SQL Server PowerShell Paths.

  3. Ogni esempio di codice può essere utilizzato in modo indipendente modificando i valori di variabili, tuttavia la creazione di un account di archiviazione Windows Azure e delle credenziali SQL è un prerequisito necessario per tutte le operazioni di backup e ripristino nel servizio di archiviazione BLOB di 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.

Creare le credenziali SQL in tutte le istanze di SQL ServerCreate a SQL Credential on All the Instances of SQL Server

Sono disponibili due script di esempio, entrambi per la creazione delle credenziali SQL “mybackupToURL” in tutte le istanze di SQL Server in un computer.There are two sample scripts, and both create a SQL Credential “mybackupToURL” on all the instances of SQL Server on a computer. Il primo esempio è semplice e consente di creare le credenziali senza intercettare eccezioni.The first example creates is simple and creates the credential and does not trap exceptions. Se ad esempio sono già presenti credenziali esistenti con lo stesso nome in una delle istanze del computer, lo script avrà esito negativo.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. Nel secondo esempio vengono intercettati gli errori consentendo allo script di continuare.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  

    }  

 }  

Rimuovere le credenziali SQL da tutte le istanze di SQL ServerRemove A SQL Credential from All the Instances of SQL Server

Questo script può essere utilizzato per rimuovere credenziali specifiche da tutte le istanze di SQL Server installate nel computer.This script can be used to remove a specific credential from all the instances of SQL Server installed on the computer. Se l'oggetto Credential non esiste in un'istanza specifica, viene visualizzato un messaggio di errore e lo script continua finché non vengono controllate tutte le istanze.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  

        }  

    }  

Backup completo del database per tutti i database (compresi i database di sistema)Full Database Backup for all Databases (INCLUDING SYSTEM DATABASES)

Lo script seguente consente di creare i backup di tutti i database presenti nel computer,The following script creates backups of all databases on the computer. sia database utente che database di sistema msdb .This includes both user databases and msdb system database. Nello script vengono esclusi tramite filtro i database di sistema tempdb e 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   
 }  

Backup completo del database per tutti i database utenteFull Database Backup for ALL User Databases

Lo script seguente può essere utilizzato per eseguire il backup di tutti i database utente in tutte le istanze di SQL Server presenti nel computer.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   
 }  

Backup completo del database per MASTER e MSDB (database di sistema) in tutte le istanze di SQL ServerFull Database Backup for MASTER and MSDB (SYSTEM DATABASES) On All the Instances of SQL Server

Lo script seguente può essere utilizzato per eseguire il backup dei database master e msdb in tutte le istanze di SQL Server installate nel computer.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   
}    
 }  

Backup completo del database per tutti i database utente di un'istanza di SQL ServerFull Database Backup for All User Databases on an Instance of SQL Server

Lo script seguente viene utilizzato per eseguire il backup solo dei database utente disponibili in un'istanza denominata di SQL Server.The following script is used to back up only the user databases available on a named instance of SQL Server. Lo stesso script può essere utilizzato per l'istanza predefinita del computer modificando il valore del parametro $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  

Backup completo del database solo per i database di sistema (MASTER e MSDB) in un'istanza di SQL ServerFull Database Backup for Only System Databases (MASTER AND MSDB) On an Instance of SQL Server

Lo script seguente può essere utilizzato per eseguire il backup dei database master e msdb in un'istanza denominata di SQL Server.The full script can be used to back up the master and the msdb databases on a named instance of SQL Server. Lo stesso script può essere utilizzato per l'istanza predefinita del computer modificando il valore del parametro $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  
}  

Vedere ancheSee Also

Backup e ripristino di SQL Server con il servizio di archiviazione BLOB di Microsoft Azure SQL Server Backup and Restore with Microsoft Azure Blob Storage Service
Procedure consigliate e risoluzione dei problemi per il backup di SQL Server nell'URLSQL Server Backup to URL Best Practices and Troubleshooting