Realizar copias de seguridad de varias bases de datos en Azure Blob Storage - PowerShellBack up Multiple Databases to Azure Blob Storage - PowerShell

En este tema se aplica a: SíSQL Servernobase de datos de SQL Azurenoalmacenamiento de datos de SQL Azure ningún Almacenamiento de datos paralelosTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Este tema proporciona ejemplos de scripts que se pueden utilizar para automatizar las copias de seguridad del servicio de almacenamiento Blob de Windows Azure con los cmdlets de PowerShell.This topic provides sample scripts that can be used to automate backups to Windows Azure Blob storage service using PowerShell cmdlets.

Información general de los cmdlets de PowerShell para las copias de seguridad y restauraciónOverview of PowerShell cmdlets for Backup and Restore

El Backup-SqlDatabase y Restore-SqlDatabase son dos cmdlets principales disponibles para realizar operaciones de copia de seguridad y restauración.The Backup-SqlDatabase and Restore-SqlDatabase are the two main cmdlets available to do backup and restore operations. Además, hay otros cmdlets que pueden requerir automatizar las copias de seguridad para el almacenamiento Blob de Windows Azure como el conjunto de cmdlets de SqlCredential . La siguiente es una lista de los cmdlets de PowerShell disponibles en SQL Server 2017SQL Server 2017 que se utilizan en las operaciones de copia de seguridad y restauración: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
Este cmdlet se utiliza para crear una copia de seguridad de SQL ServerSQL Server .This cmdlet is used to create a SQL ServerSQL Server Backup.

Restore-SqlDatabaseRestore-SqlDatabase
Se usa para restaurar una base de datos.Used to restore a database.

New-SqlCredentialNew-SqlCredential
Este cmdlet se utiliza para crear una credencial SQL para la copia de seguridad de SQL Server en el Almacenamiento de Windows Azure.This cmdlet is used to create a SQL Credential to use for SQL Server Backup to Windows Azure Storage. Para obtener más información sobre las credenciales y su uso en las copias de seguridad y restauración de SQL Server, vea Copia de seguridad y restauración de SQL Server con el servicio de Almacenamiento de blobs de 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
Este cmdlet se utiliza para recuperar el objeto Credencial y sus propiedades.This cmdlet is used to retrieve the Credential object and its properties.

Remove-SqlCredentialRemove-SqlCredential
Eliminar un objeto Credencial SQLDelete a SQL Credential object

Set-SqlCredentialSet-SqlCredential
Este cmdlet se utiliza para cambiar o establecer las propiedades del objeto Credencial SQL.This cmdlet is used to change or set the properties of the SQL Credential Object.

Sugerencia

Los cmdlets de credenciales se utilizan en las copias de seguridad y en la restauración en los escenarios de almacenamiento Blob de Windows Azure.The Credential cmdlets are used in Backup and Restore to Windows Azure Blob storage scenarios.

PowerShell para operaciones de copia de seguridad de varias instancias y varias bases de datosPowerShell for Multi-Database, Multi-Instance Backup Operations

Las secciones siguientes contienen scripts para varias operaciones como crear una credencial SQL en varias instancias de SQL Server, hacer la copia de seguridad de todas las bases de datos de usuario en una instancia de SQL Server, etcétera.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. Puede utilizar estos scripts para automatizar o para programar las operaciones de copia de seguridad según los requisitos de su entorno.You can use these scripts to automate or schedule backup operations according to the requirements of your environment. Los scripts que aquí se muestran son ejemplos y se pueden modificar o ampliar para su entorno.The scripts provided here are examples, and may be modified or extended for your environment.

A continuación se presentan las consideraciones para los scripts de ejemplo:The following are considerations for the sample scripts:

  1. Navegar por las rutas de acceso de SQL Server PowerShell: Windows PowerShell implementa cmdlets para navegar por la estructura de ruta de acceso que representa la jerarquía de objetos compatible con un proveedor de 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. Cuando ha navegado a un nodo de la ruta de acceso, puede usar otros cmdlets para realizar operaciones básicas en el objeto actual.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 : la información devuelta por Get-ChildItem depende de la ubicación de una ruta de acceso de PowerShell de SQL Server.Get-ChildItem cmdlet: The information returned by the Get-ChildItem depends on the location in a SQL Server PowerShell path. Por ejemplo, si la ubicación está en el equipo, este cmdlet devuelve todas las instancias del motor de base de datos de SQL Server instaladas en él.For example, if the location is at the computer level, this cmdlet returns all the SQL Server database engine instances installed on the computer. Como otro ejemplo, si la ubicación está en un objeto como son las bases de datos, este cmdlet devuelve una lista de objetos de base de datos.As another example, if the location is at the object level such as databases, then this cmdlet returns a list of database objects. De forma predeterminada, el cmdlet Get-ChildItem no devuelve los objetos del sistema.By default the Get-ChildItem cmdlet does not return system objects. Mediante el parámetro –Force, puede ver los objetos del sistema.Using the –Force parameter you can see the system objects.

    Para obtener más información, consulte Navigate SQL Server PowerShell Paths.For more information, see Navigate SQL Server PowerShell Paths.

  3. Aunque cada ejemplo de código se pueda probar de forma independiente cambiando los valores de las variables, crear una cuenta de Almacenamiento de Windows Azure y una credencial SQL son requisitos previos y es imprescindible para todas las operaciones de copia de seguridad y de restauración en el servicio de almacenamiento Blob de 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.

