Tutorial: Uso de Azure Blob Storage con SQL Server 2016

Se aplica a:yes SQL Server (todas las versiones compatibles)

Le damos la bienvenida al tutorial Trabajar con SQL Server 2016 en Microsoft Azure Blob Storage. Este tutorial le ayuda a comprender cómo usar Azure Blob Storage para los archivos de datos de SQL Server y las copias de seguridad de SQL Server.

La compatibilidad de integración de SQL Server para Azure Blob Storage comenzó como mejora de SQL Server 2012 Service Pack 1 CU2 y se ha mejorado aún más en SQL Server 2014 y SQL Server 2016. Para obtener información general sobre la funcionalidad y las ventajas de usar esta característica, consulte Archivos de datos de SQL Server en Microsoft Azure.

En este tutorial se muestra cómo trabajar con SQL Server archivos de datos en Azure Blob Storage en varias secciones. Cada sección se centra en una tarea específica, y se deben completar por orden. En primer lugar, aprenderá a crear un contenedor en Blob Storage con una directiva de acceso almacenada y una firma de acceso compartido. A continuación, aprenderá a crear una credencial de SQL Server para integrar SQL Server con Azure Blob Storage. Después, realizará una copia de seguridad de una base de datos en Blob Storage y la restaurará en una máquina virtual de Azure. Después usará la copia de seguridad del registro de transacciones de instantáneas de archivos de SQL Server 2016 para restaurar a un momento dado y a una nueva base de datos. Por último, en el tutorial se muestra el uso de funciones y procedimientos almacenados del sistema de metadatos para ayudarle a comprender y trabajar con copias de seguridad de instantáneas de archivos.

Requisitos previos

Para completar este tutorial, debe estar familiarizado con los conceptos de copias de seguridad y restauración de SQL Server y con la sintaxis de T-SQL. Para usar este tutorial, necesita una cuenta de Azure Storage, SQL Server Management Studio (SSMS), acceso a una instancia de SQL Server local, acceso a una máquina virtual de Azure (VM) que ejecute SQL Server 2016 y una base de datos AdventureWorks2016. Además, la cuenta que se usa para emitir comandos BACKUP o RESTORE debe tener el rol de base de datos db_backupoperator con permisos Modificar cualquier credencial.

Importante

SQL Server no admite Azure Data Lake Storage; asegúrese de que el espacio de nombres jerárquico no esté habilitado en la cuenta de almacenamiento que se emplea en este tutorial.

1. Crear una directiva de acceso almacenada y un almacenamiento de acceso compartido

En esta sección, usará un script de Azure PowerShell para crear una firma de acceso compartido en un contenedor de blobs de Azure mediante una directiva de acceso almacenada.

Nota

Este script se escribió con Azure PowerShell 5.0.10586.

Una firma de acceso compartido es un URI que concede derechos de acceso restringidos a los contenedores, los blobs, las colas o las tablas. Una directiva de acceso almacenada proporciona un nivel de control adicional sobre las firmas de acceso compartidas en el servidor, incluida la revocación, expiración o ampliación del acceso. Al usar esta nueva mejora, debe crear una directiva en un contenedor con derechos de lectura, escritura y enumeración como mínimo.

Puede crear una directiva de acceso y una firma de acceso compartido mediante Azure PowerShell, el SDK Azure Storage, la API de REST de Azure o una utilidad de terceros. Este tutorial muestra cómo usar un script de PowerShell de Azure para completar esta tarea. El script usa el modelo de implementación de Resource Manager y crea los siguientes recursos.

  • Resource group
  • Cuenta de almacenamiento
  • Contenedor de blobs de Azure
  • Directiva SAS

Este script comienza con la declaración de una serie de variables para especificar los nombres para los recursos anteriores y los nombres para los siguientes valores de entrada necesarios:

  • El nombre de prefijo usado en la nomenclatura de otros objetos de recursos
  • Nombre de suscripción
  • Ubicación del centro de datos

