Compartir por


Procedimientos recomendados y solución de problemas para la copia de seguridad en URL de SQL Server para el almacenamiento de objetos compatible con S3

Se aplica a: SQL Server 2022 (16.x)

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 el almacenamiento de objetos compatible con S3.

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:

Solución de problemas y causas comunes de errores

A continuación se indican algunas formas rápidas de solucionar errores al hacer copias de seguridad en el almacenamiento de objetos compatible con S3 o restaurar desde él. Para evitar errores debido a opciones o límites no admitidos, consulte Copia de seguridad y restauración de SQL con almacenamiento de objetos compatible con S3.

Comprobación de la correcta formación de una dirección URL

Este es un ejemplo de una dirección URL de host virtual formada correctamente al emitir una consulta de copia de seguridad de T-SQL como se indica a continuación:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<bucketName>.<virtualHost>/<pathToBackup>/<backupFileName>' 

O bien, para el estilo de ruta de acceso de URL:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<domainName>/<bucketName>/<pathToBackup>/<backupFileName>';

Revise en la dirección URL:

  1. La dirección URL comienza con el esquema s3://.

  2. El host virtual de almacenamiento de S3 <virtualHost> o el dominio de servidor <domainName> existe y se ejecuta utilizando HTTPS. Una entidad de certificación instalada en el host del sistema operativo de SQL Server validará el punto de conexión.

  3. <bucketName> es el nombre de este cubo donde se escribe la copia de seguridad. Debe crearse antes de ejecutar la instrucción T-SQL de copia de seguridad. La instrucción T-SQL de copia de seguridad no crea el cubo para el cliente. Por ejemplo, si el usuario no crea el cubo "nonExistingBucket" de antemano y ejecuta una instrucción T-SQL de la siguiente manera:

    BACKUP DATABASE AdventureWorks2022
    TO URL = 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak';
    

    Una dirección URL que no tiene el formato correcto puede devolver lo siguiente:

    Msg 3201, Level 16, State 1, Line 50
    Cannot open backup device 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak'. Operating system error 50(The request is not supported.).
    Msg 3013, Level 16, State 1, Line 50
    BACKUP DATABASE is terminating abnormally.
    
  4. No es necesario que <pathToBackup> exista antes de ejecutar la instrucción T-SQL de copia de seguridad. Se crea automáticamente en el servidor de almacenamiento. Por ejemplo, si el usuario crea el cubo "existingBucket" de antemano y no la ruta de acceso 'existingBucket/sqlbackups', lo siguiente se seguirá ejecutando correctamente:

BACKUP DATABASE AdventureWorks2022
TO URL =  's3://<your-endpoint>/existingBucket/sqlbackups/AdventureWorks2022.bak';

Creación de una credencial de nivel de servidor antes de ejecutar la copia de seguridad o restauración

Antes de ejecutar consultas Transact-SQL de copia de seguridad o restauración en el almacenamiento compatible con S3, debes crear una credencial de nivel de servidor. Esta credencial debe contener la clave de acceso y la clave secreta configuradas por los clientes en su servidor de almacenamiento de objetos compatible con S3 antes de emitir consultas de copia de seguridad y restauración.

Un ejemplo de una credencial que debe crearse para la dirección URL s3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak sería el siguiente:

CREATE CREDENTIAL [s3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak]
WITH IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>';

En esta instrucción <AccessKeyID> no se permite que haya un carácter :. Si la credencial no se crea antes de ejecutar la consulta de copia de seguridad o restauración, el usuario verá el siguiente mensaje de error:

Msg 3201, Level 16, State 1, Line 50
Cannot open backup device 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'. Operating system error 50(The request is not supported.).
Msg 3013, Level 16, State 1, Line 50
BACKUP DATABASE is terminating abnormally.

No es necesario que el nombre de la credencial coincida con la ruta URL exacta. Este es un ejemplo de cómo funcionará la búsqueda de credenciales. Si necesitamos consultar la ruta s3://10.193.16.183:9000/myS3Bucket/sqlbackups/AdventureWorks2022.bak, se probarán los siguientes nombres de credenciales:

  1. s3://10.193.16.183:8787/myS3Bucket/sqlbackups/AdventureWorks2022.bak
  2. s3://10.193.16.183:8787/myS3Bucket/sqlbackups
  3. s3://10.193.16.183:8787/myS3Bucket

Si hay varias credenciales que coinciden con la búsqueda, como la más específica s3://10.193.16.183:8787/myS3Bucket/sqlbackups y la más genérica s3://10.193.16.183:8787/myS3Bucket, elegiremos la más específica. Esto le permitirá establecer un control de acceso más granular a nivel de directorio para las carpetas a las que se puede acceder desde SQL Server.

Opción no admitida FILE_SNAPSHOT

Actualmente, la opción de T-SQL de copia de seguridad FILE_SNAPSHOT no se admite para el almacenamiento de objetos compatible con S3. Se trata de una opción específica de Azure Blob Storage.

Si el usuario ejecuta la siguiente instrucción de Transact-SQL, por ejemplo:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'
WITH FILE_SNAPSHOT;

Se devuelve un mensaje de error que indica lo siguiente:

