Procedimientos recomendados y solución de problemas para la copia de seguridad en URL de SQL Server para Microsoft Azure Blob Storage

Se aplica a:SQL ServerAzure SQL Managed Instance

En este artículo se incluyen los procedimientos recomendados y sugerencias para la solución de problemas de copias de seguridad y restauraciones de SQL Server en Microsoft Azure Blob Storage.

Para obtener más información sobre cómo usar el servicio Azure Blob Storage para realizar operaciones de copia de seguridad o restauración de SQL Server, vea:

Administración de copias de seguridad

La lista siguiente incluye recomendaciones generales para administrar copias de seguridad:

  • Se recomienda usar un nombre de archivo único para cada copia de seguridad con el fin de evitar que se sobrescriban accidentalmente los blobs.

  • Al crear un contenedor, se recomienda que establezca el nivel de acceso en privado, de forma que solo los usuarios o las cuentas que puedan proporcionar la información de autenticación necesaria sean capaces de leer o escribir los blobs en el contenedor.

  • En el caso de bases de datos de SQL Server en una instancia de SQL Server que se ejecuta en una máquina virtual de Azure, use una cuenta de almacenamiento de la misma región que la máquina virtual para evitar costos de transferencia de datos entre las regiones. El uso de la misma región también garantiza un rendimiento óptimo para las operaciones de copia de seguridad y restauración.

  • Una actividad de copia de seguridad con errores puede dar como resultado un archivo de copia de seguridad no válido. Se recomienda identificar periódicamente las copias de seguridad con errores y eliminar los archivos blob. Para obtener más información, consulte Eliminar archivos de blob de copia de seguridad con concesiones activas.

  • El uso de la opción WITH COMPRESSION durante la copia de seguridad puede reducir al mínimo los costos de almacenamiento y los costos de transacciones de almacenamiento. También puede reducir el tiempo necesario para completar el proceso de copia de seguridad.

  • Establezca los argumentos MAXTRANSFERSIZE y BLOCKSIZE tal como se recomienda en Copia de seguridad en URL de SQL Server.

  • SQL Server es independiente del tipo de redundancia de almacenamiento que se usa. La copia de seguridad en blobs en páginas y blobs en bloques se admite para cada redundancia de almacenamiento (LRS/ZRS/GRS/RA-GRS/RA-GZRS, etc.).

Controlar archivos grandes

La operación de copia de seguridad de SQL Server emplea varios subprocesos para optimizar la transferencia de datos a Azure Blob Storage. Sin embargo, el rendimiento depende en varios factores, como el ancho de banda del ISV y el tamaño de la base de datos. Si piensa hacer copia de seguridad de bases de datos o grupos de archivos grandes desde una base de datos de SQL Server local, se recomienda que realice primero algunas pruebas de rendimiento. El SLA de Almacenamiento de Azure tiene unos tiempos máximos de procesamiento para los blobs que puede tener en cuenta.

Use la opción WITH COMPRESSION como se recomienda en la sección Administración de copias de seguridad, ya que es importante al realizar la copia de seguridad de archivos grandes.

Solucionar problemas para hacer la copia de seguridad de una dirección URL o restaurar desde ella

A continuación se indican algunas formas rápidas de solucionar errores al hacer copia de seguridad o restaurar desde Azure Blob Storage.

Para evitar errores debidos a opciones no admitidas o a limitaciones, consulte la lista de limitaciones y la información de compatibilidad con los comandos BACKUP y RESTORE del artículo Copia de seguridad y restauración de SQL Server con Microsoft Azure Blob Storage.

Error de inicialización

Las copias de seguridad en paralelo en el mismo blob produce errores en una de las copias de seguridad y hacen que aparezca un Error de inicialización .

  • En SQL Server 2016 (13.x) y versiones posteriores, se prefiere el blob en bloques para la copia de seguridad en la dirección URL.

  • Si usa blobs en páginas con BACKUP TO URL, puede usar la marca de seguimiento 3051 para activar el registro en un registro de errores específico con el siguiente formato en: BackupToUrl-\<instname>-\<dbname>-action-\<PID>.log, donde \<action> es una de las siguientes opciones:

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

