Azure SQL Database fournit plusieurs méthodes pour créer une copie d’une base de données existante sur le même serveur logique Azure SQL Database ou sur un autre serveur logique. Vous pouvez copier une base de données à partir du portail Azure, PowerShell, Azure CLI ou Transact-SQL.
Notes
Microsoft Entra ID s'appelait Azure Active Directory (Azure AD) jusqu'à une date récente.
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 logique ou un autre serveur logique 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.
Notes
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 logique, 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 sur un autre serveur logique, le principal de sécurité qui a lancé l’opération de copie sur le serveur logique 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, car les connexions n’existent pas sur le serveur logique cible, ou parce que ces mots de passe et identificateurs de sécurité (SID) sont différents. Pour plus d’informations sur la gestion des connexions lorsque vous copiez une base de données sur un autre serveur, consultez Configurer et gérer la sécurité d’Azure SQL Database pour la géorestauration ou le basculement. Une fois l’opération de copie effectuée sur un autre serveur logique, et avant que d’autres utilisateurs ne soient remappé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 du serveur logique cible dans lequel vous souhaitez copier votre 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).
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.
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.
az sql db copy --dest-name "CopyOfMySampleDatabase" --dest-resource-group "myResourceGroup" --dest-server $targetserver `
--name "<databaseName>" --resource-group "<resourceGroup>" --server $sourceserver
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 alors qu’elle est en cours, supprimez la base de données cible en utilisant la commande az sql db delete.
Connectez-vous à la base de données master avec la connexion administrateur du serveur ou la connexion qui a créé la base de données que vous souhaitez copier. Pour que la copie de la base de données réussisse, les connexions autres que celle de l’administrateur du serveur doivent être membres du rôle dbmanager. Pour plus d’informations sur les connexions et la connexion au serveur logique, consultez [Autoriser l’accès à la base de données(logins-create-manage.md).
Démarrez la copie de la base de données source avec l’instruction CREATE DATABASE ... AS COPY OF. L’instruction T-SQL continue de fonctionner jusqu’à ce que l’opération de copie de la base de données soit terminée.
Notes
L’arrêt de l’instruction T-SQL ne met pas fin à l’opération de copie de la base de données. Pour mettre fin à l’opération, supprimez la base de données cible.
Copier sur le même serveur logique
Connectez-vous à la base de données master avec la connexion administrateur du serveur ou la connexion qui a créé la base de données que vous souhaitez copier. Pour que la copie de la base de données réussisse, les connexions autres que celle de l’administrateur du serveur doivent être membres du rôle dbmanager.
Cette commande copie Database1 dans une nouvelle base de données nommée Database2 sur le même serveur logique. Selon la taille de votre base de données, l’opération de copie peut prendre plus ou moins longtemps.
-- Execute on the master database to start copying
CREATE DATABASE Database2 AS COPY OF Database1;
Copier dans un pool élastique
Connectez-vous à la base de données master avec la connexion administrateur du serveur ou la connexion qui a créé la base de données que vous souhaitez copier. Pour que la copie de la base de données réussisse, les connexions autres que celle de l’administrateur du serveur doivent être membres du rôle dbmanager.
Cette commande copie Database1 dans une nouvelle base de données nommée Database2 dans un pool élastique nommé pool1. Selon la taille de votre base de données, l’opération de copie peut prendre plus ou moins longtemps.
Database1 peut être une base de données unique ou mise en pool. La copie entre différents pools de niveaux est prise en charge, mais il arrive que certaines copies entre niveaux échouent. Par exemple, vous pouvez copier une base de données Standard unique ou élastique dans un pool à usage général, mais vous ne pouvez pas copier une base de données élastique Standard dans un pool Premium.
-- Execute on the master database to start copying
CREATE DATABASE Database2
AS COPY OF Database1
(SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool1 ));
Copier vers un autre serveur logique
Connectez-vous à la base de données master du serveur logique cible où la nouvelle base de données doit être créée. Utilisez une connexion portant le même nom et mot de passe que le propriétaire de la base de données source sur le serveur logique source. La connexion sur le serveur logique cible doit également être membre du rôle dbmanager, ou être la connexion de l’administrateur du serveur.
Cette commande copie Database1 sur server1 dans une nouvelle base de données nommée Database2 sur server2. Selon la taille de votre base de données, l’opération de copie peut prendre plus ou moins longtemps.
-- Execute on the master database of the target logical server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1;
Important
Les deux pare-feu de serveur logique doivent être configurés pour autoriser la connexion entrante à partir de l’adresse IP du client qui émet la commande de CREATE DATABASE ... AS COPY OF T-SQL. Pour déterminer l’adresse IP source de la connexion actuelle, exécutez : SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;
Notes
La copie de base de données utilisant T-SQL n’est pas prise en charge lors de la connexion au serveur logique de destination via un point de terminaison privé . Si un point de terminaison privé est configuré mais que l’accès au réseau public est autorisé, la copie de base de données est prise en charge lorsqu’elle est connectée au serveur logique de destination à partir d’une adresse IP publique à l’aide de l’authentification SQL. Une fois l’opération de copie terminée, l’accès public peut être refusé.
De même, la commande suivante copie Database1 sur server1 dans une nouvelle base de données nommée Database2 dans un pool élastique appelé pool2, sur server2.
-- Execute on the master database of the target logical server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1 (SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool2 ) );
Copier sur un autre abonnement
Vous pouvez utiliser les étapes de l'Copier une base de données SQL vers un autre serveur logique section pour copier votre base de données vers un serveur logique dans un autre abonnement à l’aide de T-SQL. Veillez à utiliser une connexion avec les mêmes nom et mot de passe que le propriétaire de la base de données source. En outre, la connexion doit être membre du rôle dbmanager ou d’un administrateur de serveur, sur les serveurs logiques source et cible.
Conseil
Lors de la copie de bases de données dans le même locataire Microsoft Entra ID, l’autorisation sur les serveurs logiques source et de destination est simplifiée si vous lancez la commande de copie à l’aide d’une connexion d’authentification avec un accès suffisant sur les deux serveurs logiques. Le niveau d’accès minimal nécessaire est l’appartenance au rôle dbmanager dans la base de données master sur les deux serveurs logiques. Par exemple, vous pouvez utiliser un identifiant Microsoft Entra ID qui est membre d'un groupe désigné en tant qu'administrateur de serveur sur les deux serveurs logiques.
Dans les scripts suivants, le nom de connexion à copier est loginname.
Tout d’abord, connectez-vous à la base de données master du serveur logique source. Créez une connexion et un utilisateur dans la base de données master du serveur logique Azure SQL Database source.
--Step# 1
--Create login and user in the master database of the source server.
CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx'
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO
Connectez-vous à la base de données utilisateur source. Ensuite, dans la base de données utilisateur source, créez l’utilisateur dans la base de données source et ajoutez-le au rôle de base de données dbowner dans la base de données.
--Step# 2
--Create the user in the source database and grant dbowner permission to the database.
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE db_owner ADD MEMBER loginname;
GO
Ensuite, recherchez l’identificateur de sécurité (SID) de l’utilisateur loginname à partir de la base de données master du serveur logique source.
--Step# 3
--Capture the SID of the user "loginname" from master database
SELECT [sid] FROM sysusers WHERE [name] = 'loginname';
Exécutez le script suivant sur la base de données master du serveur logique nouveau ou de destination. Tout d’abord, créez une connexion et un utilisateur dans la base de données master du serveur logique de destination, puis ajoutez-le au rôle serveur dbmanager. Fournissez un <strong password>et remplacez <SID of loginname login on source server> par le SID du serveur logique source.
--Step# 4
--Connect to Destination server.
--Create login and user in the master database, same as of the source server.
CREATE LOGIN loginname WITH PASSWORD = '<strong password>', SID = <SID of loginname login on source server>;
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO
Dans la base de données master du serveur logique de destination, créez la nouvelle base de données. Remplacez new_database_name par le nom souhaité. Remplacez source_server_name et source_database_name par les noms de la source.
--Step# 5
--Execute the copy of database script from the destination logical server using the credentials created
CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;
Conseil
La copie d’une base de données à partir d’un abonnement dans un autre locataire Azure est prise en charge uniquement lors de l’utilisation de T-SQL et d’une connexion d’authentification SQL pour vous connecter au serveur logique cible. La création d’une copie de base de données sur un serveur logique dans un autre client Azure n’est pas supportée avec l’authentification Microsoft Entra pour Azure SQL.
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.
Notes
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 demande de géorestauration pour créer une copie dans un autre serveur logique et/ou 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 logique source avec les autorisations suivantes :
Microsoft.Sql/servers/databases/read
Microsoft.Sql/servers/databases/write et
Rôle personnalisé sur le serveur logique 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 :
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 :
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.
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.
Apprenez les fondamentaux du déploiement et de la migration Azure SQL Database. Explorez ses avantages, ses fonctionnalités exclusives et ses options de migration, ainsi que l’optimisation des performances et des connexions aux applications pour une transition en douceur vers le cloud.
Administrer une infrastructure de base de données SQL Server pour les bases de données relationnelles cloud, locales et hybrides à l’aide des offres de bases de données relationnelles Microsoft PaaS.