El script termina con la generación de la instrucción CREATE CREDENTIAL correspondiente que se va a usar en la sección 2. Crear una credencial de SQL Server con una firma de acceso compartido. Esta instrucción se copia en el Portapapeles y se reproduce en la consola para que la pueda ver.

Para crear una directiva en el contenedor y generar una clave de firma de acceso compartido (SAS), haga lo siguiente:

  1. Abra la ventana de PowerShell o Windows PowerShell ISE (consulte los requisitos de versión anteriores).

  2. Edite y ejecute el script siguiente:

    # Define global variables for the script  
    $prefixName = '<a prefix name>'  # used as the prefix for the name for various objects  
    $subscriptionID = '<your subscription ID>'   # the ID  of subscription name you will use  
    $locationName = '<a data center location>'  # the data center region you will use  
    $storageAccountName= $prefixName + 'storage' # the storage account name you will create or use  
    $containerName= $prefixName + 'container'  # the storage container name to which you will attach the SAS policy with its SAS token  
    $policyName = $prefixName + 'policy' # the name of the SAS policy 
    
    # Set a variable for the name of the resource group you will create or use  
    $resourceGroupName=$prefixName + 'rg'   
    
    # Add an authenticated Azure account for use in the session   
    Connect-AzAccount    
    
    # Set the tenant, subscription and environment for use in the rest of   
    Set-AzContext -SubscriptionId $subscriptionID   
    
    # Create a new resource group - comment out this line to use an existing resource group  
    New-AzResourceGroup -Name $resourceGroupName -Location $locationName   
    
    # Create a new Azure Resource Manager storage account - comment out this line to use an existing Azure Resource Manager storage account  
    New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Type Standard_RAGRS -Location $locationName   
    
    # Get the access keys for the Azure Resource Manager storage account  
    $accountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName  
    
    # Create a new storage account context using an Azure Resource Manager storage account  
    $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].Value
    
    # Creates a new container in Blob Storage  
    $container = New-AzStorageContainer -Context $storageContext -Name $containerName  
    
    # Sets up a Stored Access Policy and a Shared Access Signature for the new container  
    $policy = New-AzStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -StartTime $(Get-Date).ToUniversalTime().AddMinutes(-5) -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission rwld
    
    # Gets the Shared Access Signature for the policy  
    $sas = New-AzStorageContainerSASToken -name $containerName -Policy $policyName -Context $storageContext
    Write-Host 'Shared Access Signature= '$($sas.Substring(1))''  
    
    # Sets the variables for the new container you just created
    $container = Get-AzStorageContainer -Context $storageContext -Name $containerName
    $cbc = $container.CloudBlobContainer 
    
    # Outputs the Transact SQL to the clipboard and to the screen to create the credential using the Shared Access Signature  
    Write-Host 'Credential T-SQL'  
    $tSql = "CREATE CREDENTIAL [{0}] WITH IDENTITY='Shared Access Signature', SECRET='{1}'" -f $cbc.Uri,$sas.Substring(1)   
    $tSql | clip  
    Write-Host $tSql 
    
    # Once you're done with the tutorial, remove the resource group to clean up the resources. 
    # Remove-AzResourceGroup -Name $resourceGroupName  
    
  3. Cuando finalice el script, la instrucción CREATE CREDENTIAL estará en el Portapapeles para poder usarla en la siguiente sección.

2. Crear una credencial de SQL Server con una firma de acceso compartido

En esta sección, creará una credencial para almacenar la información de seguridad que SQL Server usará para escribir y leer desde el contenedor de Azure que ha creado en el paso anterior.

Una credencial de SQL Server es un objeto que se usa para almacenar la información de autenticación necesaria para conectarse a un recurso fuera de SQL Server. La credencial almacena la ruta de acceso URI de la firma de acceso compartido y del contenedor de almacenamiento de este contenedor.

