Partage via


Meilleures pratiques et résolution des problèmes liés à la sauvegarde SQL Server sur URL pour le Stockage Blob Microsoft Azure

S’applique à : SQL Server Azure SQL Managed Instance

Cet article présente des bonnes pratiques et des conseils de dépannage pour la sauvegarde et la restauration SQL Server dans le Stockage Blob Microsoft Azure.

Pour plus d’informations sur l’utilisation du Stockage Blob Azure pour les opérations de sauvegarde et de restauration SQL Server, consultez :

Gestion des sauvegardes

La liste suivante comprend des recommandations générales sur la gestion des sauvegardes :

  • Nous vous recommandons d'utiliser un nom de fichier unique pour chaque sauvegarde afin d'éviter tout remplacement accidentel des objets blob.

  • Lors de la création d’un conteneur, vous devriez configurer le niveau d’accès sur Privé, afin que seuls les utilisateurs ou comptes qui peuvent fournir les informations d’identification requises puissent lire ou écrire les objets blob dans le conteneur.

  • Pour les bases de données SQL Server situées sur une instance de SQL Server s’exécutant sur un ordinateur virtuel Azure, utilisez un compte de stockage situé dans la même région que l’ordinateur virtuel afin d’éviter les coûts de transfert de données entre les régions. L'utilisation de la même région garantit également des performances optimales pour les opérations de sauvegarde et de restauration.

  • L'échec d'une activité de sauvegarde peut générer un fichier de sauvegarde non valide. Nous vous recommandons d'identifier périodiquement les sauvegardes en échec et de supprimer les fichiers d'objets blob. Pour plus d’informations, consultez Suppression de fichiers de sauvegarde d’objets blob avec des baux actifs.

  • L'utilisation de WITH COMPRESSION pendant la sauvegarde peut réduire les coûts du stockage et des transactions de stockage. Elle peut également réduire le temps nécessaire pour terminer le processus de sauvegarde.

  • Définissez les arguments MAXTRANSFERSIZE et BLOCKSIZE comme cela est recommandé dans Sauvegarde SQL Server vers une URL.

  • SQL Server est indépendant du type de redondance de stockage utilisé. La sauvegarde vers des objets blob de pages et des objets blob de blocs est prise en charge pour chaque redondance de stockage (LRS/ZRS/GRS/RA-GRS/RA-GZRS, etc.).

Gérer les fichiers volumineux

L’opération de sauvegarde SQL Server utilise plusieurs threads pour optimiser le transfert de données vers le Stockage Blob Azure. Toutefois, les performances dépendent de divers facteurs, tels que la bande passante de l'éditeur de logiciels et la taille de la base de données. Si vous envisagez de sauvegarder des bases de données ou groupes de fichiers volumineux à partir d’une base de données SQL Server locale, vous devez commencer par tester le débit. Le SLA pour Storage de Microsoft Azure impose des temps de traitement maximum pour les objets blob dont vous devez tenir compte.

L’utilisation de l’option WITH COMPRESSION, comme recommandée dans la section Gérer les sauvegardes, est importante lors de la sauvegarde de fichiers volumineux.

Résoudre les problèmes de sauvegarde ou de restauration vers ou depuis une URL

Voici quelques méthodes rapides qui vous aideront à résoudre les erreurs survenant lors de la sauvegarde ou de la restauration vers/depuis le Stockage Blob Azure.

Pour éviter les erreurs attribuables à des limitations ou à des options non prises en charge, consultez la liste des limitations ainsi que l’aide sur les commandes BACKUP et RESTORE dans l’article Sauvegarde et restauration SQL Server avec le Stockage Blob Microsoft Azure.

Échec de l’initialisation

Les sauvegardes parallèles dans un même objet blob provoquent l'échec d'une des sauvegardes avec l'erreur Échec de l’initialisation .

  • Dans SQL Server 2016 (13.x) et versions ultérieures, l’objet blob de blocs est préféré pour la sauvegarde vers l’URL.

  • Si vous utilisez des objets blob de pages avec BACKUP TO URL, vous pouvez utiliser l’indicateur de trace 3051 pour activer la journalisation dans un journal des erreurs spécifique au format suivant : BackupToUrl-\<instname>-\<dbname>-action-\<PID>.log, où \<action> est l’une des options suivantes :

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

