Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : SQL Server 2022 (16.x)
Cet article présente les concepts, les exigences et les 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 de nouvelles fonctionnalités d’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 du Stockage Azure. Pour fournir cette intégration, SQL Server prend en charge un connecteur S3. Ce connecteur 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 avec 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 parties, comme les objets blob de blocs Azure dans le Stockage Blob Azure.
Chaque fichier peut être divisé en 10 000 parties maximum. La taille d’un composant est comprise entre 5 Mo et 20 Mo, cette plage étant contrôlée par la commande Transact-SQL BACKUP avec 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. Bien que cette valeur spécifie la taille maximale du transfert, elle ne garantit pas que chaque composant envoyé est de 10 Mo. La taille de la partie est influencée par la proximité des données. Par exemple, s’il existe 4 Mo de données adjacentes à 2 Mo de données, 6 Mo sont envoyés après avoir atteint la partie de taille minimale de 5 Mo. Sinon, s’il y a 12 Mo de dat adjacent, les données jusqu’à la taille maximale (10 Mo) sont envoyées et les 2 Mo restants sont envoyés dans la partie suivante. Le connecteur S3 tente toujours d’envoyer la taille maximale des données possible, mais il ne dépasse jamais la MAXTRANSFERSIZE valeur.
La taille maximale prise en charge d’un fichier unique est le résultat de 10 000 parties * MAXTRANSFERSIZE, s’il est nécessaire de sauvegarder un fichier plus volumineux, il doit fractionner/supprimer jusqu’à 64 URL. La taille maximale finale prise en charge d’un fichier est de 10 000 parties × MAXTRANSFERSIZE × URL.
Note
Il est nécessaire d’utiliser COMPRESSION pour modifier les valeurs MAXTRANSFERSIZE.
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 de système d’exploitation SQL Server.
- Identifiants créés 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 appelés les
Access Key IDetSecret Key ID. Vous avez besoin des deux pour vous authentifier auprès du 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 à un stockage d’objets compatible S3, deux ensembles d’autorisations doivent être définis, l’un sur SQL Server et l’autre sur la couche de stockage.
Sur SQL Server, le compte utilisateur utilisé pour exécuter les commandes BACKUP ou RESTORE doit faire partie du rôle de base de données db\_backupoperator avec l’autorisation Alter any credential (Modifier des informations d’identification).
Sur la couche de stockage :
- Dans AWS S3, créez un rôle personnalisé et indiquez précisément quelles API S3 nécessitent un accès. La sauvegarde et la restauration nécessitent les autorisations suivantes : ListBucket (Parcourir/Browse), PutObject (Écriture/Write – pour la sauvegarde).
- Dans d’autres stockages compatibles S3, l’utilisateur (
Access Key ID) doit disposer à la fois des autorisations ListBucket et WriteOnly.
Autorisations de restauration
Si la base de données en cours de restauration n’existe pas, l’utilisateur doit disposer CREATE DATABASE des autorisations nécessaires pour 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 à un rôle de base de données fixe ne peut être vérifiée que lorsque 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 db_owner rôle de base de données fixe n’ont pas d’autorisations RESTORE.
Sur la couche de stockage :
- Dans AWS S3, créez un rôle personnalisé et indiquez précisément quelles API S3 nécessitent un accès. La sauvegarde et la restauration nécessitent les autorisations suivantes : ListBucket (Parcourir/Browse), GetObject (Lecture/Read – pour la restauration).
- Dans d’autres stockages compatibles S3, l’utilisateur (
Access Key ID) doit disposer à la fois 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 :
- Un seul fichier de sauvegarde peut atteindre 200 000 Mio par URL (avec
MAXTRANSFERSIZEdéfini sur 20 Mo). - Les sauvegardes peuvent être réparties sur un maximum de 64 URL.
- Le mirroring est pris en charge, mais uniquement entre des URL. La mise en miroir à l’aide de l’URL et du DISK n’est pas prise en charge.
- La compression est prise en charge et recommandée.
- Le chiffrement est pris en charge.
- La restauration à partir d’une URL avec stockage d’objets compatible S3 ne présente aucune limitation de taille.
- Lorsque vous restaurez une base de données, le
MAXTRANSFERSIZEest déterminé par la valeur attribuée pendant la phase de sauvegarde. - Les URL peuvent être spécifiées au format d’hôte virtuel ou de style de chemin.
-
WITH CREDENTIALest pris en charge. -
REGIONest pris en charge et la valeur par défaut estus-east-1. -
MAXTRANSFERSIZEvarie de 5 Mo à 20 Mo. 10 Mo est la valeur par défaut pour le connecteur S3.
Arguments pris en charge pour la sauvegarde
Options WITH |
Point de terminaison S3 | Remarques |
|---|---|---|
BLOCKSIZE |
Oui |
MAXTRANSFERSIZE détermine la taille de la partie. |
BUFFERCOUNT |
Oui | |
COMPRESSION |
Oui | |
COPY_ONLY |
Oui | |
CREDENTIAL |
Oui | |
DESCRIPTION |
Oui | |
DIFFERENTIAL |
Oui | |
ENCRYPTION |
Oui | |
FILE_SNAPSHOT |
Non | |
MAXTRANSFERSIZE |
Oui | 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 |
Oui | |
MEDIANAME |
Oui | |
MIRROR TO |
Oui | Fonctionne uniquement avec une autre URL, MIRROR avec URL et DISK n'est pas pris en charge. |
NAME |
Oui | |
NOFORMAT / FORMAT |
Oui | |
NOINIT / INIT |
Non | L’ajout n’est pas pris en charge.
Pour remplacer une sauvegarde, utilisez WITH FORMAT. |
NO_CHECKSUM / CHECKSUM |
Oui | |
NO_TRUNCATE |
Oui | |
REGION |
Oui | La valeur par défaut est us-east-1. Doit être utilisé avec BACKUP_OPTIONS. |
STATS |
Oui |
Arguments pris en charge pour la restauration
Options WITH |
Point de terminaison S3 | Remarques |
|---|---|---|
BLOCKSIZE |
Oui |
MAXTRANSFERSIZE détermine la taille de la partie. |
BUFFERCOUNT |
Non | |
CHECKSUM / NO_CHECKSUM |
Oui | |
CREDENTIAL |
Oui | |
ENABLE_BROKER / ERROR_BROKER_CONVERSATIONS / NEW_BROKER |
Oui | |
FILE |
Non | Noms logiques non pris en charge avec RESTORE FROM URL. |
FILESTREAM |
Oui | |
KEEP_CDC |
Oui | |
KEEP_REPLICATION |
Oui | |
LOADHISTORY |
Oui | |
MAXTRANSFERSIZE |
Non | |
MEDIANAME |
Oui | |
MEDIAPASSWORD |
Non | Nécessaire pour certaines sauvegardes effectuées avec des versions antérieures à SQL Server 2012. |
MOVE |
Oui | |
PARTIAL |
Oui | |
PASSWORD |
Non | Nécessaire pour certaines sauvegardes effectuées avec des versions antérieures à SQL Server 2012. |
RECOVERY / NORECOVERY / STANDBY |
Oui | |
REGION |
Oui | La valeur par défaut est us-east-1. Doit être utilisé avec RESTORE_OPTIONS. |
REPLACE |
Oui | |
RESTART |
Oui | |
RESTRICTED_USER |
Oui | |
REWIND / NOREWIND |
Non | |
STATS |
Oui | |
STOP_ON_ERROR / CONTINUE_AFTER_ERROR |
Oui | |
STOPAT / STOPATMARK / STOPBEFOREMARK |
Oui | |
UNLOAD / NOUNLOAD |
Non |
Région
Votre fournisseur de stockage d’objets compatible S3 peut proposer la possibilité de spécifier une région particulière pour l’emplacement du bucket. L’utilisation de ce paramètre optionnel permet plus de flexibilité en précisant à quelle région appartient un bucket particulier. Ce paramètre nécessite l’utilisation de WITH conjointement avec BACKUP_OPTIONS ou RESTORE_OPTIONS. 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 tout en étant réparti sur plusieurs régions. Dans ce cas, la commande de sauvegarde ou de restauration pointe vers les régions spécifiées sans qu’il soit nécessaire de modifier l’URL.
Si aucune valeur n’est déclarée, us-east-1 est affecté 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. Cela s’appuie sur le magasin de certificats du système d’exploitation pour valider les certificats TLS présentés par le point de terminaison http(s). 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. L’autorité de certification (CA) doit être en place avant le démarrage du processus SQL Server.
SQL Server lit les certificats à partir du dossier au démarrage et les ajoute au magasin de confiance.
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 S3 avec une URL non sécurisée
httpn’est pas prise en charge. Les clients sont responsables de la configuration de leur hôte S3 avec une URLhttps, et ce point de terminaison est validé par un certificat installé sur l’hôte du système d’exploitation de SQL Server. - La sauvegarde vers le stockage d’objets compatible S3 n’est pas prise en charge dans SQL Server Express et SQL Server Express avec les éditions Advanced Services.
Limitations
Voici les limitations actuelles de la sauvegarde et de la restauration avec le stockage d’objets compatible S3 :
- 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 en plusieurs parties en cours) pendant l’exécution de la commande BACKUP T-SQL, ne sont pas supprimés en cas d’échecs de sauvegarde. Ces blocs de données non validés continuent d’exister dans le stockage d’objets compatible S3 dans le cas où 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 compatible S3 gèrent les fichiers temporaires via leur système de nettoyage de la mémoire (garbage collector).
- 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://. Ainsi, 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. - Le nom des informations d’identification SQL est limité à 128 caractères au format UTF-16.
- L’identifiant de clé secrète ne doit pas contenir le caractère
:.
Style de chemin et style d’hôte virtuel
La sauvegarde vers S3 prend en charge l’écriture de l’URL au format chemin d’accès ou hôte virtuel.
Exemple de style de chemin : 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 de l’identifiant doit fournir le chemin d’accès au stockage, et plusieurs standards existent selon 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’Access Key ID et la Secret Key ID correspondent à l’utilisateur et au mot de passe créés sur le stockage d’objets compatible S3.
- Seules les valeurs alphanumériques sont autorisées.
- L’Access Key ID doit disposer des autorisations appropriées sur le stockage d’objets compatible S3.
Utilisez CREATE CREDENTIAL pour créer un identifiant au niveau du serveur afin d’authentifier le point de terminaison du 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;
Cependant, AWS S3 prend en charge deux standards d’URL différents.
-
S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER>(par défaut) S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>
Il existe plusieurs approches permettant de créer avec succès un identifiant 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 l’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 AdventureWorks2025 avec chiffrement, MAXTRANSFERSIZE à 20 Mo et 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 AdventureWorks2025 en utilisant REGION_OPTIONS :
Vous pouvez paramétrer la région dans chaque commande BACKUP / RESTORE. Notez la chaîne de région spécifique à S3 dans les BACKUP_OPTIONS et RESTORE_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
Contenu associé
- SQL Server sauvegarde vers une URL pour le stockage d’objets compatible S3 : bonnes pratiques et résolution des problèmes
- SQL Server sauvegarde vers une URL pour le stockage Microsoft Azure Blob : bonnes pratiques et résolution des problèmes
- CRÉER CERTIFICAT (Transact-SQL)
- SQL Server sauvegarde vers une URL pour le stockage Microsoft Azure Blob