Para crear una credencial de SQL Server, siga estos pasos:

  1. Conéctese a SQL Server Management Studio.

  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server del motor de base de datos en su entorno local.

  3. En la nueva ventana de consulta, pegue la instrucción CREATE CREDENTIAL con la firma de acceso compartido de la sección 1 y ejecute el script.

    El script tendrá un aspecto similar al código siguiente.

    /* Example:
    USE master  
    CREATE CREDENTIAL [https://msfttutorial.blob.core.windows.net/containername] 
    WITH IDENTITY='SHARED ACCESS SIGNATURE'   
    , SECRET = 'sharedaccesssignature' 
    GO */
    
    USE master  
    CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] 
      -- this name must match the container path, start with https and must not contain a forward slash at the end
    WITH IDENTITY='SHARED ACCESS SIGNATURE' 
      -- this is a mandatory string and should not be changed   
     , SECRET = 'sharedaccesssignature' 
       -- this is the shared access signature key that you obtained in section 1.   
    GO    
    
  4. Para ver todas las credenciales disponibles, puede ejecutar la siguiente instrucción en una ventana de consulta conectada a su instancia:

    SELECT * from sys.credentials  
    
  5. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server del motor de base de datos de la máquina virtual de Azure.

  6. En la nueva ventana de consulta, pegue la instrucción CREATE CREDENTIAL con la firma de acceso compartido de la sección 1 y ejecute el script.

  7. Repita los pasos 5 y 6 para cualquier instancia de SQL Server adicional que quiere que tenga acceso al contenedor de Azure.

3. Realizar una copia de seguridad de base de datos en la dirección URL

En esta sección, hará una copia la base de datos AdventureWorks2016 en su instancia de SQL Server 2016 local en el contenedor de Azure que creó en la sección 1.

Nota

Si desea realizar una copia de seguridad de una base de datos SQL Server 2012 SP1 CU2 o posterior o una base de datos SQL Server 2014 en este contenedor de Azure, puede usar la sintaxis en desuso que se documenta aquí para realizar copias de seguridad en la dirección URL mediante la sintaxis WITH CREDENTIAL.

Para realizar una copia de seguridad de una base de datos en Blob Storage, siga estos pasos:

  1. Conéctese a SQL Server Management Studio.

  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server 2016 del motor de base de datos de la máquina virtual de Azure.

  3. Copie y pegue el siguiente script de Transact-SQL en la ventana de consulta. Modifique la dirección URL correctamente para su nombre de cuenta de almacenamiento y el contenedor que ha especificado en la sección 1 y, después, ejecute este script.

    
    -- To permit log backups, before the full database backup, modify the database to use the full recovery model.  
    USE master;  
    ALTER DATABASE AdventureWorks2016  
       SET RECOVERY FULL;  
    
    -- Back up the full AdventureWorks2016 database to the container that you created in section 1  
    BACKUP DATABASE AdventureWorks2016   
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_onprem.bak'  
    
    
  4. Abra el Explorador de objetos y conéctese a Azure Storage con su cuenta de almacenamiento y la clave de la cuenta.

    1. Expanda Contenedores, expanda el contenedor que creó en la sección 1 y compruebe que la copia de seguridad del paso 3 anterior aparece en este contenedor.

Connect to Azure Storage account

4- Restauración de la base de datos a una máquina virtual desde la dirección URL

En esta sección, restaurará la base de datos AdventureWorks2016 en la instancia de SQL Server 2016 de la máquina virtual de Azure.

Nota

Para simplificar este tutorial, usamos el mismo contenedor para los archivos de datos y de registros que se usan para la copia de seguridad de la base de datos. En un entorno de producción, usaría varios contenedores y, con frecuencia, varios archivos de datos. Con SQL Server 2016, también puede considerar la posibilidad de crear bandas de la copia de seguridad en varios blobs para aumentar el rendimiento de la copia de seguridad al realizar la copia de seguridad de una base de datos de gran tamaño.

