Compartir a través de


Tutorial: Uso de Azure Blob Storage con SQL Server

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores

Este tutorial le ayuda a comprender cómo usar Azure Blob Storage para archivos de datos y copias de seguridad en SQL Server 2016 (13.x) y versiones posteriores.

La compatibilidad con Azure Blob Storage en SQL Server se introdujo en SQL Server 2012 (11.x) Service Pack 1 CU2 y se ha mejorado en versiones posteriores. 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 archivos de datos de SQL Server en Azure Blob Storage en varias secciones. Cada sección se centra en una tarea específica y debe completar las secciones en secuencia. 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. A continuación, se realiza una copia de seguridad de una base de datos en Blob Storage y se restaura en una máquina virtual de Azure. Después, use la copia de seguridad del registro de transacciones de instantáneas de archivos de SQL Server para restaurar a un momento dado y a una nueva base de datos. Por último, el tutorial muestra el uso de procedimientos almacenados y funciones del sistema de metadatos para ayudarle a comprender y trabajar con copias de seguridad de instantáneas de archivos.

Prerrequisitos

Para completar este tutorial, debe estar familiarizado con los conceptos de copia de seguridad y restauración de SQL Server y la sintaxis de T-SQL.

Para usar este tutorial, necesita una cuenta de almacenamiento de Azure, SQL Server Management Studio (SSMS), acceso a una instancia de SQL Server local, acceso a una máquina virtual (VM) de Azure que ejecuta una instancia de SQL Server 2016 (13.x) o una versión posterior, y una AdventureWorks2022 base de datos. Además, la cuenta que se usa para emitir los BACKUP comandos y RESTORE debe estar en el rol de base de datos db_backupoperator con la modificación de los permisos de credenciales .

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 usa para este tutorial.

1- Creación de una directiva de acceso almacenada y 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 Azure Blob Storage mediante una directiva de acceso almacenada.

Nota:

Este script se escribe mediante Azure PowerShell 5.0.10586.

Una firma de acceso compartido es un URI que concede derechos de acceso restringido a contenedores, blobs, colas o tablas. Una directiva de acceso almacenada proporciona un nivel adicional de control sobre las firmas de acceso compartido en el lado 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 al menos derechos de lectura, escritura y lista.

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

  • Grupo de recursos
  • Cuenta de almacenamiento
  • Contenedor de Azure Blob Storage
  • Directiva SAS

Este script comienza declarando varias variables para especificar los nombres de los recursos anteriores y los nombres de los siguientes valores de entrada necesarios:

  • Un nombre de prefijo usado para asignar nombres a otros objetos de recursos
  • Nombre de suscripción
  • Ubicación del centro de datos

El script se completa mediante la generación de la instrucción adecuada CREATE CREDENTIAL que se usa en 2: Creación de una credencial de SQL Server mediante una firma de acceso compartido. Esta instrucción se copia en el Portapapeles automáticamente y se envía a la consola para que pueda ver.

Para crear una directiva en el contenedor y generar una firma de acceso compartido (SAS), siga estos pasos:

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

  2. Edite y ejecute el siguiente script:

    # 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
    Set-Clipboard -Value $tSql
    Write-Host $tSql
    
    # Once you're done with the tutorial, remove the resource group to clean up the resources.
    # Remove-AzResourceGroup -Name $resourceGroupName
    
  3. Una vez completado el script, la instrucción está en el CREATE CREDENTIAL Portapapeles para su uso en la sección siguiente.

2- Creación de una credencial de SQL Server mediante una firma de acceso compartido

En esta sección, creará una credencial para almacenar la información de seguridad, que SQL Server usa para escribir y leer desde el contenedor de Azure Blob Storage que creó 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 del URI del contenedor de Azure Blob Storage y la firma de acceso compartido para este contenedor.

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

  1. Inicie SSMS.

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

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

    El script tiene 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://<storage-account>.blob.core.windows.net/<container-name>]
    -- 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 la 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 en la máquina virtual de Azure.

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

  7. Repita los pasos 5 y 6 para cualquier instancia adicional de SQL Server que desee tener acceso al contenedor.

3 - Copia de seguridad de base de datos en dirección URL