Crear una credencial SQL en todas las instancias de SQL ServerCreate a SQL Credential on All the Instances of SQL Server

Hay dos ejemplos de scripts y ambos crean una credencial SQL “mybackupToURL“ en todas las instancias de SQL Server de un equipo.There are two sample scripts, and both create a SQL Credential “mybackupToURL” on all the instances of SQL Server on a computer. El primer ejemplo es sencillo, crea la credencial y no intercepta las excepciones.The first example creates is simple and creates the credential and does not trap exceptions. Por ejemplo, si hubiera ya una credencial existente con el mismo nombre en una de las instancias del equipo, el script produciría un error.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. El segundo ejemplo intercepta los errores y permite que el script continúe.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  

    }  

 }  

Quitar una credencial SQL de todas las instancias de SQL ServerRemove A SQL Credential from All the Instances of SQL Server

Este script se puede utilizar para quitar una credencial específica de todas las instancias de SQL Server instaladas en el equipo.This script can be used to remove a specific credential from all the instances of SQL Server installed on the computer. Si el objeto Credencial no existe en una instancia concreta, aparece un mensaje de error y el script continúa hasta que se comprueban todas las instancias.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  

        }  

    }  

Copia de seguridad completa de base de datos para todas las bases de datos (INCLUDING SYSTEM DATABASES)Full Database Backup for all Databases (INCLUDING SYSTEM DATABASES)

El siguiente script crea copias de seguridad de todas las bases de datos del equipo.The following script creates backups of all databases on the computer. Esto incluye tanto a las bases de datos de usuario como a la base de datos del sistema msdb .This includes both user databases and msdb system database. El script filtra las bases de datos del sistema tempdb y 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   
 }  

Copia de seguridad completa de base de datos de todas las bases de datos de usuarioFull Database Backup for ALL User Databases

El script siguiente se puede utilizar para realizar la copia de seguridad de todas las bases de datos de usuario en todas las instancias de SQL Server del equipo.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   
 }  

Copia de seguridad completa de la base de datos MAESTRA y MSDB (BASES DATABASE SYSTEM) en todas las instancias de SQL ServerFull Database Backup for MASTER and MSDB (SYSTEM DATABASES) On All the Instances of SQL Server

El script siguiente se puede usar para crear copias de seguridad de las bases de datos master y msdb en todas las instancias de SQL Server instaladas en el equipo.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   
}    
 }  

Copia de seguridad completa de todas las bases de datos de usuario en una instancia de SQL ServerFull Database Backup for All User Databases on an Instance of SQL Server

El siguiente script se utiliza para realizar la copia de seguridad solo de las bases de datos de usuario disponibles en una instancia con nombre de SQL Server.The following script is used to back up only the user databases available on a named instance of SQL Server. El mismo script se puede utilizar para la instancia predeterminada del equipo cambiando el valor del parámetro $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  

Copia de seguridad completa solo de las bases de datos del sistema (MAESTRA y MSDB) en una instancia de SQL ServerFull Database Backup for Only System Databases (MASTER AND MSDB) On an Instance of SQL Server

El script completo se puede usar para crear una copia de seguridad de las bases de datos master y msdb en una instancia con nombre 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. El mismo script se puede utilizar para la instancia predeterminada del equipo cambiando el valor del parámetro $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  
}  

Ver tambiénSee Also

Copia de seguridad y restauración de SQL Server con el servicio de Almacenamiento de blobs de Microsoft Azure SQL Server Backup and Restore with Microsoft Azure Blob Storage Service
Prácticas recomendadas y solución de problemas de Copia de seguridad en URL de SQL ServerSQL Server Backup to URL Best Practices and Troubleshooting