Para restaurar la base de datos de AdventureWorks2016 desde Azure Blob Storage en la instancia de SQL Server 2016 de la máquina virtual de Azure, siga estos pasos:

  1. Conéctese a SQL Server Management Studio.

  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server 2016 del motor de base de datos de la máquina virtual de Azure.

  3. Copie y pegue el siguiente script de Transact-SQL en la ventana de consulta. Modifique la dirección URL correctamente para su nombre de cuenta de almacenamiento y el contenedor que ha especificado en la sección 1 y, después, ejecute este script.

    -- Restore AdventureWorks2016 from URL to SQL Server instance using Azure Blob Storage for database files  
    RESTORE DATABASE AdventureWorks2016   
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_onprem.bak'   
       WITH  
          MOVE 'AdventureWorks2016_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_Data.mdf'  
         ,MOVE 'AdventureWorks2016_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_Log.ldf'  
    --, REPLACE  
    
    
  4. Abra el Explorador de objetos y conéctese a la instancia de SQL Server 2016 de Azure.

  5. En el Explorador de objetos, expanda el nodo Bases de datos y compruebe que se ha restaurado la base de datos AdventureWorks2016 (actualice el nodo según sea necesario).

    1. Haga clic con el botón derecho en AdventureWorks2016 y seleccione Propiedades.
    2. Seleccione Archivos y compruebe que las rutas de acceso a los dos archivos de base de datos son direcciones URL que apuntan a los blobs del contenedor de blobs de Azure (seleccione Cancelar cuando haya terminado).

    AdventureWorks db on Azure VM

  6. En el Explorador de objetos, conéctese a Azure Storage.

    1. Expanda Contenedores, expanda el contenedor que ha creado en la sección 1 y compruebe que AdventureWorks2016_Data.mdf y AdventureWorks2016_Log.ldf del paso 3 anterior aparecen en este contenedor, junto con el archivo de copia de seguridad de la sección 3 (actualice el nodo según sea necesario).

Data files within container on Azure

5. Realizar una copia de seguridad de la base de datos mediante la copia de seguridad de instantáneas de archivos

En esta sección, realizará una copia de seguridad de la base de datos AdventureWorks2016 en la máquina virtual de Azure mediante la copia de seguridad de instantáneas de archivos para realizar una copia de seguridad casi instantánea mediante instantáneas de Azure. Para obtener más información sobre las copias de seguridad de instantáneas de archivos, consulte Copias de seguridad de instantánea de archivos para archivos de base de datos de Azure

Para realizar una copia de seguridad de la base de datos AdventureWorks2016 mediante la copia de seguridad de instantáneas de archivos, siga estos pasos:

  1. Conéctese a SQL Server Management Studio.

  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server 2016 del motor de base de datos de la máquina virtual de Azure.

  3. Copie, pegue y ejecute el siguiente script de Transact-SQL en la ventana de consulta (no cierre esta ventana de consulta: ejecutará este script nuevo en el paso 5). Este procedimiento almacenado del sistema permite ver las copias de seguridad de instantáneas de archivos existentes para cada archivo que forma parte de una base de datos especificada. Observará que no hay copias de seguridad de instantáneas de archivos para esta base de datos.

    -- Verify that no file snapshot backups exist  
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2016');  
    
  4. Copie y pegue el siguiente script de Transact-SQL en la ventana de consulta. Modifique la dirección URL correctamente para su nombre de cuenta de almacenamiento y el contenedor que ha especificado en la sección 1 y, después, ejecute este script. Observe la rapidez con la que se crea esta copia de seguridad.

    -- Backup the AdventureWorks2016 database with FILE_SNAPSHOT  
    BACKUP DATABASE AdventureWorks2016   
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_Azure.bak'   
       WITH FILE_SNAPSHOT;    
    
  5. Después de comprobar que el script del paso 4 se ha ejecutado correctamente, ejecute el siguiente script de nuevo. Observe que la operación de copia de seguridad de instantáneas de archivos en el paso 4 genera instantáneas de archivo de los datos y del archivo de registro.

    -- Verify that two file-snapshot backups exist  
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2016');  
    
    

    Results of fn_db_backup_file_snapshots showing snapshots

  6. En el Explorador de objetos, en la instancia de SQL Server 2016 de la máquina virtual de Azure, expanda el nodo Bases de datos y compruebe que se ha restaurado la base de datos AdventureWorks2016 a esta instancia (actualice el nodo según sea necesario).

  7. En el Explorador de objetos, conéctese a Azure Storage.

  8. Expanda Contenedores, expanda el contenedor que creó en la sección 1 y compruebe que el AdventureWorks2016_Azure.bak del paso 4 anterior aparece en este contenedor, junto con el archivo de copia de seguridad de la sección 3 y los archivos de base de datos de la sección 4 (actualice el nodo según sea necesario).

    Snapshot back up on Azure

