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 ServerAzure 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 devez définir le niveau d’accès sur privé. Seuls les utilisateurs ou les comptes qui peuvent fournir les informations d’authentification requises peuvent lire ou écrire les objets blob dans le conteneur.

  • Pour les bases de données SQL Server sur une instance de SQL Server exécutée dans une machine virtuelle Azure, utilisez un compte de stockage dans la même région que la machine virtuelle pour é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 La suppression des fichiers blob de sauvegarde 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 sur 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 volumineuses ou des groupes de fichiers à partir d’une base de données SQL Server locale, vous devez d’abord effectuer des tests de 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é dans la section Gérer les sauvegardes est importante lors de la sauvegarde de fichiers volumineux.

Résoudre les problèmes de sauvegarde vers ou de restauration à partir de l’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 en raison d’options ou de limitations non prises en charge, passez en revue la liste des limitations et la prise en charge des BACKUP informations et RESTORE commandes, dans l’article SQL Server Backup and Restore with Microsoft Stockage Blob 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> se trouve l’une des options suivantes :

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

Vous pouvez également trouver des informations en consultant l’Observateur d’événements Windows, sous Journaux d’applications portant le nom SQLBackupToUrl.

La requête n’a pas pu être effectuée en raison d’une erreur d’appareil d’E/S.

Prenez en compte COMPRESSION, MAXTRANSFERSIZEet BLOCKSIZEplusieurs arguments d’URL lors de la sauvegarde de bases de données volumineuses. 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 Filemark 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’activité de sauvegarde ayant échoué peut entraîner des objets blob avec des baux 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 réatempestée, l’opération de sauvegarde peut échouer avec une erreur similaire à la sortie suivante :

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

Lorsque vous sauvegardez une base de données, vous pouvez rencontrer 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 pour 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 n’a pas les autorisations nécessaires pour accéder aux informations d’identification. Utilisez un compte dans le rôle db_backupoperator avec modifier les autorisations d’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é du compte de stockage Azure que vous utilisez dans les opérations de sauvegarde et de restauration.

Erreurs 400 (Requête incorrecte)

À l’aide de SQL Server 2012 (11.x), vous pouvez rencontrer une erreur lors de l’exécution d’une sauvegarde 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 accéder à Internet, vous pouvez rencontrer les problèmes suivants :

limitation de Connecter ion 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, modifiez les paramètres du proxy afin que SQL Server n’utilise pas le proxy. Voici quelques exemples de types ou de messages d’erreur que vous pouvez voir 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 à l’aide de 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 proxy par défaut non récupérés

Parfois, les paramètres par défaut ne sont pas récupérés à l’origine d’erreurs d’authentification proxy telles que :

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 serveur SQL Server est installé sur le C lecteur de l’ordinateur, placez le fichier de configuration dans C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn.

  3. BackuptoURL.exen’est pas appelé lors de l’utilisation de clés SAP, 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é Sauvegarde Azure service pour sauvegarder des bases de données SQL ou une machine virtuelle instantané, qui ne crée pas de sauvegarde de copie uniquement, ce qui entraîne l’échec des sauvegardes à la demande de votre plan de maintenance ou de votre travail SQL Agent à la demande. Pour résoudre ce problème, ajoutez ces clés de Registre aux machines virtuelles hébergeant des instances SQL Server à la clé [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT] de Registre et ajoutez "USEVSSCOPYBACKUP"="TRUE".
Erreur 3201 : La sauvegarde échoue avec - Erreur du système d’exploitation 50 (la demande n’est pas prise en charge). Régénérez le jeton de signature d’accès partagé (SAP) à l’aide de Explorateur Stockage : vous pouvez créer une stratégie à l’aide de Explorateur Stockage Azure et créer un jeton SAP avec cette stratégie à partir de 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 à l’URL BACKUP TO. Vérifiez que votre groupe de sécurité réseau (NSG) et/ou pare-feu autorise la connexion entrante et sortante sur les ports 1433 et 443.
Erreur 3271 : la sauvegarde échoue en raison d’une erreur TLS : 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 une URL de service Microsoft Stockage Blob Azure n’est pas compatible avec TLS 1.2 et peut être corrigée en suivant les instructions de Ko4017023.
Error 3271: La sauvegarde vers l’URL a reçu une exception du point de terminaison distant. Message d’exception : le nom distant n’a pas pu être résolu. Ce message s’affiche si une clé d’identification, secret ou SAP incorrecte a été utilisée pour configurer la sauvegarde. Supprimez les informations d’identification et recréez-les. Pour SQL Server 2012/2014, utilisez l’identité et la clé d’accès du compte de stockage et pour SQL Server 2016 et versions ultérieures, utilisez SAS.
Error 18210: Exception : Le serveur distant a retourné une erreur : (400) Requête incorrecte. Pour résoudre ce problème, remplacez la version TLS minimale du compte de stockage par la version 1.0 (Stockage version minimale de TLS de configuration>du compte>) ou activez le chiffrement fort tel qu’il est documenté dans Ko4017023.
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 avec une taille de 1 To, interrompez 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 SAP pour résoudre le problème.
La sauvegarde de la base de données 1-To échoue sur SQL Server 2012/2014. Les sauvegardes 1-To sont une limitation connue sur les 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. Cela peut s’afficher si vous utilisez SQL Server 2012 (11.x) et SQL Server 2014 (12.x) et que la taille de votre sauvegarde passe à 1 To. Bandez vos fichiers de sauvegarde et/ou utilisez la compression de sauvegarde pour 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 recevez des erreurs indiquant que la limite d’E/S par seconde de disque/machine virtuelle a été atteinte, les sauvegardes peuvent ralentir ou échouer. Pour surveiller les limites d’IOPS/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 » Stockage comptes avec un espace de noms hiérarchique sont équipés pour les objets blob de blocs, et non pour les objets blob de pages. Stockage comptes sans cette fonctionnalité ne doit pas être utilisé pour l’URL BACKUP TO dans SQL Server 2014 (12.x).