Sauvegarde SQL Server sur URL pour le stockage d’objets compatible S3

S’applique à : SQL Server 2022 (16.x)

Cet article présente les concepts, exigences et composants nécessaires pour utiliser le stockage d’objets compatible S3 comme destination de sauvegarde. La fonctionnalité de sauvegarde et de restauration est similaire d’un point de vue conceptuel à la sauvegarde SQL Server sur URL pour le Stockage Blob Azure comme type d’unité de sauvegarde.

Pour plus d’informations sur les plateformes prises en charge, consultez Fournisseurs de stockage d’objets compatible S3.

Vue d’ensemble

SQL Server 2022 (16.x) introduit l’intégration du stockage d’objets à la plateforme de données, ce qui vous permet d’intégrer SQL Server au stockage d’objets compatible S3 en plus de Stockage Azure. Pour fournir cette intégration, SQL Server prend en charge un connecteur S3, qui utilise l’API REST S3 pour se connecter à n’importe quel fournisseur de stockage d’objets compatible S3. SQL Server 2022 (16.x) étend la syntaxe BACKUP/RESTORE TO/FROM URL existante en ajoutant la prise en charge du nouveau connecteur S3 à l’aide de l’API REST.

Les URL pointant vers des ressources compatibles S3 sont précédées d’un préfixe s3:// pour indiquer que le connecteur S3 est utilisé. Les URL commençant par s3:// supposent toujours que le protocole sous-jacent est https.

Limitation du nombre de composants et de la taille des fichiers

Pour stocker des données, le fournisseur de stockage d’objets compatible S3 doit fractionner des fichiers dans plusieurs blocs appelés composants, comme pour les objets blob de blocs dans Stockage Blob Azure.

Chaque fichier peut être fractionné jusqu’à 10 000 parties, chaque taille de partie est comprise entre 5 Mo et 20 Mo, cette plage est contrôlée par la commande T-SQL BACKUP via le paramètre MAXTRANSFERSIZE. La valeur par défaut de MAXTRANSFERSIZE est 10 Mo, ce qui signifie que la taille par défaut de chaque partie est de 10 Mo.

La taille maximale prise en charge d’un seul fichier est le résultat de 10 000 parties × MAXTRANSFERSIZE. Il est nécessaire, pour sauvegarder un fichier plus volumineux, de le fractionner ou de le répartir sur plusieurs URL (64 maximum). La taille maximale finale prise en charge d’un fichier est de 10 000 parties × MAXTRANSFERSIZE × URL.

Remarque

L’utilisation de COMPRESSION est requise pour modifier les MAXTRANSFERSIZE valeurs.

Prérequis pour le point de terminaison S3

Le point de terminaison S3 doit être configuré comme suit :

  • Le protocole TLS doit être configuré. Il est supposé que toutes les connexions sont transmises de manière sécurisée par le protocole HTTPS et non HTTP. Le point de terminaison est validé par un certificat installé sur l’hôte du système d’exploitation SQL Server.
  • Informations d’identification créées sur le stockage d’objets compatible S3 avec les autorisations appropriées pour effectuer l’opération. L’utilisateur et le mot de passe créés sur la couche de stockage sont nommés et Access Key IDSecret Key ID. Vous devez vous authentifier sur le point de terminaison S3.
  • Au moins un compartiment a été configuré. Les compartiments ne peuvent pas être créés ou configurés à partir de SQL Server 2022 (16.x).

Sécurité

Autorisations de sauvegarde

Pour connecter SQL Server au stockage d’objets compatible S3, deux ensembles d’autorisations doivent être établis, un sur SQL Server et également sur la couche de stockage.

Sur SQL Server, le compte d’utilisateur utilisé pour émettre des commandes BACKUP ou RESTORE doit se trouver dans le rôle de base de données db_backupoperator avec modifier les autorisations d’informations d’identification .

Sur la couche de stockage :

  • Dans AWS S3, créez un rôle personnalisé et indiquez spécifiquement l’API S3 qui nécessite un accès. La sauvegarde et la restauration nécessitent ces autorisations : ListBucket (Parcourir), PutObject (Écriture - pour la sauvegarde).
  • Dans un autre stockage compatible S3, l’utilisateur (Access Key ID) doit disposer des autorisations ListBucket et WriteOnly .

