Copier une copie cohérente au niveau transactionnel d’une base de données dans Azure SQL Database

S’applique à : base de données Azure SQL

Azure SQL Database propose plusieurs méthodes pour créer une copie d’une base de données existante sur le même serveur ou sur un autre serveur. Vous pouvez copier une base de données à partir du portail Azure, PowerShell, Azure CLI ou Transact-SQL.

Remarque

Microsoft Entra ID était précédemment connu sous le nom d’Azure Active Directory (Azure AD).

Vue d’ensemble

Une copie de base de données est un instantané cohérent d’un point de vue transactionnel de la base de données source au moment où la demande de copie est initiée. Vous pouvez sélectionner le même serveur ou un autre serveur pour la copie. Vous pouvez aussi conserver la redondance de sauvegarde et la taille de calcul de la base de données source, ou utiliser une redondance de stockage de sauvegarde et/ou une taille de calcul différentes au sein du même niveau de service. Il est également possible de copier une base de données du niveau de service Standard vers le niveau Standard ou Usage général et une base de données du niveau de service Premium vers le niveau Premium ou Critique pour l’entreprise.

Une fois la copie terminée, la nouvelle base de données est une base de données entièrement fonctionnelle et indépendante vers la base de données source. Les connexions, les utilisateurs et les autorisations de la base de données copiée sont gérés indépendamment de la base de données source. La copie est créée à l’aide de la technologie de géoréplication. Une fois l’amorçage du réplica terminé, le lien de géoréplication prend fin automatiquement. Toutes les exigences relatives à l’utilisation de la géoréplication s’appliquent à l’opération de copie de base de données. Pour plus d’informations, consultez Présentation de la géoréplication active.

Remarque

Le Portail Azure, PowerShell et l’interface de ligne de commande Azure ne prennent pas en charge la copie de la base de données sur un autre abonnement.

Copie de base de données pour les bases de données Hyperscale

Pour les bases de données du niveau de service Hyperscale, la base de données cible détermine s’il s’agit d’une copie rapide ou d’une copie de la taille des données :

  • Copie rapide : lorsque la copie est effectuée dans la même région que la source, la copie est créée à partir des captures instantanées d’objets blob, cette copie est une opération rapide, quelle que soit la taille de la base de données.

  • Taille de la copie des données : lorsque la base de données cible se trouve dans une autre région que la source ou si la redondance du stockage de la sauvegarde de la base de données (locale, zonale, géo) de la cible diffère de celle de la base de données source, l’opération de copie est une opération taille de données. L’heure de copie ne sera pas directement proportionnelle à la taille, car les objets blob de serveur de pages sont copiés en parallèle.

Connexions dans la copie de la base de données

Lorsque vous copiez une base de données sur le même serveur, les mêmes connexions peuvent être utilisées sur les deux bases de données. L’élément principal de sécurité que vous utilisez pour copier la base de données devient le propriétaire de la base de données sur la nouvelle base de données.

Lorsque vous copiez une base de données vers un autre serveur, le principal de sécurité qui a lancé l’opération de copie sur le serveur cible devient le propriétaire de la nouvelle base de données.

Quel que soit le serveur cible, tous les utilisateurs de la base de données, leurs autorisations et leurs identificateurs de sécurité (SID) sont copiés vers la copie de base de données. Si vous utilisez des utilisateurs de base de données autonome pour accéder aux données, vérifiez que la base de données copiée utilise les mêmes informations d’identification utilisateur afin de pouvoir y accéder immédiatement avec les mêmes informations d’identification, une fois la copie terminée.

Si vous utilisez des connexions au niveau du serveur pour l’accès aux données et copiez la base de données sur un autre serveur, l’accès par connexion peut ne pas fonctionner. Cela peut se produire si les connexions n’existent pas sur le serveur cible, ou si leurs mots de passe et identificateurs de sécurité (SID) sont différents. Pour en savoir plus sur la gestion des connexions durant la copie d’une base de données vers un autre serveur, consultez Comment gérer la sécurité Azure SQL Database après une récupération d’urgence. Une fois l’opération de copie sur un autre serveur réussie, et avant que d’autres utilisateurs ne soient redirigés, seule la connexion associée au propriétaire de la base de données, ou l’administrateur du serveur, peut se connecter à la base de données copiée. Pour résoudre les connexions et établir l’accès aux données à l’issue de l’opération de copie, consultez Résoudre les connexions.

Copier à l’aide du Portail Azure

Pour copier une base de données en utilisant le portail Azure, ouvrez la page pour votre base de données, puis choisissez Copier pour ouvrir la page Créer une base de données SQL - Copier une base de données. Renseignez les valeurs pour le serveur cible sur lequel vous voulez copier votre base de données.

Capture d’écran du portail Azure, montrant l’option Copier une base de données mise en évidence dans la page de vue d’ensemble de la base de données.

Copier une base de données

Vous pouvez copier une base de données en utilisant PowerShell, Azure CLI et Transact-SQL (T-SQL).

Pour PowerShell, utilisez la cmdlet New-AzSqlDatabaseCopy.

Important

Le module PowerShell Azure Resource Manager (RM) est toujours pris en charge par Azure SQL Database, mais tous les développements à venir sont destinés au module Az.Sql. Le module AzureRM continue à recevoir des résolutions de bogues jusqu’à au moins décembre 2020. Les arguments des commandes dans le module Az sont sensiblement identiques à ceux des modules AzureRm. Pour en savoir plus sur leur compatibilité, consultez Présentation du nouveau module Az Azure PowerShell.

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