En esta sección, se realiza una copia de seguridad de la base de datos de la AdventureWorks2022 instancia de SQL Server en el contenedor que creó en la sección 1.

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

  1. Inicie SSMS.

  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server en la máquina virtual de Azure.

  3. Copie y pegue el siguiente script Transact-SQL en la ventana de consulta. Modifique la dirección URL correctamente para el nombre de la cuenta de almacenamiento y el contenedor que especificó en la sección 1 y, a continuación, 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 AdventureWorks2022
        SET RECOVERY FULL;
    
    -- Back up the full AdventureWorks2022 database to the container that you created in section 1
    BACKUP DATABASE AdventureWorks2022
        TO URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak';
    
  4. Abra el Explorador de objetos y conéctese a Azure Storage mediante la cuenta de almacenamiento y la clave de 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.

    Captura de pantalla del proceso de varios pasos para conectarse a la cuenta de Azure Storage.

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

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

Nota:

Para simplificar este tutorial, usamos el mismo contenedor para los archivos de datos y de registro que usamos para la copia de seguridad de la base de datos. En un entorno de producción, es probable que también use varios contenedores y, con frecuencia, varios archivos de datos. También puede considerar la posibilidad de quitar la copia de seguridad en varios blobs para aumentar el rendimiento de la copia de seguridad al realizar una copia de seguridad de una base de datos grande.

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

  1. Inicie SSMS.

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

  3. Copie y pegue el siguiente script Transact-SQL en la ventana de consulta. Modifique la dirección URL correctamente para el nombre de la cuenta de almacenamiento y el contenedor que especificó en la sección 1 y, a continuación, ejecute este script.

    -- Restore AdventureWorks2022 from URL to SQL Server instance using Azure Blob Storage for database files
    RESTORE DATABASE AdventureWorks2022
        FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak'
    WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Data.mdf',
         MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Log.ldf';
         --, REPLACE
    
  4. Abra el Explorador de objetos y conéctese a la instancia de Azure SQL Server.

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

    1. Haga clic con el botón derecho en AdventureWorks2022 y seleccione Propiedades.

    2. Seleccione Archivos y compruebe que las rutas de acceso de los dos archivos de base de datos son direcciones URL que apuntan a blobs en el contenedor de Azure Blob Storage (seleccione Cancelar cuando haya terminado).

    Captura de pantalla de SSMS de la base de datos AdventureWorks2022 en la máquina virtual de Azure.

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

    1. Expanda Contenedores, expanda el contenedor que creó en la sección 1 y compruebe que el AdventureWorks2022_Data.mdf y AdventureWorks2022_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).

    Captura de pantalla del Explorador de objetos en SSMS que muestra los archivos de datos dentro del contenedor, en Azure debajo de una entrada de instancia de SQL Server.

5- 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 en la AdventureWorks2022 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 más información sobre las copias de seguridad de instantáneas de archivos, consulte File-Snapshot Backups for Database Files en Azure.

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

  1. Inicie SSMS.

  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server del motor de base de datos en 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; vuelva a ejecutar este script en el paso 5). Este procedimiento almacenado del sistema le permite ver las copias de seguridad de instantáneas de archivos existentes para cada archivo que comprende una base de datos especificada. Puede ver 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('AdventureWorks2022');
    
  4. Copie y pegue el siguiente script Transact-SQL en la ventana de consulta. Modifique la dirección URL correctamente para el nombre de la cuenta de almacenamiento y el contenedor que especificó en la sección 1 y, a continuación, ejecute este script. Observe la rapidez con la que se produce esta copia de seguridad.

    -- Backup the AdventureWorks2022 database with FILE_SNAPSHOT
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Azure.bak'
       WITH FILE_SNAPSHOT;
    
  5. Después de comprobar que el script del paso 4 se ejecutó correctamente, vuelva a ejecutar el siguiente script. La operación de copia de seguridad de instantáneas de archivos en el paso 4 generó instantáneas de archivo tanto del archivo de datos como del registro.

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

    Captura de pantalla de SSMS de los resultados de fn_db_backup_file_snapshots, en la que se muestran las instantáneas.

  6. En el Explorador de objetos, en la instancia de SQL Server de la máquina virtual de Azure, expanda el nodo Bases de datos y compruebe que la AdventureWorks2022 base de datos se ha restaurado en 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 AdventureWorks2022_Azure.bak 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).

    Captura de pantalla del Explorador de objetos en SSMS que muestra la copia de seguridad de instantáneas en Azure.

6- Generación del registro de actividad y copia de seguridad mediante la copia de seguridad de instantáneas de archivos