También puede encontrar información si examina el visor de eventos de Windows, en los Registros de aplicaciones con el nombre SQLBackupToUrl.

La solicitud no se pudo realizar debido a un error de dispositivo de E/S.

Considere la posibilidad de usar COMPRESSION, MAXTRANSFERSIZE, BLOCKSIZE y varios argumentos de URL cuando realice copias de seguridad de bases de datos grandes. Consulte Realización de copias de seguridad de una base de datos de gran tamaño en Azure Blob Storage.

El error:

Msg 3202, Level 16, State 1, Line 1
Write on "https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak" failed:
1117(The request could not be performed because of an I/O device error.)
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

Una resolución de ejemplo:

BACKUP DATABASE TestDb
TO URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_1.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_2.bak'
WITH COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536;

Mensaje: La marca de archivo del dispositivo no está alineada

Al restaurar desde una copia de seguridad comprimida, puede aparecer el siguiente error:

SqlException 3284 occurred. Severity: 16 State: 5
Message Filemark on device 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak' is not aligned.
Reissue the Restore statement with the same block size used to create the backupset: '65536' looks like a possible value.

Para resolver este error, vuelva a emitir la instrucción RESTORE especificando BLOCKSIZE = 65536.

una actividad de copia de seguridad con errores puede dar como resultado blobs con concesiones activas

Error durante la copia de seguridad porque los blobs tienen una concesión activa: Failed backup activity can result in blobs with active leases.

Si se vuelve a intentar una instrucción de copia de seguridad, la operación de copia de seguridad puede producir un error similar a la salida siguiente:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request.

Si se intenta una instrucción de restauración en un archivo de blob de copia de seguridad que tiene una concesión activa, la operación de restauración produce un error similar al siguiente:

Exception Message: The remote server returned an error: (409) Conflict..

Cuando se produce ese error, es necesario eliminar los archivos de blob. Para obtener más información sobre este escenario y cómo corregir este problema, vea Eliminar archivos de blob de copia de seguridad con concesiones activas.

Error 50 del sistema operativo: no se admite la solicitud

Al realizar una copia de seguridad de una base de datos, es posible que vea el error Operating system error 50(The request is not supported) por los siguientes motivos:

  • La cuenta de almacenamiento especificada no es De uso general V1/V2.
  • El token de SAS tenía un símbolo ? al principio cuando se creó la credencial. Si es así, quítelo.
  • La conexión actual no puede conectarse a la cuenta de almacenamiento desde la máquina actual mediante el Explorador de Storage o SQL Server Management Studio (SSMS).
  • La directiva asignada al token de SAS ha expirado. Cree una nueva directiva mediante el Explorador de Azure Storage y cree un nuevo token de SAS mediante la directiva o modifique la credencial y e intente hacer la copia de seguridad de nuevo.
  • Falta el certificado de raíz en el almacén de certificado raíz de confianza. Para más información, vea Entidades de certificación raíz de Azure.

Errores de autenticación

WITH CREDENTIAL es una opción nueva que es necesaria para la copia de seguridad o la restauración con Azure Blob Storage.

He aquí algunos errores relacionados con las credenciales: The credential specified in the **BACKUP** or **RESTORE** command does not exist.

Para evitar este problema, puede incluir instrucciones T-SQL para crear la credencial si no existe ninguna en la instrucción de copia de seguridad. He aquí un ejemplo que puede usar:

IF NOT EXISTS (
   SELECT *
   FROM sys.credentials
   WHERE credential_identity = 'mycredential'
)
CREATE CREDENTIAL [<credential name>]
   WITH IDENTITY = 'mystorageaccount',
      SECRET = '<storage access key>';

La credencial existe pero el inicio de sesión usado para ejecutar el comando de copia de seguridad no tiene permisos de acceso a las credenciales. Use una cuenta en el rol db_backupoperator con los permisos Modificar cualquier credencial.

Compruebe los valores de clave y nombre de la cuenta de almacenamiento. La información almacenada en la credencial debe coincidir con los valores de propiedad de la cuenta de Azure Storage que se usa en las operaciones de copia de seguridad y restauración.