6- Generar registro de actividad y copia de seguridad mediante la copia de seguridad de instantáneas de archivos

En esta sección, va a generar actividad en la base de datos AdventureWorks2016 y, periódicamente, va a crear copias de seguridad del registro de transacciones mediante copias de seguridad de instantáneas de archivos. Para obtener más información sobre las copias de seguridad de instantáneas de archivos, vea Copias de seguridad de instantánea de archivos para archivos de base de datos de Azure.

Para generar actividad en la base de datos AdventureWorks2016 y crear periódicamente copias de seguridad del registro de transacciones mediante copias de seguridad de instantáneas de archivos, siga estos pasos:

  1. Conéctese a SQL Server Management Studio.

  2. Abra dos nuevas ventanas de consulta y conecte cada una de ellas a la instancia de SQL Server 2016 del motor de base de datos de la máquina virtual de Azure.

  3. Copie, pegue y ejecute el siguiente script de Transact-SQL en una de las ventanas de consulta. Tenga en cuenta que la tabla Production.Location tiene 14 filas antes de agregar nuevas filas en el paso 4.

    -- Verify row count at start  
    SELECT COUNT (*) from AdventureWorks2016.Production.Location;    
    
  4. Copie y pegue los dos siguientes scripts de Transact-SQL en las dos ventanas de consulta independientes. Modifique la dirección URL correctamente para su nombre de cuenta de almacenamiento y el contenedor que ha especificado en la sección 1 y, después, ejecute estos scripts simultáneamente en ventanas de consulta independientes. Estos scripts tardarán unos siete minutos en completarse.

    -- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2014 database in batches of 75  
    DECLARE @count INT=1, @inner INT;  
    WHILE @count < 400  
       BEGIN  
          BEGIN TRAN;  
             SET @inner =1;  
                WHILE @inner <= 75  
                   BEGIN;  
                      INSERT INTO AdventureWorks2016.Production.Location    
                         (Name, CostRate, Availability, ModifiedDate)   
                            VALUES (NEWID(), .5, 5.2, GETDATE());  
                      SET @inner = @inner + 1;  
                   END;  
          COMMIT;  
       WAITFOR DELAY '00:00:01';   
       SET @count = @count + 1;  
       END;  
    SELECT COUNT (*) from AdventureWorks2014.Production.Location;    
    
    --take 7 transaction log backups with FILE_SNAPSHOT, one per minute, and include the row count and the execution time in the backup file name   
    DECLARE @count INT=1, @device NVARCHAR(120), @numrows INT;  
    WHILE @count <= 7  
       BEGIN  
             SET @numrows = (SELECT COUNT (*) FROM AdventureWorks2016.Production.Location);  
             SET @device = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak';  
             BACKUP LOG AdventureWorks2016 TO URL = @device WITH FILE_SNAPSHOT;  
             SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2016');  
          WAITFOR DELAY '00:1:00';   
             SET @count = @count + 1;  
       END;  
    
  5. Revise el resultado del primer script y tenga en cuenta que el recuento final de filas ahora es de 29 939.

    Row count of 29,939 is displayed

  6. Revise la salida del segundo script y observe que cada vez que se ejecuta la instrucción BACKUP LOG que se crean dos instantáneas de archivo nuevas, una instantánea de archivo del archivo de registro y una instantánea de archivo del archivo de datos, para un total de dos instantáneas de archivo para cada archivo de base de datos. Después de que se complete el segundo script, tenga en cuenta que ahora existen un total de 16 instantáneas de archivo, 8 para cada archivo de base de datos (uno de la instrucción BACKUP DATABASE y otro de cada ejecución de la instrucción BACKUP LOG).