Vous pouvez également trouver des informations en examinant l’observateur d’événements Windows nommé sous Journaux d’application nommé SQLBackupToUrl.

La requête n’a pas pu être exécutée en raison d’une erreur de périphérique d’E/S.

Envisagez d’utiliser COMPRESSION, MAXTRANSFERSIZE, BLOCKSIZE et plusieurs arguments d’URL quand vous sauvegardez de grandes bases de données. Consultez Sauvegarde d’une base de données très volumineuse dans le Stockage Blob Azure.

L’erreur :

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.

Un exemple de résolution :

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;

Message Le repère de fichier sur l’appareil n’est pas aligné

En cas de restauration d'une sauvegarde compressée, vous pouvez rencontrer l'erreur suivante :

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.

Pour résoudre cette erreur, réexécutez l'instruction RESTORE en spécifiant BLOCKSIZE = 65536.

L’échec d’une activité de sauvegarde peut aboutir à des objets blob avec des bails actifs

Erreur lors de la sauvegarde en raison d’objets blob pour lesquels un bail est actif : Failed backup activity can result in blobs with active leases.

Si une instruction de sauvegarde est retentée, l’opération de sauvegarde échoue avec une erreur semblable à celle qui suit :

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 une instruction de restauration est tentée sur un fichier de sauvegarde d'objet blob dont le bail est actif, l'opération de restauration échoue avec une erreur semblable à celle qui suit :

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

Lorsqu'une telle erreur se produit, les fichiers d'objets blob doivent être supprimés. Pour plus d’informations sur ce scénario et savoir comment corriger ce problème, consultez Suppression de fichiers de sauvegarde d’objets blob avec des baux actifs.

Erreur de système d’exploitation 50 : la requête n’est pas prise en charge

Lors de la sauvegarde d’une base de données, vous pouvez voir une erreur Operating system error 50(The request is not supported) pour les raisons suivantes :

  • Le compte de stockage spécifié n’est pas Usage général V1/V2.
  • Le jeton SAS comportait un symbole ? au début du jeton lors de la création des informations d’identification. Si c’est le cas, supprimez-le.
  • La connexion active n’est pas en mesure de se connecter au compte de stockage à partir de la machine actuelle avec l’Explorateur Stockage ou SQL Server Management Studio (SSMS).
  • La stratégie attribuée au jeton SAP a expiré. Créez une nouvelle stratégie à l’aide de l’Explorateur Stockage Azure et créez un nouveau jeton SAP à l’aide de la stratégie ou modifiez les informations d’identification, puis réessayez de sauvegarder.
  • Le certificat racine est manquant dans le magasin de certification racine approuvé. Pour plus d’informations, consultez Autorités de certification racine Azure.

Erreurs d’authentification

WITH CREDENTIAL est une nouvelle option nécessaire pour la sauvegarde ou la restauration vers/depuis le Stockage Blob Azure.

Les défaillances liées aux informations d’identification peuvent être les suivantes : The credential specified in the **BACKUP** or **RESTORE** command does not exist.

Pour éviter ce problème, vous pouvez inclure des instructions T-SQL afin de créer les informations d’identification si elles n’existent pas dans l’instruction de sauvegarde. Voici un exemple que vous pouvez utiliser :

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

Les informations d’identification existent, mais la connexion utilisée pour exécuter la commande de sauvegarde ne dispose pas des autorisations appropriées pour accéder aux informations d’identification. Utilisez un compte dans le rôle db_backupoperator avec des autorisations Modifier des informations d’identification.

Vérifiez le nom du compte de stockage et la valeur des clés. Les informations stockées dans les informations d’identification doivent correspondre aux valeurs de propriétés du compte de stockage Azure utilisé lors des opérations de sauvegarde et de restauration.

Erreurs 400 (Requête incorrecte)