Autorisations de restauration

Si la base de données restaurée n'existe pas, l'utilisateur doit posséder les autorisations CREATE DATABASE afin de pouvoir exécuter RESTORE. Si la base de données existe, les autorisations RESTORE reviennent par défaut aux membres des rôles serveur fixes sysadmin et dbcreator, et au propriétaire (dbo) de la base de données.

Les autorisations RESTORE sont attribuées aux rôles dont les informations d'appartenance sont toujours immédiatement accessibles à partir du serveur. Étant donné que l’appartenance au rôle de base de données fixe ne peut être contrôlée que quand la base de données est accessible et non endommagée, ce qui n’est pas toujours le cas lorsque RESTORE est exécuté, les membres du rôle de base de données fixe db_owner ne détiennent pas d’autorisations RESTORE.

Sur la couche de stockage :

  • Dans AWS S3, créez un rôle personnalisé et indiquez spécifiquement l’API S3 qui nécessite un accès. La sauvegarde et la restauration nécessitent ces autorisations : ListBucket (Parcourir), GetObject (lecture - pour restauration).
  • Dans un autre stockage compatible S3, l’utilisateur (Access Key ID) doit disposer des autorisations ListBucket et ReadOnly .

Fonctionnalités prises en charge

Vue d’ensemble générale des fonctionnalités prises en charge pour BACKUP et RESTORE:

  1. Un seul fichier de sauvegarde peut atteindre 200 000 Mio par URL (avec MAXTRANSFERSIZE défini sur 20 Mo).
  2. Les sauvegardes peuvent être réparties sur un maximum de 64 URL.
  3. La mise en miroir est prise en charge, mais uniquement entre les URL. La mise en miroir à l’aide de l’URL et du DISQUE n’est pas prise en charge.
  4. La compression est prise en charge et recommandée.
  5. Le chiffrement est pris en charge.
  6. La restauration à partir d’une URL avec stockage d’objets compatible S3 ne présente aucune limitation de taille.
  7. Lorsque vous restaurez une base de données, la MAXTRANSFERSIZE valeur affectée au cours de la phase de sauvegarde est déterminée.
  8. Les URL peuvent être spécifiées au format d’hôte virtuel ou de style de chemin.
  9. WITH CREDENTIAL est pris en charge.
  10. REGION est pris en charge. La valeur par défaut est us-east-1.
  11. MAXTRANSFERSIZEest comprise entre 5 Mo et 20 Mo. 10 Mo est la valeur par défaut du connecteur S3.

Arguments pris en charge pour la sauvegarde

Options WITH Point de terminaison S3 Notes
BLOCKSIZE Y MAXTRANSFERSIZE détermine la taille du composant.
BUFFERCOUNT Y
COMPRESSION Y
COPY_ONLY Y
CREDENTIAL O
DESCRIPTION Y
DIFFERENTIAL Y
ENCRYPTION Y
FILE_SNAPSHOT N
MAXTRANSFERSIZE Y De 5 Mo (5 242 880 octets) à 20 Mo (20 971 520 octets), la valeur par défaut est 10 Mo (10 485 760 octets).
MEDIADESCRIPTION Y
MEDIANAME Y
MIRROR TO Y Fonctionne uniquement avec une autre URL, MIRROR avec URL laquelle elle DISK n’est pas prise en charge.
NOM O
NOFORMAT/FORMAT Y
NOINIT/INIT N L’ajout n’est pas pris en charge. Pour remplacer une sauvegarde, utilisez WITH FORMAT.
NO_CHECKSUM/CHECKSUM Y
NO_TRUNCATE Y
RÉGION Y La valeur par défaut est us-east-1. Doit être utilisé avec BACKUP_OPTIONS.
STATS Y

Arguments pris en charge pour la restauration