En esta sección, generará actividad en la AdventureWorks2022 base de datos y creará periódicamente copias de seguridad del registro de transacciones mediante copias de seguridad de instantáneas de archivos. Para más información sobre el uso de copias de seguridad de instantáneas de archivos, consulte File-Snapshot Backups for Database Files en Azure.

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

  1. Inicie SSMS.

  2. Abra dos nuevas ventanas de consulta y conéctese a la instancia de SQL Server del motor de base de datos en la máquina virtual de Azure.

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

    -- Verify row count at start
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    
  4. Copie y pegue los dos scripts siguientes Transact-SQL en las dos ventanas de consulta independientes. Modifique la dirección URL adecuadamente para el nombre de la cuenta de almacenamiento y el contenedor que especificó en la sección 1 y, a continuación, ejecute estos scripts simultáneamente en ventanas de consulta independientes. Estos scripts tardan unos minutos en completarse.

    -- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2022 database in batches of 75
    DECLARE @count AS INT = 1, @inner AS INT;
    
    WHILE @count < 400
        BEGIN
            BEGIN TRANSACTION;
            SET @inner = 1;
            WHILE @inner <= 75
                BEGIN
                    INSERT INTO AdventureWorks2022.Production.Location (
                        Name,
                        CostRate,
                        Availability,
                        ModifiedDate
                    )
                    VALUES (NEWID(), .5, 5.2, GETDATE());
                    SET @inner = @inner + 1;
                END
            COMMIT TRANSACTION;
            WAITFOR DELAY '00:00:01';
            SET @count = @count + 1;
        END
    
    SELECT COUNT(*)
    FROM AdventureWorks2022.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 AdventureWorks2022.Production.Location);
             SET @device = 'https://<storage-account>.blob.core.windows.net/<container-name>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak';
             BACKUP LOG AdventureWorks2022 TO URL = @device WITH FILE_SNAPSHOT;
             SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
          WAITFOR DELAY '00:1:00';
             SET @count = @count + 1;
       END;
    
  5. Revise la salida del primer script y observe que el recuento final de filas es ahora 29 939.

    Captura de pantalla de SSMS que muestra un conjunto de resultados con recuento de filas de 29 939.

  6. Revise la salida del segundo script y observe que cada vez que se ejecuta la BACKUP LOG instrucción 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. Una vez completado el segundo script, observe que ahora hay un total de 16 instantáneas de archivo, 8 para cada archivo de base de datos: uno de la BACKUP DATABASE instrucción y otro para cada ejecución de la BACKUP LOG instrucción.

    Captura de pantalla de SSMS que muestra el conjunto de resultados del historial de instantáneas de copia de seguridad.

  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 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).

    Captura de pantalla del Explorador de objetos en SSMS con varias instantáneas en Azure Container.

7- Restauración de una base de datos a un momento dado

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

Con las copias de seguridad tradicionales, para realizar la restauración a un momento dado, tendría que usar la copia de seguridad completa de la base de datos, quizás una copia de seguridad diferencial y todos los archivos de registro de transacciones hasta y justo después del momento en el que desea 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 las publicaciones de objetivo que enmarcan el tiempo al que desea restaurar. Solo necesita dos conjuntos de copia de seguridad de instantáneas de archivos de registro 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 especificado a partir de conjuntos de copia de seguridad de instantáneas de archivos, siga estos pasos:

  1. Inicie SSMS.

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

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

    -- Verify row count at start
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    

    Captura de pantalla de los resultados de SSMS que muestran un recuento de filas de 29 939.

  4. Copie y pegue el siguiente script 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 necesita para este script. Modifique la dirección URL adecuadamente 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 STOPAT hora en el formato de June 26, 2018 01:48 PMy, a continuación, ejecute este script. Tarda 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 AdventureWorks2022
        SET SINGLE_USER
        WITH ROLLBACK IMMEDIATE;
    
    RESTORE DATABASE AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<firstbackupfile>.bak'
        WITH NORECOVERY, REPLACE;
    
    RESTORE LOG AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<secondbackupfile>.bak'
        WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM';
    
    ALTER DATABASE AdventureWorks2022
        SET MULTI_USER;
    
    -- get new count
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    
  5. Revise el resultado. Después de restaurar 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 (el recuento de filas puede variar).

    Captura de pantalla de 18 000 filas.

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

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