La copie de la base de données est une opération asynchrone, mais la base de données cible est créée de suite après que la demande est acceptée. Si vous devez annuler une opération de copie en cours, supprimez la base de données cible à l’aide de l’applet de commande Remove-AzSqlDatabase.

Pour un exemple complet de script PowerShell, consultez Copier une base de données sur un nouveau serveur.

Contrôle de la progression de l’opération de copie

Contrôlez le processus de copie en interrogeant les vues sys.databases, sys.dm_database_copies et sys.dm_operation_status. Pendant que la copie est en cours, la colonne state_desc de la vue sys.databases pour la nouvelle base de données a pour valeur COPYING.

  • Si la copie échoue, la colonne state_desc de la vue sys.databases pour la nouvelle base de données a pour valeur SUSPECT. Exécutez l’instruction DROP sur la nouvelle base de données et réessayez ultérieurement.
  • Si la copie réussit, la colonne state_desc de la vue sys.databases pour la nouvelle base de données a pour valeur ONLINE. La copie est terminée et la nouvelle base de données est une base de données normale, qui peut être modifiée indépendamment de la base de données source.

Remarque

Si vous décidez d’annuler la copie pendant qu’elle est en cours, exécutez l’instruction DROP DATABASE sur la nouvelle base de données.

Important

Si vous devez créer une copie avec un objectif de service beaucoup plus petit que la source, la base de données cible peut ne pas disposer de ressources suffisantes pour terminer le processus de distribution et peut entraîner l’échec de l’opération de copie. Dans ce scénario, utilisez une requête de géorestauration pour créer une copie sur un autre serveur et/ou dans une autre région. Consultez Récupérer Azure SQL Database à l’aide de sauvegardes de bases de connées pour en savoir plus.

autorisations

Pour créer une copie de base de données, vous devez disposer des rôles suivants :

  • propriétaire de l’abonnement ou
  • Rôle Contributeur de SQL Server
  • Rôle personnalisé sur le serveur source avec les autorisations suivantes :
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write et
  • Rôle personnalisé sur le serveur cible avec les autorisations suivantes :
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

Pour annuler une copie de base de données, vous devez disposer des rôles suivants :

  • propriétaire de l’abonnement ou
  • Rôle Contributeur de SQL Server
  • Rôle personnalisé sur la base de données cible avec les autorisations suivantes :
    • Microsoft.Sql/servers/databases/delete

Pour gérer la copie de bases de données à l’aide du Portail Azure, vous devez également disposer des autorisations suivantes :

  • Microsoft.Resources/subscriptions/resources/read
  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/operationstatuses/read

Si vous voulez voir les opérations en cours de déploiement dans le groupe de ressources sur le portail, les opérations à travers plusieurs fournisseurs de ressources, y compris les opérations SQL, vous avez besoin de ces autorisations supplémentaires :

  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

Résolution des connexions

Une fois que la nouvelle base de données est en ligne sur le serveur cible, utilisez l’instruction ALTER USER pour remapper les utilisateurs de la nouvelle base de données avec des connexions sur le serveur cible. Pour résoudre les problèmes d’utilisateurs orphelins, consultez Dépannage des utilisateurs orphelins. Vous pouvez également consulter Comment gérer la sécurité d’Azure SQL Database après une récupération d’urgence.

Tous les utilisateurs de la nouvelle base de données conservent les autorisations qu’ils avaient dans la base de données source. L’utilisateur qui a initié la copie de la base de données devient le propriétaire de celle-ci. Une fois la copie réussie et avant que les autres utilisateurs ne soient remappés, seul le propriétaire de la base de données peut se connecter à la nouvelle base de données.

Pour en savoir plus sur la gestion des utilisateurs et des connexions lors de la copie d’une base de données sur un autre serveur, consultez Comment gérer la sécurité d’Azure SQL Database après une récupération d’urgence.

Erreurs de copie de base de données

Les erreurs suivantes peuvent survenir lors de la copie d’une base de données dans Azure SQL Database. Pour en savoir plus, consultez Copie d’une base de données Azure SQL.

Code d’erreur severity Description
40635 16 Le client avec l’adresse IP ’%.*ls’ est désactivé temporairement.
40637 16 La copie de base de données est actuellement désactivée.
40561 16 La copie de base de données a échoué. La base de données source ou cible n’existe pas.
40562 16 La copie de base de données a échoué. La base de données source a été supprimée.
40563 16 La copie de base de données a échoué. La base de données cible a été supprimée.
40564 16 La copie de base de données a échoué en raison d’une erreur interne. Supprimez la base de données cible et réessayez.
40565 16 La copie de base de données a échoué. Pas plus d’une copie de base de données simultanée de la même source est autorisée. Supprimez la base de données cible et réessayez ultérieurement.
40566 16 La copie de base de données a échoué en raison d’une erreur interne. Supprimez la base de données cible et réessayez.
40567 16 La copie de base de données a échoué en raison d’une erreur interne. Supprimez la base de données cible et réessayez.
40568 16 La copie de base de données a échoué. La base de données source n’est plus disponible. Supprimez la base de données cible et réessayez.
40569 16 La copie de base de données a échoué. La base de données cible n’est plus disponible. Supprimez la base de données cible et réessayez.
40570 16 La copie de base de données a échoué en raison d’une erreur interne. Supprimez la base de données cible et réessayez ultérieurement.
40571 16 La copie de base de données a échoué en raison d’une erreur interne. Supprimez la base de données cible et réessayez ultérieurement.