Backup snapshot results

  1. En el Explorador de objetos, conéctese a Azure Storage.

  2. Expanda Contenedores, expanda el contenedor que creó en la sección 1 y compruebe que aparecen siete nuevos archivos de copia de seguridad, junto con los archivos de datos de las secciones anteriores (actualice el nodo según sea necesario).

    Multiple snapshots in Azure Container

7. Restaurar una base de datos a un momento dado

En esta sección, restaurará la base de datos AdventureWorks2016 a un momento dado entre dos de las copias de seguridad del registro de transacciones.

Con las copias de seguridad tradicionales, para lograr una restauración a un momento dado, necesitará usar la copia de seguridad de la base de datos completa, quizás una copia de seguridad diferencial y todos los archivos de registro de transacciones hasta el momento dado y justo después del momento dado al que quiere restaurar. Con las copias de seguridad de instantáneas de archivos, solo necesita los dos archivos de copia de seguridad de registros adyacentes que proporcionan los objetivos que enmarcan el momento al que quiere restaurar. Solo necesita dos conjuntos de copia de seguridad de registros de instantáneas de archivos, porque cada copia de seguridad de registros crea una instantánea de archivo de cada archivo de base de datos (cada archivo de datos y el archivo de registro).

Para restaurar una base de datos a un momento dado a partir de conjuntos de copia de seguridad de instantáneas de archivos, siga estos pasos:

  1. Conéctese a SQL Server Management Studio.

  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server 2016 del motor de base de datos de la máquina virtual de Azure.

  3. Copie, pegue y ejecute el siguiente script de Transact-SQL en la ventana de consulta. Compruebe que la tabla Production.Location tiene 29 939 filas antes de restaurarla a un momento dado en el que tiene menos filas en el paso 5.

    -- Verify row count at start  
    SELECT COUNT (*) from AdventureWorks2016.Production.Location   
    

    Row count of 29,939 is displayed

  4. Copie y pegue el siguiente script de Transact-SQL en la ventana de consulta. Seleccione dos archivos de copia de seguridad de registros adyacentes y convierta el nombre de archivo en la fecha y hora que necesitará para este script. Modifique la dirección URL apropiadamente para el nombre de la cuenta de almacenamiento y el contenedor que especificó en la sección 1, proporcione los nombres de archivo de copia de seguridad primero y segundo, proporcione la hora STOPAT con el formato "26 de junio de 2018 01:48 PM" y, a continuación, ejecute este script. Este script tardará unos minutos en completarse

    -- restore and recover to a point in time between the times of two transaction log backups, and then verify the row count  
    ALTER DATABASE AdventureWorks2016 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;  
    RESTORE DATABASE AdventureWorks2016   
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<firstbackupfile>.bak'   
       WITH NORECOVERY,REPLACE;  
    RESTORE LOG AdventureWorks2016   
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<secondbackupfile>.bak'    
       WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM';  
    ALTER DATABASE AdventureWorks2016 set multi_user;  
    -- get new count  
    SELECT COUNT (*) FROM AdventureWorks2016.Production.Location ;
    
  5. Revise el resultado. Observe que, después de la restauración, el recuento de filas es 18 389, que es un número de recuento de filas entre la copia de seguridad de registros 5 y 6 (su recuento de filas puede variar).

    18-thousand-rows.JPG