Errores 400 (solicitud incorrecta)

Con SQL Server 2012 (11.x), es posible que se produzca un error al realizar una copia de seguridad similar a la siguiente salida:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (400) Bad Request.

Esto se debe a la versión de TLS que admite la cuenta de Azure Storage. Cambie la versión de TLS admitida, o bien use la solución alternativa que se describe en KB4017023.

Errores de proxy

Si usa servidores proxy para tener acceso a Internet, pueden producirse los problemas siguientes:

Limitación de la conexión por los servidores proxy

Los servidores proxy pueden tener configuraciones que limitan el número de conexiones por minuto. Copia de seguridad en URL es un proceso multiproceso y, por tanto, puede sobrepasar este límite. Si esto ocurre, el servidor proxy elimina la conexión. Para resolver este problema, cambie la configuración de proxy para que SQL Server no utilice el proxy. A continuación se muestran algunos ejemplos de los tipos o mensajes de error que puede ver en el registro de errores:

Write on "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak" failed: Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.
A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Error could not be gathered from Remote Endpoint.

Msg 3013, Level 16, State 1, Line 2

BACKUP DATABASE is terminating abnormally.
BackupIoRequest::ReportIoError: write failure on backup device https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak'. Operating system error Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.

Si utiliza blobs en páginas y activa el registro detallado mediante la marca de seguimiento 3051, puede ver también el mensaje siguiente en los registros: HTTP status code 502, HTTP Status Message Proxy Error (The number of HTTP requests per minute exceeded the configured limit. Contact your ISA Server administrator.)

Configuración de proxy predeterminada no seleccionada

A veces la configuración predefinida no se realiza correctamente, lo que provoca errores de autenticación proxy como:

A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (407)* **Proxy Authentication Required.

Para resolver este problema, cree un archivo de configuración que permita al proceso Copia de seguridad en URL utilizar la configuración de proxy predeterminada mediante los pasos siguientes:

  1. Cree un archivo de configuración denominado BackuptoURL.exe.config con el contenido XML siguiente:

    <?xml version ="1.0"?>
    <configuration>
        <system.net>
            <defaultProxy enabled="true" useDefaultCredentials="true">
                <proxy usesystemdefault="true" />
            </defaultProxy>
        </system.net>
    </configuration>
    
  2. Coloque el archivo de configuración en la carpeta Binn de la instancia de SQL Server. Por ejemplo, si mi SQL Server está instalado en la unidad C del equipo, coloque el archivo de configuración en C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn.

  3. No se llama a BackuptoURL.exe cuando se usan claves SAS, pero se desencadena cuando se usa una clave de acceso. Asegúrese de usar las claves de acceso o puede recibir el siguiente error:

    Error 50 del sistema operativo (No se admite la solicitud)

Errores habituales y soluciones