Msg 3073, Level 16, State 1, Line 62
The option WITH FILE_SNAPSHOT is only permitted if all database files are in Azure Storage.
Msg 3013, Level 16, State 1, Line 62
BACKUP DATABASE is terminating abnormally.

Franja de copia de seguridad superior a 100 GB

Actualmente, el tamaño de un único archivo de copia de seguridad creado por los clientes en el almacenamiento de objetos compatible con S3 durante una copia de seguridad no puede superar los 100 GB por archivo, con el valor predeterminado MAXTRANSFERSIZE. Si la franja de copia de seguridad va más allá de 100 GB, la instrucción de sintaxis de T-SQL de copia de seguridad produce el siguiente mensaje de error:

Msg 3202, Level 16, State 1, Line 161
Write on 's3://<endpoint>:<port>/<bucket>/<path>/<db_name>.bak' failed: 87(The parameter is incorrect.)
Msg 3013, Level 16, State 1, Line 161
BACKUP DATABASE is terminating abnormally.

Las instrucciones actuales para las copias de seguridad de grandes bases de datos de los usuarios es utilizar varias franjas para la copia de seguridad de la base de datos, cada una de ellas con un tamaño permitido inferior o igual a 100 GB. La instrucción T-SQL de copia de seguridad admite el seccionamiento de hasta 64 direcciones URL, por ejemplo:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/<path>/<db_file>_1.bak',
URL = 's3://<endpoint>:<port>/<bucket>/<path>/<db_file>_2.bak';

Una opción alternativa para los usuarios es usar la opción "COMPRESSION":

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'
WITH COMPRESSION;

Longitud máxima de la dirección URL

El motor de copia de seguridad y restauración limita la longitud total de la dirección URL a 259 bytes. Esto significa que s3://hostname/objectkey no debe superar los 259 caracteres. Si se deja de lado s3://, el usuario puede especificar la longitud de la ruta de acceso (nombre de host + clave de objeto) para que tenga entre 259 - 5 = 254 caracteres. Consulte Copia de seguridad en dirección URL de SQL Server: SQL Server. La instrucción de sintaxis de T-SQL de copia de seguridad produce el siguiente mensaje de error:

SQL Server has a maximum limit of 259 characters for a backup device name. The BACKUP TO URL consumes 36 characters for the required elements used to specify the URL - 'https://.blob.core.windows.net//.bak', leaving 223 characters for account, container, and blob names put together'

Corrección del sesgo del reloj

El almacenamiento S3 podría rechazar la conexión, lo que devuelve un error "InvalidSignatureException" a SQL Server siempre que la diferencia de tiempo entre el host de SQL y el servidor S3 sea mayor que 15 minutos. En SQL Server se muestra como:

Msg 3201, Level 16, State 1, Line 28
Cannot open backup device '<path>'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 28
BACKUP DATABASE is terminating abnormally.

Compatibilidad de SQL Server en Linux

SQL Server utiliza WinHttp para implementar el cliente de las API REST de HTTP que utiliza. Se basa en el almacén de certificados del sistema operativo para las validaciones de los certificados TLS que presenta el punto de conexión HTTP(s). Sin embargo, SQL Server en Linux delega la validación del certificado en SQLPAL, que valida los certificados HTTPS de los puntos de conexión con el certificado proporcionado con PAL. Por lo tanto, los certificados autofirmados proporcionados por el cliente no se pueden usar en Linux para la validación HTTPS.

Durante la copia de seguridad o restauración, el cliente recibe el siguiente mensaje de error en Linux:

Msg 3201, Level 16, State 1, Line 20
Cannot open backup device 's3://<endpoint>/<bucket>/testingDB.bak'. Operating system error 12175(failed to retrieve text for this error. Reason: 15105).
Msg 3013, Level 16, State 1, Line 20
BACKUP DATABASE is terminating abnormally.

Para solucionar este problema, se debe crear la siguiente ubicación predefinida: /var/opt/mssql/security/ca-certificates. Coloque certificados autofirmados o certificados no enviados con PAL en esta ubicación. SQL Server lee los certificados de la carpeta durante el inicio y los añade al almacén de confianza de PAL.

Se pueden almacenar hasta 50 archivos en esta ubicación; si no se crea la carpeta, cuando se inicia SQL Server, se mostrará el registro de errores de SQL Server:

2022-02-05 00:32:10.86 Server      Installing Client TLS certificates to the store.
2022-02-05 00:32:10.88 Server      Error searching first file in /var/opt/mssql/security/ca-certificates: 3(The system cannot find the path specified.)

Bloqueo de objetos: no se admite la retención de eliminación

La copia de seguridad de SQL Server en la característica de almacenamiento de objetos compatible con S3 no admite el bloqueo de objetos, también denominada la característica de Eliminar retención. El bloqueo de objeto impide que los archivos se eliminen o sobrescriban durante el período de retención.

La ubicación del cubo y la carpeta a los que se dirige la operación de copia de seguridad no deben tener habilitado el bloqueo de objetos. Si esta característica está habilitada y configurada en el almacenamiento de objetos compatible con S3, se produce un error en la operación de copia de seguridad con el mensaje siguiente:

Msg 3202, Level 16, State 1, Line 13
Write on 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak' failed: 87 (The parameter is incorrect).
Msg 3013, Level 16, State 1, Line 13
BACKUP DATABASE is terminating abnormally.