Bonnes pratiques pour l'importation et l'exportation
Voici les bonnes pratiques à adopter lors de l'importation et de l'exportation de données :
- Ne pas utiliser les buckets "Paiements" du demandeur Cloud Storage
- Compresser les données afin de réduire les coûts
- Réduire les processus d'importation et d'exportation de longue durée
- Utiliser l'utilitaire bcp pour l'importation et l'exportation de données
- Importer des données à l'aide de l'insertion groupée
- Utiliser SqlPackage pour l'importation et l'exportation de données
- Utiliser l'importation et l'exportation agrégées par bandes
- Vérifier la base de données importée
Ne pas utiliser les buckets "Paiements" du demandeur Cloud Storage
Vous ne pouvez pas utiliser de buckets Cloud Storage pour lesquels les paiements du demandeur sont activés pour réaliser des importations et des exportations depuis Cloud SQL.
Compresser les données afin de réduire les coûts
Cloud SQL permet d'importer et d'exporter des fichiers compressés ou non. Grâce à la compression, vous pouvez économiser un espace de stockage considérable sur Cloud Storage et réduire les coûts de stockage, en particulier lorsque vous exportez des instances volumineuses.
Lorsque vous exportez un fichier BAK, utilisez une extension de fichier .gz
pour compresser les données. Lorsque vous importez un fichier avec une extension .gz
, il est automatiquement décompressé.
Réduire les processus d'importation et d'exportation de longue durée
L'exécution d'opérations d'importation dans Cloud SQL et d'exportations à partir de Cloud SQL peut prendre beaucoup de temps selon la taille des données traitées. Cela peut avoir les conséquences suivantes :
- Vous ne pouvez pas arrêter une opération d'instance Cloud SQL de longue durée.
- Vous ne pouvez effectuer qu'une seule opération d'importation ou d'exportation à la fois pour chaque instance, tandis qu'une importation ou une exportation de longue durée bloque d'autres opérations, telles que les sauvegardes automatiques quotidiennes.
Vous pouvez réduire le temps nécessaire à l'exécution de chaque opération en utilisant la fonctionnalité d'importation ou d'exportation Cloud SQL avec de plus petits lots de données.
Pour les migrations de bases de données entières, vous devez généralement utiliser des fichiers BAK plutôt que des fichiers SQL pour les importations. En règle générale, l'importation à partir d'un fichier SQL prend beaucoup plus de temps qu'avec un fichier BAK.
Utiliser SqlPackage pour l'importation et l'exportation de données
Vous pouvez importer et exporter des données dans Cloud SQL à l'aide de SqlPackage. Il vous permet d'exporter une base de données SQL, y compris le schéma de base de données et les données utilisateur, vers un fichier BACPAC (.bacpac), et d'importer les données de schéma et de table depuis un fichier BACPAC vers une nouvelle base de données utilisateur.
SqlPackage utilise vos identifiants pour se connecter à SQL Server afin d'effectuer des importations et des exportations de bases de données. Il rend les migrations disponibles pour tous les utilisateurs de Cloud SQL. Pour effectuer des opérations d'importation et d'exportation, vous devez disposer des éléments suivants :
Un poste de travail connecté à votre instance, sur lequel vous pouvez exécuter SqlPackage. Pour en savoir plus sur les options de connectivité, consultez la section À propos des options de connexion.
SqlPackage installé sur votre système. Pour en savoir plus sur le téléchargement et l'installation de SqlPackage, consultez la documentation Microsoft.
Identifiants configurés pour accéder à votre instance. Pour en savoir plus sur la configuration des identifiants, consultez la section Comment s'authentifier auprès de Cloud SQL.
Exemples
Importer
Pour importer des données dans une base de données AdventureWorks2017
, exécutez la commande suivante :
c:\Program Files\Microsoft SQL Server\160\DAC\bin>SqlPackage /Action:Import /tsn:myTargetServer /tdn:AdventureWorks2017 /tu:myUsername /sf:mySourceFile /TargetTrustServerCertificate:True /tp:myPassword
Ici,
mySourceFile
est un fichier source que vous souhaitez utiliser comme source d'action depuis l'espace de stockage local. Si vous utilisez ce paramètre, aucun autre paramètre source n'est valide.myTargetServer
est le nom du serveur qui héberge la base de données cible.myUsername
est le nom d'utilisateur SQL Server que vous souhaitez utiliser pour accéder à la base de données cible.myPassword
est votre mot de passe dans les identifiants.
Pour en savoir plus, consultez la documentation Microsoft.
Exporter
Pour exporter des données depuis une base de données AdventureWorks2017
, exécutez la commande suivante :
c:\Program Files\Microsoft SQL Server\160\DAC\bin>SqlPackage /Action:Export /TargetFile:"myTargetFile" /ssn:mySourceServer /su:myUsername /sdn:AdventureWorks2017 /SourceTrustServerCertificate:True /sp:myPassword
Ici,
myTargetFile
est le fichier cible (un fichier .dacpac) que vous souhaitez utiliser comme cible de l'action plutôt que comme base de données. Si vous utilisez ce paramètre, aucun autre paramètre cible n'est valide. Ce paramètre n'est pas valide pour les actions qui ne sont compatibles qu'avec les cibles de base de données.myUsername
est le nom d'utilisateur SQL Server que vous souhaitez utiliser pour accéder à la base de données source.mySourceServer
est le nom du serveur qui héberge la base de données source.myPassword
est votre mot de passe dans les identifiants.
Pour en savoir plus, consultez la documentation Microsoft.
Utiliser l'utilitaire bcp pour l'importation et l'exportation de données
Une autre option pour importer et exporter des données dans Cloud SQL consiste à utiliser l'utilitaire de copie en bloc bulk copy program (bcp). À l'aide de l'utilitaire bcp, vous pouvez exporter des données depuis une base de données SQL Server vers un fichier de données et importer les données dans une base de données SQL Server. L'utilitaire bcp utilise vos identifiants pour se connecter à SQL Server afin d'effectuer des importations et des exportations de bases de données. Il rend les transferts disponibles pour tous les utilisateurs de Cloud SQL. Pour effectuer des opérations d'importation et d'exportation, vous devez disposer des éléments suivants :
Un poste de travail où vous pouvez exécuter l'utilitaire bcp, et qui dispose d'une connectivité à votre instance Cloud SQL. Pour en savoir plus sur les options de connectivité, consultez la section À propos des options de connexion.
L'utilitaire bcp installé sur votre système. Pour en savoir plus sur le téléchargement et l'installation de bcp, consultez la documentation Microsoft.
Identifiants configurés pour accéder à votre instance. Pour en savoir plus sur la configuration des identifiants, consultez la section Comment s'authentifier auprès de Cloud SQL.
Exemples
Importer
Pour importer des données depuis le fichier person.csv
vers la table Person
de la base de données AdventureWorks2017
, exécutez la commande suivante :
bcp Person.Person in "person.csv" -d AdventureWorks2017 -U myLoginID -S myServer
Ici,
myLoginID
est l'ID de connexion utilisé pour se connecter à SQL Server.myServer
est l'instance de SQL Server à laquelle vous souhaitez vous connecter. Si vous ne spécifiez pas de serveur, l'utilitaire bcp se connecte à l'instance par défaut de SQL Server sur l'ordinateur local.
Pour en savoir plus, consultez la documentation Microsoft.
Exporter
Pour exporter des données depuis la table Person
de la base de données AdventureWorks2017
vers le fichier person.dat
, exécutez la commande suivante :
bcp Person.Person out "person.dat" -U myLoginID -S myServer -d AdventureWorks2017
Ici,
myLoginID
est l'ID de connexion utilisé pour se connecter à SQL Server.myServer
est l'instance de SQL Server à laquelle vous souhaitez vous connecter. Si vous ne spécifiez pas de serveur, l'utilitaire bcp se connecte à l'instance par défaut de SQL Server sur l'ordinateur local.
Pour en savoir plus, consultez la documentation Microsoft.
Importer des données à l'aide de l'insertion groupée
L'insertion groupée vous permet d'importer des données dans votre base de données Cloud SQL pour SQL Server à partir d'un fichier stocké dans Cloud Storage.
Cette section décrit les opérations suivantes :
- Rôles et autorisations requis
- Éléments à prendre en compte lors de l'insertion groupée
- Effectuer une insertion groupée
- Afficher les données importées
- Désactiver l'insertion groupée
Rôles et autorisations requis
Pour configurer l'insertion groupée, vous avez besoin des éléments suivants :
- L'autorisation
CONTROL
sur la base de données vers laquelle vous souhaitez importer les données Une clé d'accès HMAC et un secret mappés à un compte IAM avec les autorisations suivantes :
storage.buckets.get
storage.objects.create
etstorage.multipartUploads.create
pour écrire des journaux d'erreurs et des exemples de données incorrectes.
Vous pouvez également utiliser les rôles suivants :
Storage Object Viewer
Storage Object Creator
pour écrire des journaux d'erreurs et des exemples de données incorrectes.
Pour utiliser l'insertion groupée, vous avez besoin des éléments suivants :
- Autorisation
EXECUTE
sur la procédure stockéemsdb.dbo.gcloudsql_bulk_insert
. Cloud SQL crée la procédure stockée une fois l'insertion groupée activée sur l'instance. Cloud SQL accorde par défaut l'autorisationEXECUTE
au compte administrateursqlserver
. - L'autorisation
INSERT
sur l'objet vers lequel vous souhaitez importer les données
Pour savoir comment créer des utilisateurs pour l'insertion groupée, consultez la section Créer et gérer des utilisateurs.
Éléments à prendre en compte lors de l'insertion groupée
Cette section contient des recommandations pour la gestion de la sécurité, des performances et de la fiabilité sur les instances lors de l'insertion groupée.
Sécurité
Cloud SQL chiffre et stocke la clé d'accès et le secret HMAC dans une instance en tant qu'identifiant à l'échelle de la base de données. Une fois enregistrées, leurs valeurs ne sont plus accessibles. Vous pouvez supprimer la clé et le secret d'une instance en supprimant les identifiants à l'échelle de la base de données à l'aide d'une commande T-SQL. Si vous effectuez une sauvegarde pendant que la clé et le secret sont stockés sur l'instance, cette sauvegarde contient cette clé et ce secret. Vous pouvez également rendre la clé non valide en désactivant et en supprimant la clé HMAC.
Les opérations suivantes peuvent transférer par inadvertance la clé d'accès et le secret, et les rendre disponibles :
- Cloner l'instance : la clé et le secret sont disponibles sur l'instance clonée.
- Créer une instance dupliquée avec accès en lecture : la clé et le secret sont disponibles sur l'instance dupliquée avec accès en lecture créée.
- Effectuer une restauration à partir d'une sauvegarde : la clé et le secret sont disponibles sur l'instance restaurée à partir d'une sauvegarde.
Nous vous recommandons de supprimer la clé et le secret de l'instance cible après avoir effectué ces opérations.
L'insertion groupée peut écrire des données qu'elle ne peut pas analyser dans un fichier stocké dans un bucket Cloud Storage. Si vous souhaitez protéger les données auxquelles l'insertion groupée a accès, configurez VPC Service Controls.
Performances
Nous vous recommandons de procéder comme suit pour limiter les impacts sur les performances lors de l'insertion groupée :
- Testez et définissez une valeur appropriée pour
@batchsize
, car par défaut, toutes les données sont importées dans un seul lot. - Pour les insertions volumineuses, désactivez temporairement les index afin d'accélérer l'insertion des données.
- Si possible, utilisez l'option
@tablock
, car cela peut réduire les conflits et augmenter les performances de chargement des données. - Utilisez le paramètre
@ordercolumnsjson
pour spécifier des données triées dans l'ordre de l'index clusterisé. Cela permet d'améliorer les performances de l'instance.
Fiabilité
Nous vous recommandons de procéder comme suit pour limiter l'impact sur la fiabilité des instances lors de l'insertion groupée :
- Si un échec se produit et que
@batchsize
est utilisé, les données peuvent être partiellement chargées. Vous devrez peut-être nettoyer manuellement ces données sur votre instance. - Utilisez l'option
@errorfile
pour conserver un journal des erreurs et des exemples de données incorrectes détectées lors du processus de chargement. Cela permet d'identifier plus facilement les lignes dont le chargement a échoué.
Effectuer une insertion groupée
Vous pouvez effectuer l'opération d'insertion groupée en procédant comme suit :
msdb.dbo.gcloudsql_bulk_insert
Pour en savoir plus, consultez la section Procédure stockée pour utiliser l'insertion groupée.
Exemple : Importer des données à partir d'un fichier dans Cloud Storage et spécifier un fichier d'erreur
1. Activer l'insertion groupée
Pour activer l'insertion groupée sur votre instance, activez l'indicateur cloud sql enable bulk insert
.
gcloud sql instances patch INSTANCE_NAME --database-flags="cloud sql enable bulk insert"=on
Remplacez INSTANCE_NAME
par le nom de l'instance que vous souhaitez utiliser pour l'insertion groupée.
Pour en savoir plus, consultez la page Configurer des options de base de données.
Une fois que vous avez activé cette option sur votre instance, Cloud SQL installe la procédure stockée par insertion groupée sur votre instance et accorde au compte administrateur sqlserver
les autorisations nécessaires pour l'exécuter.
2. Créer une clé HMAC
Vous avez besoin d'une clé HMAC pour accéder à votre bucket Cloud Storage. Nous vous recommandons de créer une clé HMAC pour un compte de service et d'accorder à ce compte des autorisations sur les buckets que vous souhaitez utiliser pour l'insertion groupée. Pour en savoir plus et obtenir des informations sur la sécurité, consultez la section Éléments à prendre en compte lors de l'insertion groupée.
3. Créer des exemples de données à importer
À l'aide d'un éditeur de texte, créez un fichier encodé en ANSI ou UTF-16 contenant les exemples de données suivants. Enregistrez le fichier dans votre bucket Cloud Storage et nommez-le
bulkinsert.bcp
, par exemple.1,Elijah,Johnson,1962-03-21 2,Anya,Smith,1982-01-15 3,Daniel,Jones,1990-05-21
Créez un fichier de format à l'aide des exemples de données suivants. Enregistrez le fichier dans votre bucket Cloud Storage et nommez-le
bulkinsert.fmt
, par exemple. Pour en savoir plus sur les fichiers de format XML et non XML dans SQL Server, consultez la section Créer un fichier de format.13.0 4 1 SQLCHAR 0 7 "," 1 PersonID "" 2 SQLCHAR 0 25 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS 3 SQLCHAR 0 30 "," 3 LastName SQL_Latin1_General_CP1_CI_AS 4 SQLCHAR 0 11 "\r\n" 4 BirthDate ""
4. Exécuter la procédure stockée
Connectez-vous à votre instance à l'aide de l'utilisateur
sqlserver
et créez un exemple de base de données et de table pour l'insertion groupée.USE MASTER GO -- create test database DROP DATABASE IF EXISTS bulktest CREATE DATABASE bulktest GO -- create table to insert USE bulktest; GO CREATE TABLE dbo.myfirstimport( PersonID smallint, FirstName varchar(25), LastName varchar(30), BirthDate Date );
Créez une clé principale de base de données, un identifiant à l'échelle de la base de données et une source de données externe. Définissez l'identité sur
S3 Access Key
.-- create master key CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword1'; -- create database scoped credential CREATE DATABASE SCOPED CREDENTIAL GCSCredential WITH IDENTITY = 'S3 Access Key', SECRET = '<Access key>:<Secret>'; --create external data source CREATE EXTERNAL DATA SOURCE GCSStorage WITH ( TYPE = BLOB_STORAGE, LOCATION = 's3://storage.googleapis.com/bulk-insert-demo/' , CREDENTIAL = GCSCredential ); CREATE EXTERNAL DATA SOURCE GCSStorageError WITH ( TYPE = BLOB_STORAGE, LOCATION = 's3://storage.googleapis.com/bulk-insert-demo/' , CREDENTIAL = GCSCredential );
Exécutez la procédure stockée d'insertion groupée pour importer les exemples de données.
EXEC msdb.dbo.gcloudsql_bulk_insert @database = 'bulktest', @schema = 'dbo', @object = 'myfirstimport', @file = 's3://storage.googleapis.com/bulk-insert-demo/bulkinsert.bcp', @formatfile = 's3://storage.googleapis.com/bulk-insert-demo/bulkinsert.fmt', @fieldquote = '"', @formatfiledatasource = 'GCSStorage', @ROWTERMINATOR = '0x0A', @fieldterminator = ',', @datasource ='GCSStorage', @errorfiledatasource = 'GCSStorageError', @errorfile = 's3://storage.googleapis.com/oom-data/bulkinsert/bulkinsert_sampleimport.log', @ordercolumnsjson = '[{"name": "PersonID","order": " asc "},{"name": "BirthDate","order": "asc"}]'
Afficher les données importées
Vous pouvez afficher les données importées de l'une des manières suivantes :
Exécutez la requête suivante :
SELECT * FROM dbo.myfirstimport
Cloud SQL ajoute un enregistrement de cette procédure au journal d'erreurs SQL. Vous pouvez afficher ces informations dans Cloud Logging. Vous pouvez également consulter ces informations dans les données du journal d'erreurs SQL sur SQL Server Management Studio (SSMS).
Désactiver l'insertion groupée
Pour désactiver l'insertion groupée, supprimez l'option cloud sql enable bulk insert
:
gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable bulk insert"=off
Remplacez INSTANCE_NAME
par le nom de l'instance sur laquelle vous souhaitez supprimer l'insertion groupée.
Vous pouvez également exécuter la commande suivante pour effacer toutes les options de base de données :
gcloud sql instances patch INSTANCE_NAME --clear-database-flags
Remplacez INSTANCE_NAME
par le nom de l'instance sur laquelle vous souhaitez supprimer l'insertion groupée.
Utiliser l'importation et l'exportation agrégées par bandes
Lorsque vous effectuez une importation ou une exportation agrégées par bandes, vous réduisez le temps nécessaire à l'exécution de l'opération et permettez l'importation et l'exportation des bases de données de plus de 5 To. Pour en savoir plus, consultez la page Exporter et importer à l'aide de fichiers BAK.
Vérifier la base de données importée
Une fois l'importation terminée, connectez-vous à votre base de données et exécutez les commandes de base de données appropriées pour vous assurer que le contenu est correct. Par exemple, connectez et répertoriez les bases de données, les tables et les entrées spécifiques.
Limites connues
Pour obtenir la liste des limites connues, consultez la section Problèmes d'importation et d'exportation des données.
Automatiser les opérations d'exportation
Bien que Cloud SQL ne dispose pas d'une méthode intégrée pour automatiser les exportations de base de données, vous pouvez créer votre propre outil d'automatisation à l'aide de plusieurs composants Google Cloud. Pour en savoir plus, consultez ce tutoriel.
Dépannage
Résoudre les problèmes liés aux opérations d'importation
Problème | Dépannage |
---|---|
HTTP Error 409: Operation failed because another operation was already in progress . |
Une opération est déjà en attente pour votre instance. Il n'est possible d'exécuter qu'une seule opération à la fois. Envoyez votre requête lorsque l'opération en cours est terminée. |
L'opération d'importation prend trop de temps. | Un trop grand nombre de connexions actives peut interférer avec les opérations d'importation.
Fermez les opérations inutilisées. Vérifiez l'utilisation du processeur et de la mémoire de votre instance Cloud SQL pour vous assurer que de nombreuses ressources sont disponibles. Le meilleur moyen de s'assurer de la présence d'un nombre maximal de ressources pour l'opération d'importation consiste à redémarrer l'instance avant de lancer l'importation. Un redémarrage :
|
Une opération d'importation peut échouer lorsqu'un ou plusieurs utilisateurs référencés dans le fichier de dump n'existent pas. | Avant d'importer un fichier de dump, tous les utilisateurs de la base de données qui possèdent des objets ou disposent d'autorisations sur les objets qu'elle contient doivent exister dans la base de données cible. Si ce n'est pas le cas, l'opération d'importation ne parvient pas à recréer les objets en rétablissant les propriétaires ou les autorisations d'origine.
Créez les utilisateurs de la base de données avant de l'importer. |
Incohérence du numéro séquentiel dans le journal | L'ordre d'importation des sauvegardes du journal des transactions est incorrect ou la chaîne du journal des transactions est interrompue. Importez les sauvegardes du journal des transactions dans l'ordre indiqué dans la table des ensembles de sauvegardes. |
StopAt trop tôt | Cette erreur indique que le premier journal du fichier de journal des transactions se trouve après le code temporel StopAt . Par exemple, si le premier journal du fichier de journal des transactions est au format 2023-09-01T12:00:00 et que le champ StopAt a la valeur 2023-09-01T11:00:00, Cloud SQL renvoie cette erreur.Assurez-vous d'utiliser le bon code temporel StopAt et le bon fichier de journal des transactions. |
Résoudre les problèmes liés aux opérations d'exportation
Problème | Dépannage |
---|---|
HTTP Error 409: Operation failed because another operation was
already in progress. |
Une opération est déjà en attente pour votre instance. Il n'est possible d'exécuter qu'une seule opération à la fois. Envoyez votre requête lorsque l'opération en cours est terminée. |
HTTP Error 403: The service account does not have the required
permissions for the bucket. |
Assurez-vous que le bucket existe et que le compte de service de l'instance Cloud SQL (qui effectue l'exportation) dispose du rôle Storage Object Creator (roles/storage.objectCreator ) pour autoriser l'exportation vers le bucket. Consultez la page Rôles IAM pour Cloud Storage. |
Vous souhaitez automatiser les exportations. | Cloud SQL ne permet pas d'automatiser les exportations.
Vous pouvez créer votre propre système d'exportation automatisé à l'aide de produits Google Cloud tels que Cloud Scheduler, Pub/Sub et les fonctions Cloud Run, de manière semblable à cet article sur l'automatisation des sauvegardes. |
Étape suivante
- Découvrez comment importer et exporter des données à l'aide de fichiers BAK.
- Découvrez comment importer des données à l'aide de fichiers de dump SQL.
- Découvrez comment activer les sauvegardes automatiques.
- Apprenez à effectuer une restauration à partir de sauvegardes.