8- Restauración como nueva base de datos a partir de la copia de seguridad de registros

En esta sección, restaurará la base de datos AdventureWorks2016 como una base de datos nueva desde una copia de seguridad del registro de transacciones de instantáneas de archivos.

En este escenario, realizará una restauración a una instancia de SQL Server en una máquina virtual diferente a efectos de análisis de negocio e informes. Al restaurar en una instancia diferente en una máquina virtual diferente, se descarga la carga de trabajo en una máquina virtual dedicada y con un tamaño para este propósito, quitando los requisitos del recurso del sistema transaccional.

La restauración desde una copia de seguridad del registro de transacciones con una copia de seguridad de instantáneas de archivos es muy rápida, considerablemente más rápido que con las copias de seguridad de streaming tradicionales. Con las copias de seguridad de streaming tradicionales, usaba la copia de seguridad completa de la base de datos, quizás una copia de seguridad diferencial y algunas o todas las copias de seguridad del registro de transacciones (o una copia de seguridad completa de la base de datos nueva). En cambio, con las copias de seguridad de registros de instantáneas de archivos, solo necesita la copia de seguridad de registros más reciente (o cualquier otra copia de seguridad de registros o dos copias de seguridad de registros adyacentes para la restauración a un momento dado entre dos copias de seguridad de registros). Para que quede claro, solo necesita un conjunto de copia de seguridad de registros de instantáneas de archivos, porque cada copia de seguridad de registros de instantáneas de archivos crea una instantánea de archivo de cada archivo de base de datos (cada archivo de datos y el archivo de registro).

Para restaurar una base de datos a una base de datos nueva desde una copia de seguridad del registro de transacciones mediante la copia de seguridad de instantánea de archivo, siga estos pasos:

  1. Conéctese a SQL Server Management Studio.

  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server 2016 del motor de base de datos de una máquina virtual de Azure.

    Nota

    Si se trata de una máquina virtual de Azure diferente de la que ha usado para las secciones anteriores, asegúrese de que ha seguido los pasos descritos en 2. Crear una credencial de SQL Server con una firma de acceso compartido. Si desea restaurar a un contenedor diferente, siga los pasos descritos en 1. Crear una directiva de acceso almacenada y un almacenamiento de acceso compartido para el nuevo contenedor.

  3. Copie y pegue el siguiente script de Transact-SQL en la ventana de consulta. Seleccione el archivo de copia de seguridad de registros que quiera usar. Modifique la dirección URL correctamente para su nombre de cuenta de almacenamiento y el contenedor que ha especificado en la sección 1, proporcione el nombre de archivo de la copia de seguridad de registros y ejecute este script.

    -- restore as a new database from a transaction log backup file  
    RESTORE DATABASE AdventureWorks2016_EOM   
        FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<logbackupfile.bak>'    
        WITH MOVE 'AdventureWorks2016_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2014_EOM_Data.mdf'  
       , MOVE 'AdventureWorks2016_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2014_EOM_Log.ldf'  
       , RECOVERY  
    --, REPLACE   
    
  4. Revise el resultado para comprobar que la restauración se ha realizado correctamente.

  5. En el Explorador de objetos, conéctese a Azure Storage.

  6. Expanda Contenedores, expanda el contenedor que creó en la sección 1 (actualizar si es necesario) y compruebe que los nuevos archivos de datos y de registro aparecen en el contenedor, junto con los blobs de las secciones anteriores.

    Azure container showing the data and log files for the new database

9. Administrar conjuntos de copia de seguridad y copias de seguridad de instantáneas de archivos