Options WITH Point de terminaison S3 Notes
BLOCKSIZE Y MAXTRANSFERSIZE détermine la taille du composant.
BUFFERCOUNT N
SOMME DE CONTRÔLE | NO_CHECKSUM Y
CREDENTIAL Y
ENABLE_BROKER | ERROR_BROKER_CONVERSATIONS | NEW_BROKER Y
FILE N Noms logiques non pris en charge avec RESTORE FROM URL.
FILESTREAM Y
KEEP_CDC Y
KEEP_REPLICATION Y
LOADHISTORY Y
MAXTRANSFERSIZE Y
MEDIANAME Y
MEDIAPASSWORD N Requis pour certaines sauvegardes effectuées avant SQL Server 2012.
MOVE Y
PARTIAL Y
PASSWORD N Requis pour certaines sauvegardes effectuées avant SQL Server 2012.
RECOVERY | NORECOVERY | VEILLE Y
RÉGION Y La valeur par défaut est us-east-1. Doit être utilisé avec RESTORE_OPTIONS.
REPLACE Y
RESTART Y
RESTRICTED_USER Y
REWIND | NOREWIND N
STATS Y
STOP_ON_ERROR | CONTINUE_AFTER_ERROR Y
STOPAT | STOPATMARK | STOPBEFOREMARK Y
UNLOAD | NOUNLOAD N

Région

Votre fournisseur de stockage d’objets compatible S3 peut offrir la possibilité de déterminer une région spécifique pour l’emplacement du compartiment. L’utilisation de ce paramètre facultatif peut offrir une plus grande flexibilité en spécifiant la région à laquelle appartient un compartiment particulier. Ce paramètre nécessite l’utilisation avec WITH l’un ou l’autre BACKUP_OPTIONSRESTORE_OPTIONSdes deux. Ces options nécessitent que la valeur soit déclarée au format JSON. Cela permet des scénarios dans lesquels un fournisseur de stockage compatible S3 peut avoir la même URL universelle, mais être distribué dans plusieurs régions. Dans ce cas, la commande de sauvegarde ou de restauration pointe vers les régions spécifiées sans avoir à modifier l’URL.

Si aucune valeur n’est déclarée, us-east-1 elle est affectée comme valeur par défaut.

Exemple de sauvegarde :

WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Exemple de restauration :

WITH RESTORE_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Prise en charge Linux

SQL Server utilise WinHttp pour implémenter le client des API REST HTTP qu’il utilise. Il s’appuie sur le magasin de certificats du système d’exploitation pour les validations des certificats TLS présentés par le http(s) point de terminaison. Avec SQL Server sur Linux toutefois, l’autorité de certification doit être placée sur un emplacement prédéfini pour être créée à l’emplacement /var/opt/mssql/security/ca-certificates. Seuls les 50 premiers certificats peuvent être stockés et pris en charge dans ce dossier.

SQL Server lit les certificats du dossier au démarrage et les ajoute au magasin d’approbations.

Seuls les superutilisateurs doivent pouvoir écrire dans le dossier, tandis que l’utilisateur mssql doit avoir l’accès en lecture.

Fonctionnalités non prises en charge

  • La sauvegarde vers le stockage d’objets compatible avec S3 avec une URL non sécurisée http n’est pas prise en charge. Les clients sont responsables de la configuration de leur hôte S3 avec une https URL et ce point de terminaison est validé par un certificat installé sur l’hôte du système d’exploitation SQL Server.
  • La sauvegarde dans le stockage d’objets compatible S3 n’est pas prise en charge dans les éditions SQL Server Express et SQL Server Express avec Advanced Services.

Limites

Voici les limitations actuelles de la sauvegarde et de la restauration avec le stockage d’objets compatible S3 :

  1. En raison de la limitation actuelle de l’API REST S3 Standard, les fichiers de données temporaires non validés créés dans le magasin d’objets compatible S3 du client (en raison d’une opération de chargement multipart en cours) pendant l’exécution de la commande BACKUP T-SQL ne sont pas supprimés en cas de défaillances. Ces blocs de données non validés continuent d’être conservés dans le stockage d’objets compatible S3 si la commande BACKUP T-SQL échoue ou est annulée. Si la sauvegarde réussit, ces fichiers temporaires sont automatiquement supprimés par le magasin d’objets pour former le fichier de sauvegarde final. Certains fournisseurs de stockage compatibles S3 gèrent cela via leur système de garbage collector.
  2. La longueur totale de l’URL est limitée à 259 caractères. La chaîne complète est comptabilisée dans cette limitation, en incluant le nom du connecteur s3://. Par conséquent, la limite utilisable est de 254 caractères. Nous vous recommandons toutefois de vous en tenir à une limite de 200 caractères pour permettre l’introduction possible des paramètres de requête.
  3. Le nom des informations d’identification SQL est limité à 128 caractères au format UTF-16.
  4. L’ID de clé secrète ne doit pas avoir : de caractère.