Avec SQL Server 2012 (11.x), vous pouvez rencontrer lors d’une sauvegarde une erreur similaire à la sortie suivante :

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

Elle est due à la version de TLS prise en charge par le compte de stockage Azure. Modification de la version de TLS prise en charge ou utilisation de la solution de contournement indiquée dans KB4017023.

Erreurs de proxy

Si vous utilisez des serveurs proxy pour l’accès à Internet, les erreurs suivantes peuvent survenir :

Limitation de la connexion par les serveurs proxy

Les serveurs proxy peuvent avoir des paramètres qui limitent le nombre de connexions par minute. Le processus de sauvegarde vers l'URL est un processus multithread et, par conséquent, il peut dépasser cette limite. Si cela se produit, le serveur proxy supprime la connexion. Pour résoudre ce problème, changez les paramètres du proxy afin que SQL Server n’utilise pas le proxy. Voici quelques exemples des types d’erreur ou des messages qui peuvent s’afficher dans le journal des erreurs :

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 vous utilisez des objets blob de pages, vous activez la journalisation détaillée avec l’indicateur de trace 3051, vous pouvez également voir le message suivant dans les journaux : 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.)

Paramètres du proxy par défaut non sélectionnés

Parfois, les paramètres par défaut ne sont pas sélectionnés et provoquent des erreurs d’authentification du proxy, comme :

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.

Pour résoudre ce problème, créez un fichier de configuration qui permet au processus de sauvegarde vers l'URL d'utiliser les paramètres du proxy par défaut à l'aide des étapes suivantes :

  1. Créez un fichier de configuration nommé BackuptoURL.exe.config avec le contenu XML suivant :

    <?xml version ="1.0"?>
    <configuration>
        <system.net>
            <defaultProxy enabled="true" useDefaultCredentials="true">
                <proxy usesystemdefault="true" />
            </defaultProxy>
        </system.net>
    </configuration>
    
  2. Placez le fichier de configuration dans le dossier Binn de l’instance de SQL Server. Par exemple, si mon SQL Server est installé sur le lecteur C de la machine, placez le fichier de configuration dans C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn.

  3. BackuptoURL.exe n’est pas appelé lors de l’utilisation de clés SAS, mais est déclenché lors de l’utilisation d’une clé d’accès. Veillez à utiliser des clés d’accès, ou vous pouvez recevoir l’erreur suivante :

    Erreur du système d’exploitation 50 (la requête n’est pas prise en charge.)

Erreurs courantes et solutions