En este escenario, va a realizar una restauración a una instancia de SQL Server en una máquina virtual diferente para los fines de análisis y informes empresariales. La restauración a una instancia diferente de una máquina virtual diferente descarga la carga de trabajo en una máquina virtual dedicada y de tamaño para este propósito, quitando sus requisitos de recursos del sistema transaccional.

La restauración a partir de una copia de seguridad del registro de transacciones con copia de seguridad de instantáneas de archivos es rápida, considerablemente más rápida que con las copias de seguridad de streaming tradicionales. Con las copias de seguridad de streaming tradicionales, debe usar 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 nueva copia de seguridad completa de la base de datos). Sin embargo, con las copias de seguridad del registro 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 cualquier otra copia de seguridad de registros adyacente para la restauración a un momento dado entre dos tiempos de copia de seguridad de registros). Para estar claro, solo necesita un conjunto de copia de seguridad de instantáneas de archivos de registro 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 nueva base de datos desde una copia de seguridad del registro de transacciones mediante la copia de seguridad de instantáneas de archivos, siga estos pasos:

  1. Inicie SSMS.

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

    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: Creación de una credencial de SQL Server mediante una firma de acceso compartido. Si desea restaurar en otro contenedor, siga los pasos descritos en 1: Creación de una directiva de acceso almacenada y almacenamiento de acceso compartido para el nuevo contenedor.

  3. Copie y pegue el siguiente script Transact-SQL en la ventana de consulta. Seleccione el archivo de copia de seguridad de registros que desea usar. Modifique la dirección URL adecuadamente para el nombre de la cuenta de almacenamiento y el contenedor que especificó en la sección 1, proporcione el nombre del archivo de copia de seguridad de registros y, a continuación, ejecute este script.

    -- restore as a new database from a transaction log backup file
    RESTORE DATABASE AdventureWorks2022_EOM
        FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<logbackupfile.bak>'
    WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Data.mdf',
         MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Log.ldf',
         RECOVERY;
         --, REPLACE
    
  4. Revise la salida para comprobar que la restauración se realizó 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 (actualice 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.

    Captura de pantalla del explorador de almacenamiento de SQL Server Management Studio de contenedores de Azure que muestra los archivos de datos y de registro de la nueva base de datos.

9- Administración de 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 sp_delete_backup . Este procedimiento almacenado del sistema elimina el archivo de copia de seguridad y la instantánea de archivo en cada archivo de base de datos asociado a este conjunto de copia de seguridad.

Nota:

Si intenta eliminar un conjunto de copia de seguridad mediante la eliminación del archivo de copia de seguridad del contenedor de Azure Blob Storage, solo se elimina el propio archivo de copia de seguridad, las instantáneas de archivo asociadas permanecen. Si se encuentra en este escenario, use la función del sistema sys.fn_db_backup_file_snapshots para identificar la dirección URL de las instantáneas de archivo huérfanas y usar el procedimiento almacenado del sistema sp_delete_backup_file_snapshot 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áneas de archivos, siga estos pasos:

  1. Inicie SSMS.

  2. Abra una nueva ventana de consulta y conéctese a la instancia de SQL Server del motor de base de datos en la máquina virtual de Azure (o a cualquier instancia de SQL Server con permisos para leer y escribir en este contenedor).

  3. Copie y pegue el siguiente script Transact-SQL en la ventana de consulta. Seleccione la copia de seguridad de registros que desea eliminar junto con sus instantáneas de archivo asociadas. Modifique la dirección URL adecuadamente para el nombre de la cuenta de almacenamiento y el contenedor que especificó en la sección 1, proporcione el nombre del archivo de copia de seguridad de registros y, a continuación, ejecute este script.

    EXECUTE sys.sp_delete_backup 'https://<storage-account>.blob.core.windows.net/<container-name>/tutorial-21764-20181003205236.bak';
    
  4. En el Explorador de objetos, conéctese a Azure Storage.

  5. Expanda Contenedores, expanda el contenedor que creó en la sección 1 y compruebe que el archivo de copia de seguridad que usó en el paso 3 ya no aparece en este contenedor (actualice el nodo según sea necesario).

    Captura de pantalla del explorador de almacenamiento de SQL Server Management Studios que muestra los contenedores de Azure y la eliminación del blob de copia de seguridad del registro de transacciones.

  6. 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 archivo.

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

    Captura de pantalla del panel de resultados de SSMS que muestra dos instantáneas de archivo eliminadas.

10- Eliminación de recursos

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

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