En esta sección, eliminará un conjunto de copia de seguridad mediante el procedimiento almacenado del sistema de sp_delete_backup (Transact-SQL). Este procedimiento almacenado del sistema elimina el archivo de copia de seguridad y el archivo de instantánea de cada archivo de base de datos asociado a este conjunto de copia de seguridad.

Nota

Si intenta eliminar un conjunto de copia de seguridad simplemente eliminando el archivo de copia de seguridad del contenedor de blobs de Azure, solo eliminará el archivo de copia de seguridad en sí y se conservarán las instantáneas de archivo asociadas. Si se encuentra en este escenario, use la función del sistema sys.fn_db_backup_file_snapshots (Transact-SQL) para identificar la dirección URL de las instantáneas de archivo huérfanas y usar el procedimiento almacenado del sistema de sp_delete_backup_file_snapshot (Transact-SQL) para eliminar cada instantánea de archivo huérfano. Para obtener más información, vea Copias de seguridad de instantánea de archivos para archivos de base de datos de Azure.

Para eliminar un conjunto de copia de seguridad de instantánea de archivos, siga estos pasos:

  1. Conéctese a SQL Server Management Studio.
  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server 2016 del motor de base de datos de la máquina virtual de Azure (o a cualquier instancia de SQL Server 2016 con permisos de lectura y escritura en este contenedor).
  3. Copie y pegue el siguiente script de Transact-SQL en la ventana de consulta. Seleccione la copia de seguridad de registros que quiere eliminar junto con sus instantáneas de archivos asociadas. Modifique la dirección URL correctamente para su nombre de cuenta de almacenamiento y el contenedor que ha especificado en la sección 1, proporcione el nombre de archivo de la copia de seguridad de registros y ejecute este script.
sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-21764-20181003205236.bak';  
  1. En el Explorador de objetos, conéctese a Azure Storage.

  2. Expanda Contenedores, expanda el contenedor creado en la sección 1 y compruebe que el archivo de copia de seguridad usado en el paso 3 ya no aparece en este contenedor (actualice el nodo si es necesario).

    Azure container showing the deletion of the log backup blob

  3. Copie, pegue y ejecute el siguiente script de Transact-SQL en la ventana de consulta para comprobar que se han eliminado dos instantáneas de archivos.

    -- verify that two file snapshots have been removed  
    SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2016');   
    

    Results pane showing 2 file snapshots deleted

10. Quitar recursos

Una vez que haya terminado con este tutorial, y para ahorrar recursos, asegúrese de eliminar el grupo de recursos creado con este fin.

Para eliminar el grupo de recursos, ejecute el siguiente código de PowerShell:

# Define global variables for the script  
$prefixName = '<prefix name>'  # should be the same as the beginning of the tutorial

# Set a variable for the name of the resource group you will create or use  
$resourceGroupName=$prefixName + 'rg'   

# Adds an authenticated Azure account for use in the session   
Connect-AzAccount    

# Set the tenant, subscription and environment for use in the rest of   
Set-AzContext -SubscriptionId $subscriptionID    
  
# Remove the resource group
Remove-AzResourceGroup -Name $resourceGroupName   

Consulte también

Archivos de datos de SQL Server en Microsoft Azure
Copias de seguridad de instantánea de archivos para archivos de base de datos de Azure
Copia de seguridad en URL de SQL ServerFirmas de acceso compartido, Parte 1: Descripción del modelo SAS
Creación de un contenedor
Establecer lista de control de acceso de contenedor
Obtención de ACLCredentials de contenedor (Motor de base de datos)
CREATE CREDENTIAL (Transact-SQL)
sys.credentials (Transact-SQL)
sp_delete_backup (Transact-SQL)
sys.fn_db_backup_file_snapshots (Transact-SQL)
sp_delete_backup_file_snapshot (Transact-SQL)Copias de seguridad de instantáneas de archivos para archivos de base de datos en Azure