Style de chemin d’accès et style d’hôte virtuel

La sauvegarde vers S3 prend en charge l’URL à écrire dans le style de chemin d’accès ou le style d’hôte virtuel.

Exemple de style de chemin d’accès : s3://<endpoint>:<port>/<bucket>/<backup_file_name>

Exemple d’hôte virtuel : s3://<bucket>.<domain>/<backup_file_name>

Exemples

Créer des informations d’identification

  • Le nom des informations d’identification doit fournir le chemin de stockage et il existe plusieurs normes pour cela en fonction de la plateforme de stockage.
  • IDENTITY doit toujours être 'S3 Access Key' en cas d’utilisation du connecteur S3.
  • L’ID de clé d’accès et l’ID de clé secrète ne doivent pas contenir de signe deux-points. L’ID de clé d’accès et l’ID de clé secrète sont l’utilisateur et le mot de passe créés sur le stockage d’objets compatible S3.
  • Seules les valeurs alphanumériques sont autorisées.
  • L’ID de clé d’accès doit disposer d’autorisations appropriées sur le stockage d’objets compatible S3.

Utilisez CREATE CREDENTIAL pour créer des informations d’identification au niveau du serveur pour l’authentification avec le point de terminaison de stockage d’objets compatible S3.

USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';
GO

BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT /* overwrite any existing backup sets */
,       STATS = 10
,       COMPRESSION;

Toutefois, AWS S3 prend en charge deux normes différentes d’URL.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (par défaut)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Il existe plusieurs approches pour créer des informations d’identification pour AWS S3.

-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup

CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

Ou,

CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

Sauvegarde vers une URL

L’exemple suivant illustre la sauvegarde complète de base de données, répartie sur plusieurs fichiers, sur le point de terminaison de stockage d’objets :

BACKUP DATABASE <db_name>
TO      URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    FORMAT -- overwrite
,       STATS               = 10
,       COMPRESSION;

Restaurer à partir de l'URL

L’exemple suivant illustre la restauration de base de données à partir de l’emplacement du point de terminaison de stockage d’objets :

RESTORE DATABASE <db_name>
FROM    URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    REPLACE -- overwrite
,       STATS  = 10;

Options de chiffrement et de compression

L’exemple suivant montre comment sauvegarder et restaurer la base de données avec chiffrementAdventureWorks2022, MAXTRANSFERSIZE comme 20 Mo et la compression :

CREATE MASTER KEY ENCRYPTION BY PASSWORD = <password>;
GO

CREATE CERTIFICATE AdventureWorks2022Cert
    WITH SUBJECT = 'AdventureWorks2022 Backup Certificate';
GO
-- Backup database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH FORMAT, MAXTRANSFERSIZE = 20971520, COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = AdventureWorks2022Cert)
GO

-- Restore database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH REPLACE

Utiliser la région pour la sauvegarde et la restauration

L’exemple suivant montre comment sauvegarder et restaurer la base de données à l’aide AdventureWorks2022REGION_OPTIONSde :

Vous pouvez paramétrer la région dans chaque BACKUP/RESTORE commande. Notez la chaîne de région spécifique À S3 dans l’et BACKUP_OPTIONSRESTORE_OPTIONS, par exemple, '{"s3": {"region":"us-west-2"}}'. La région par défaut est us-east-1. Voici un exemple simple :

-- Backup Database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}'

-- Restore Database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH 
  MOVE 'AdventureWorks2022' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.mdf'
, MOVE 'AdventureWorks2022_log' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.ldf'
, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'

Par exemple :

-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup

CREATE CREDENTIAL   [s3://datavirtualizationsample.s3.amazonaws.com/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH
    BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER)
, COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

RESTORE DATABASE AdventureWorks2022_1 
FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH 
  MOVE 'AdventureWorks2022' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf'
, MOVE 'AdventureWorks2022_log' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf'
, STATS = 10, RECOVERY
, REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER)
GO