Problema Solución
Error 3063: se ha producido un error al escribir en el archivo https://storageaccount/container/name.bak del dispositivo de blob en bloques de copia de seguridad. El dispositivo ha alcanzado el límite de bloques permitidos. Para corregir este problema, seccione el destino de copia de seguridad en varios archivos y asegúrese de usar los parámetros siguientes en el comando de copia de seguridad: COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536.
Error 3035: se produce un error en la copia de seguridad diferencial para una o varias bases de datos. Esto se produce si ha configurado el servicio Azure Backup para hacer una copia de seguridad de las bases de datos SQL o una instantánea de la máquina virtual (VM), que no crean una copia de seguridad de solo copia, lo que hace que se produzca un error en el plan de mantenimiento, el trabajo del agente de SQL o las copias de seguridad a petición. Para corregirlo, añada estas claves del Registro en las máquinas virtuales que alojan instancias de SQL Server en la clave del Registro [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT] y agregue "USEVSSCOPYBACKUP"="TRUE".
Error 3201: se produce el error 50 del sistema operativo (no se admite la solicitud) en la copia de seguridad. Regenerar el token de firma de acceso compartido (SAS) con el Explorador de Storage: puede crear una directiva mediante el Explorador de Azure Storage y crear un nuevo token de SAS con esa directiva desde el Explorador de Azure Storage. Vuelva a crear la credencial con este nuevo token de SAS generado desde Azure Storage e intente hacer una copia de seguridad de nuevo. Para más información, consulte Problemas conocidos con BACKUP TO URL. Asegúrese de que el grupo de seguridad de red (NSG)y el firewall permitan la conexión entrante y saliente en los puertos 1433 y 443.
Error 3271: error de copia de seguridad debido a que TLS genera el error "La copia de seguridad en dirección URL recibió una excepción del punto de conexión remoto". Esto puede ocurrir en las versiones 2012, 2014 y 2016 de SQL Server. La copia de seguridad en una URL del servicio Microsoft Azure Blob Storage no es compatible con TLS 1.2 y se puede corregir siguiendo las instrucciones en KB4017023.
Error 3271: la copia de seguridad en dirección URL recibió una excepción del punto de conexión remoto. Mensaje de excepción: No se ha podido resolver el nombre remoto. Verá este mensaje si se utilizaron una credencial, un secreto o una clave de SAS incorrectas para configurar la copia de seguridad. Elimine la credencial y vuelva a crearla. Para SQL Server 2012/2014, use la identidad de la cuenta de almacenamiento y la clave de acceso y para SQL Server 2016 y versiones posteriores, use SAS.
Error 18210: Excepción "El servidor remoto devolvió un error: (400) Solicitud incorrecta". Para resolverlo, cambie la versión de TLS mínima para la cuenta de almacenamiento a 1.0 (Cuenta de almacenamiento>Configuración>Versión de TLS mínima) o habilite la criptografía segura como se documenta en KB4017023.
Mensaje de excepción: Error en el servidor remoto: (412) Actualmente hay una concesión en el blob y no se especificó ningún identificador de concesión en la solicitud. Identifique los blobs en el Explorador de Azure Storage con un tamaño de 1 TB, interrumpa la concesión, elimine el blob y vuelva a intentar la operación de copia de seguridad.
Error: el servidor remoto devolvió un error: (403) Prohibido. Vuelva a crear la cuenta de almacenamiento, la credencial y el token de SAS para resolver el problema.
Se produce un error en una copia de seguridad de base de datos de 1 TB en SQLServer 2012/2014. Las copias de seguridad de 1 TB son una limitación conocida en los blobs en páginas anteriores a SQL Server 2016 (13.x). Use la compresión de copia de seguridad añadiendo la cláusula "WITH COMPRESSION" a la instrucción de copia de seguridad de T-SQL o actualice la instancia de SQL Server a SQL Server 2016 (13.x) o versiones posteriores.
Error: la copia de seguridad en dirección URL recibió una excepción del punto de conexión remoto. Mensaje de excepción: el servidor remoto devolvió un error: (416) El intervalo de páginas especificado no es válido. Es posible que aparezca este error si está en SQL Server 2012 (11.x) y SQL Server 2014 (12.x) y si el tamaño de la copia de seguridad aumenta a 1 TB. Separe los archivos de copia de seguridad o use la compresión de copia de seguridad para resolverlos.
Error de copia de seguridad al usar un plan de mantenimiento. Hay algunos errores con el plan de mantenimiento. Pruebe a usar T-SQL para ejecutar la copia de seguridad. Si T-SQL funciona, puede crear un trabajo del Agente SQL para ejecutarlo y hacer una copia de seguridad de las bases de datos.
Error de copia de seguridad debido a que se han alcanzado los límites de la máquina virtual. Si recibe errores que indican que se alcanzó el límite de IOPS o de máquina virtual del disco, es posible que las copias de seguridad se ralenticen o produzcan errores. Para supervisar los límites de IOPS o de máquina virtual, use las métricas de Azure Monitor y cambie el tamaño de la máquina virtual o el disco si es necesario para corregir el problema.
El servidor remoto devolvió un error: (409) Conflicto para SQL Server 2012/2014" Las cuentas de almacenamiento con espacio de nombres jerárquico están equipadas para blobs en bloques, no para blobs en páginas. No deben usarse las cuentas de almacenamiento sin esta característica para BACKUP TO URL en SQL Server 2014 (12.x).