Problème Solution
Error 3063: Échec https://storageaccount/container/name.bak de l’écriture sur l’unité de sauvegarde d’objets blob de blocs. L’unité a atteint sa limite de blocs autorisés. Pour résoudre ce problème, entrelacez votre cible de sauvegarde avec plusieurs fichiers et veillez à utiliser les paramètres suivants dans la commande de sauvegarde : COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536.
Erreur 3035 : La sauvegarde différentielle échoue pour une ou plusieurs bases de données. Cela se produit si vous avez configuré le service Sauvegarde Azure pour sauvegarder des bases de données SQL ou une capture instantanée de machine virtuelle, ce qui ne permet pas de créer une copie, seulement une sauvegarde, et entraîne l’échec de votre plan de maintenance ou du travail de SQL Agent et des sauvegardes à la demande. Pour résoudre ce problème, ajoutez ces clés de Registre sur les machines virtuelles hébergeant SQL Server instances au niveau de la clé de registre [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT], puis ajoutez "USEVSSCOPYBACKUP"="TRUE".
Erreur 3201 : Sauvegarde Microsoft Azure échoue avec l’erreur « Erreur 50 du système d’exploitation (La demande n’est pas prise en charge). Regénérez le jeton signature d’accès partagé (SAS) à l’aide de l’Explorateur Stockage : vous pouvez créer une stratégie à l’aide de l’Explorateur Stockage Azure et créer un jeton SAS avec cette stratégie à partir de l’Explorateur Stockage Azure. Recréez les informations d’identification à l’aide de ce nouveau jeton SAS généré à partir du stockage Azure, puis tentez une nouvelle fois d’effectuer la sauvegarde. Pour plus d’informations, consultez les problèmes connus liés à BACKUP TO URL. Vérifiez que votre groupe de sécurité réseau (NSG) et/ou pare-feu autorise les connexions entrantes et sortantes vers les ports 1433 et 443.
Erreur 3271 : la sauvegarde échoue en raison de TLS avec l’erreur La sauvegarde vers l’URL a reçu une exception du point de terminaison distant. Cela peut se produire sur SQL Server versions 2012, 2014 et 2016. La sauvegarde vers l’URL du service Stockage Blob Microsoft Azure n’est pas compatible avec TLS 1.2 et peut être corrigée en suivant les instructions dans KB4017023.
Error 3271: La sauvegarde vers l’URL a reçu une exception du point de terminaison distant. Message d’exception : Impossible de résoudre le nom distant. Ce message s’affiche si des informations d’identification, un secret ou une clé SAP incorrects ont été utilisés pour configurer la sauvegarde. Supprimez les informations d’identification et recréez-les. Pour SQL Server 2012/2014, utilisez l’identité de compte de stockage et la clé d’accès, et pour SQL Server 2016, utilisez SAS
Error 18210: Exception : Le serveur distant a retourné une erreur : (400) Requête incorrecte. Pour résoudre le problème, remplacez la version TLS minimale pour le compte de stockage par 1.0 (Compte de stockage>Configuration>Version TLS minimale), ou activez le chiffrement fort comme indiqué dans KB4017023.
Message d’exception : Le serveur distant a retourné une erreur : (412) Il y a actuellement un bail sur l’objet blob et aucun ID de bail n’a été spécifié dans la requête. Identifiez les objets blob dans Explorateur Stockage Azure d’une taille de 1 To, arrêtez le bail, supprimez l’objet blob et réessayez l’opération de sauvegarde.
Erreur : Le serveur distant a retourné une erreur de type : (403) Refusé. Recréez le compte de stockage, les informations d’identification et le jeton SAS pour résoudre le problème.
La sauvegarde de la base de données de 1 To échoue sur SQL Server 2012/2014. Les sauvegardes de 1 To sont une limitation connue des objets blob de pages avant SQL Server 2016 (13.x). Utilisez la compression de sauvegarde en ajoutant la clause « WITH COMPRESSION » à votre instruction de sauvegarde T-SQL ou mettez à niveau votre instance SQL Server vers SQL Server 2016 (13.x) et versions ultérieures.
Erreur : La sauvegarde vers l’URL a reçu une exception du point de terminaison distant. Message d’exception : le serveur distant a retourné une erreur : (416) La plage de pages spécifiée n’est pas valide. Vous pouvez recevoir cette erreur si vous utilisez SQL Server 2012 (11.x) et SQL Server 2014 (12.x) et si votre taille de sauvegarde augmente pur atteindre 1 To. Marquez vos fichiers de sauvegarde et/ou utilisez la compression de sauvegarde à résoudre.
La sauvegarde a échoué lors de l’utilisation d’un plan de maintenance. Il y a quelques bogues avec le plan de maintenance. Essayez d’utiliser T-SQL pour exécuter votre sauvegarde. Si T-SQL fonctionne, vous pouvez créer un travail SQL Agent à exécuter pour sauvegarder vos bases de données.
La sauvegarde a échoué en raison des limites de machine virtuelle atteintes. Si vous obtenez des erreurs d’E/S de disque/de machines virtuelles atteintes, les sauvegardes peuvent ralentir ou échouer. Pour surveiller les limites d’IOPS/de machine virtuelle, utilisez les métriques Azure Monitor et redimensionnez la machine virtuelle/disque, si nécessaire, pour résoudre le problème.
Le serveur distant a retourné une erreur : (409) Conflit pour SQL Server 2012/2014 » Les comptes de stockage avec espace de noms hiérarchique sont équipés pour les objets blob de blocs, et non pour les objets blob de pages. Les comptes de stockage sans cette fonctionnalité ne doivent pas être utilisés pour BACKUP TO URL dans SQL Server 2014 (12.x).