Best Practices zum Importieren und Exportieren von Daten

Auf dieser Seite finden Sie Best Practices zum Importieren und Exportieren von Daten mit Cloud SQL. Eine Schritt-für-Schritt-Anleitung zum Importieren von Daten in Cloud SQL finden Sie unter Daten importieren. Eine Schritt-für-Schritt-Anleitung zum Exportieren Ihrer Daten, ob in Cloud SQL oder in eine von Ihnen verwalteten Instanz, finden Sie unter Daten exportieren.

Best Practices für den Import und Export

Die folgenden Best Practices sollten beim Importieren und Exportieren von Daten berücksichtigt werden:

Keine Cloud Storage-Buckets "Anforderer bezahlt" verwenden

Sie können keinen Cloud Storage-Bucket verwenden, für den Anforderer bezahlt für Importe und Exporte aus Cloud SQL aktiviert ist.

Daten komprimieren, um Kosten zu sparen

Cloud SQL unterstützt den Import und Export sowohl komprimierter als auch unkomprimierter Dateien. Durch die Komprimierung können Sie insbesondere beim Exportieren großer Instanzen viel Speicherplatz in Cloud Storage und somit Speicherkosten einsparen.

Verwenden Sie beim Exportieren einer BAK-Datei die Dateiendung .gz, um die Daten zu komprimieren. Beim Importieren einer Datei mit der Endung .gz wird die Datei automatisch komprimiert.

Lange andauernde Import- und Exportvorgänge reduzieren

Importe in Cloud SQL und Exporte aus Cloud SQL können je nach Menge der zu verarbeitenden Daten lange dauern. Dies kann folgende Auswirkungen haben:

  • Sie können einen lange andauernden Cloud SQL-Instanzvorgang nicht anhalten.
  • Sie können jeweils nur einen Import- oder Exportvorgang für jede Instanz ausführen. Ein lange andauernder Import oder Export blockiert andere Vorgänge wie tägliche automatische Sicherungen.

Sie können den Zeitaufwand für die Durchführung der einzelnen Vorgänge verringern, indem Sie die Import- oder -Exportfunktion von Cloud SQL mit kleineren Datensätzen verwenden.

Für ganze Datenbankmigrationen sollten Sie im Allgemeinen BAK-Dateien anstelle von SQL-Dateien für Importe verwenden. Im Allgemeinen dauert der Import aus einer SQL-Datei viel länger als der Import aus einer BAK-Datei.

SqlPackage zum Importieren und Exportieren von Daten verwenden

Sie können Daten mit SqlPackage in Cloud SQL importieren und exportieren. Sie können eine SQL-Datenbank, einschließlich Datenbankschema- und Nutzerdaten, in eine BACPAC-Datei (.bacpac) exportieren sowie Schema- und Tabellendaten aus einer BACPAC-Datei in eine neue Nutzerdatenbank importieren.

SqlPackage stellt anhand Ihrer Anmeldedaten eine Verbindung zu SQL Server her, um Datenbankimporte und -exporte durchzuführen. Migrationen sind für alle Cloud SQL-Nutzer verfügbar. Für Import- und Exportvorgänge benötigen Sie Folgendes:

  • Eine mit Ihrer Instanz verbundene Workstation, auf der Sie SqlPackage ausführen können. Weitere Informationen zu den Verbindungsoptionen finden Sie unter Verbindungsoptionen.

  • SqlPackage ist auf Ihrem System installiert. Weitere Informationen zum Herunterladen und Installieren von SqlPackage finden Sie in der Microsoft-Dokumentation.

  • Diese Anmeldedaten sind für den Zugriff auf die Instanz eingerichtet. Weitere Informationen zum Einrichten von Anmeldedaten finden Sie unter Bei Cloud SQL authentifizieren.

Beispiele

Importieren

Führen Sie den folgenden Befehl aus, um Daten in die Datenbank AdventureWorks2017 zu importieren:

c:\Program Files\Microsoft SQL Server\160\DAC\bin>SqlPackage
/Action:Import /tsn:myTargetServer /tdn:AdventureWorks2017
/tu:myUsername /sf:mySourceFile
/TargetTrustServerCertificate:True /tp:myPassword

Hier ist

  • mySourceFile eine Quelldatei, die Sie als Aktionsquelle aus dem lokalen Speicher verwenden möchten. Wenn Sie diesen Parameter verwenden, ist kein anderer Quellparameter gültig.
  • myTargetServer der Name des Servers, der die Zieldatenbank hostet.
  • myUsername der SQL Server-Nutzername, mit dem Sie auf die Zieldatenbank zugreifen möchten.
  • myPassword Ihr Passwort in den Anmeldedaten.

Weitere Informationen finden Sie in der Microsoft-Dokumentation.

Exportieren

Führen Sie den folgenden Befehl aus, um Daten aus der Datenbank AdventureWorks2017 zu exportieren:

c:\Program Files\Microsoft SQL Server\160\DAC\bin>SqlPackage
/Action:Export /TargetFile:"myTargetFile"
/ssn:mySourceServer /su:myUsername /sdn:AdventureWorks2017
/SourceTrustServerCertificate:True /sp:myPassword

Hier ist

  • myTargetFile die Zieldatei (.dacpac-Datei), die Sie als Aktionsziel anstelle einer Datenbank verwenden möchten. Wenn Sie diesen Parameter verwenden, ist kein anderer Quellparameter gültig. Dieser Parameter ist für Aktionen, die nur Datenbankziele unterstützen, ungültig.
  • myUsername der SQL Server-Nutzername, mit dem Sie auf die Quelldatenbank zugreifen möchten.
  • mySourceServer der Name des Servers, der die Quelldatenbank hostet.
  • myPassword Ihr Passwort in den Anmeldedaten.

Weitere Informationen finden Sie in der Microsoft-Dokumentation.

BCP zum Importieren und Exportieren von Daten verwenden

Eine weitere Möglichkeit zum Importieren und Exportieren von Daten in Cloud SQL ist das Dienstprogramm „Bulk Copy Program (BCP)“. Mit BCP können Sie Daten aus einer SQL Server-Datenbank in eine Datendatei exportieren und Daten aus einer Datendatei in eine SQL Server-Datenbank importieren. BCP stellt anhand Ihrer Anmeldedaten eine Verbindung zu SQL Server her, um Datenbankimporte und -exporte durchzuführen. Damit sind Übertragungen für alle Cloud SQL-Nutzer verfügbar. Für Import- und Exportvorgänge benötigen Sie Folgendes:

  • Eine mit Ihrer Cloud SQL-Instanz verbundene Workstation, auf der Sie BCP ausführen können. Weitere Informationen zu den Verbindungsoptionen finden Sie unter Verbindungsoptionen.

  • Das Dienstprogramm „BCP“ ist auf Ihrem System installiert. Weitere Informationen zum Herunterladen und Installieren von BCP finden Sie in der Microsoft-Dokumentation.

  • Diese Anmeldedaten sind für den Zugriff auf die Instanz eingerichtet. Weitere Informationen zum Einrichten von Anmeldedaten finden Sie unter Bei Cloud SQL authentifizieren.

Beispiele

Importieren

Führen Sie den folgenden Befehl aus, um Daten aus der Datei person.csv in die Tabelle Person der Datenbank AdventureWorks2017 zu importieren:

bcp Person.Person in "person.csv" -d AdventureWorks2017 -U myLoginID -S myServer

Hier ist

  • myLoginID die Anmelde-ID für die Verbindung mit SQL Server.
  • myServer die Instanz von SQL Server, zu der Sie eine Verbindung herstellen möchten. Wenn Sie keinen Server angeben, stellt BCP eine Verbindung zur Standardinstanz von SQL Server auf dem lokalen Computer her.

Weitere Informationen finden Sie in der Microsoft-Dokumentation.

Exportieren

Führen Sie den folgenden Befehl aus, um Daten aus der Tabelle Person der Datenbank AdventureWorks2017 in die Datei person.dat zu exportieren:

bcp Person.Person out "person.dat" -U myLoginID -S myServer -d AdventureWorks2017

Hier ist

  • myLoginID die Anmelde-ID für die Verbindung mit SQL Server.
  • myServer die Instanz von SQL Server, zu der Sie eine Verbindung herstellen möchten. Wenn Sie keinen Server angeben, stellt BCP eine Verbindung zur Standardinstanz von SQL Server auf dem lokalen Computer her.

Weitere Informationen finden Sie in der Microsoft-Dokumentation.

Bulk-Einfügung für Import von Daten verwenden

Mit Bulk-Einfügungen können Sie Daten aus einer in Cloud Storage gespeicherten Datei in Ihre Cloud SQL for SQL Server-Datenbank importieren.

In diesem Abschnitt wird Folgendes beschrieben:

Erforderliche Rollen und Berechtigungen

Für die Bulk-Einfügung benötigen Sie Folgendes:

  • Die Berechtigung CONTROL für die Datenbank, in die Sie die Daten importieren möchten.
  • Ein HMAC-Zugriffsschlüssel und ein Secret, die einem IAM-Konto mit den folgenden Berechtigungen zugeordnet sind:

    • storage.buckets.get
    • storage.objects.create und storage.multipartUploads.create zum Erstellen von Fehlerprotokollen und Beispiele für fehlerhafte Daten.

    Alternativ können Sie auch die folgenden Rollen verwenden:

    • Storage Object Viewer
    • Storage Object Creator zum Erstellen von Fehlerprotokollen und Beispielen für fehlerhafte Daten.

Für die Bulk-Eingabe benötigen Sie Folgendes:

  • Die Berechtigung EXECUTE für die gespeicherte Prozedur msdb.dbo.gcloudsql_bulk_insert. Cloud SQL erstellt die gespeicherte Prozedur, nachdem die Bulk-Einfügung für die Instanz aktiviert wurde. Cloud SQL gewährt dem sqlserver-Administratorkonto standardmäßig die Berechtigung EXECUTE.
  • Die Berechtigung INSERT für das Objekt, in das Sie die Daten importieren möchten.

Weitere Informationen zum Erstellen von Nutzern für Bulk-Einfügungen finden Sie unter Nutzer erstellen und verwalten.

Überlegungen bei der Verwendung von Bulk-Einfügung

In diesem Abschnitt finden Sie Empfehlungen für die Sicherheit, Leistung und Zuverlässigkeit von Instanzen bei Verwendung der Bulk-Einfügung.

Sicherheit

Cloud SQL verschlüsselt den HMAC-Zugriffsschlüssel und das Secret in einer Instanz als Datenbank-Anmeldedaten. Nach dem Speichern kann nicht mehr auf die Werte zugegriffen werden. Sie können den Schlüssel und das Geheimnis aus einer Instanz löschen, indem Sie die Anmeldedaten auf Datenbankebene mit einem T-SQL-Befehl löschen. Wenn Sie eine Sicherung erstellen, während der Schlüssel und das Secret in der Instanz gespeichert sind, enthält diese Sicherung diesen Schlüssel und dieses Secret. Sie können den Schlüssel auch ungültig machen, indem Sie den HMAC-Schlüssel deaktivieren und löschen.

Bei den folgenden Vorgängen können der Zugriffsschlüssel und das Secret versehentlich übertragen und verfügbar gemacht werden:

  • Instanz klonen: Der Schlüssel und das Secret sind in der geklonten Instanz verfügbar.
  • Lesereplikat erstellen: Der Schlüssel und das Secret sind im erstellten Lesereplikat verfügbar.
  • Wiederherstellung aus einer Sicherung: Der Schlüssel und das Secret sind auf der Instanz verfügbar, die aus einer Sicherung wiederhergestellt wurde.

Wir empfehlen, den Schlüssel und das Secret nach diesen Vorgängen aus der Zielinstanz zu entfernen.

Mit Bulk-Einfügung können Daten geschrieben werden, die nicht in eine Datei geparst werden können, die in einem Cloud Storage-Bucket gespeichert ist. Wenn Sie Daten schützen möchten, auf die Bulk-Einfügung Zugriff haben, konfigurieren Sie die VPC service controls.

Leistung

Wir empfehlen Folgendes, um die Leistungseinbußen bei der Verwendung von Bulk-Einfügung zu minimieren:

  • Testen und legen Sie einen geeigneten Wert für @batchsize fest, da standardmäßig alle Daten in einem einzigen Batch importiert werden.
  • Deaktivieren Sie bei großen Einträgen vorübergehend Indexe, um die Dateneingabe zu beschleunigen.
  • Verwenden Sie nach Möglichkeit die Option @tablock, da dies Konflikte reduzieren kann und die Daten-Lade-Leistung erhöhen kann.
  • Verwenden Sie den Parameter @ordercolumnsjson, um Daten anzugeben, die in der Reihenfolge des Clusterindexes sortiert sind. Dies trägt zu einer besseren Instanzleistung bei.
Zuverlässigkeit

Wir empfehlen Folgendes, um die Auswirkungen auf die Zuverlässigkeit der Instanz bei der Verwendung von Bulk-Einfügung zu minimieren:

  • Wenn ein Fehler auftritt und @batchsize verwendet wird, kann dies zu nur teilweise geladenen Daten führen. Möglicherweise müssen Sie diese Daten in Ihrer Instanz manuell bereinigen.
  • Mit der Option @errorfile können Sie ein Protokoll mit Fehlern und Beispielen für fehlerhafte Daten führen, die während des Ladevorgangs erkannt wurden. So lassen sich Zeilen, die nicht geladen werden konnten, leichter identifizieren.

Bulk-Einfügung durchführen

Sie können den Bulk-Einfügen-Vorgang mit der folgenden gespeicherten Prozedur ausführen:

msdb.dbo.gcloudsql_bulk_insert

Weitere Informationen finden Sie unter Gespeicherte Prozedur für die Bulk-Einfügung.

Beispiel: Daten aus einer Datei in Cloud Storage importieren und eine Fehlerdatei angeben
1. Bulk-Einfügen aktivieren

Wenn Sie das Bulk-Einfügen für Ihre Instanz aktivieren möchten, aktivieren Sie das Flag cloud sql enable bulk insert.

gcloud sql instances patch INSTANCE_NAME --database-flags="cloud sql enable bulk insert"=on

Ersetzen Sie INSTANCE_NAME durch den Namen der Instanz, die Sie für die Bulk-Einfügung verwenden möchten.

Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren.

Nachdem Sie dieses Flag für die Instanz aktiviert haben, installiert Cloud SQL die im gespeicherte Prozedur für Bulk-Einfügung auf der Instanz und gewährt dem sqlserver-Administratorkonto die Berechtigung zum Ausführen.

2. HMAC-Schlüssel erstellen

Sie benötigen einen HMAC-Schlüssel, um auf Ihren Cloud Storage-Bucket zuzugreifen. Wir empfehlen, einen HMAC-Schlüssel für ein Dienstkonto zu erstellen und dem Dienstkonto die Berechtigungen für die Buckets zu erteilen, die Sie für die Bulk-Einfügung verwenden möchten. Weitere Informationen und Sicherheitsaspekte finden Sie unter Überlegungen zur Verwendung von Bulk-Einfügung.

3. Beispieldaten zum Importieren erstellen
  1. Erstellen Sie mit einem Texteditor eine Datei mit ANSI- oder UTF-16-Codierung, die die folgenden Beispieldaten enthält. Speichern Sie die Datei in Ihrem Cloud Storage-Bucket und geben Sie ihr beispielsweise den Namen bulkinsert.bcp.

    1,Elijah,Johnson,1962-03-21
    2,Anya,Smith,1982-01-15
    3,Daniel,Jones,1990-05-21
    
  2. Erstellen Sie eine Formatdatei mit den folgenden Beispieldaten. Speichern Sie die Datei in Ihrem Cloud Storage-Bucket und geben Sie ihr beispielsweise den Namen bulkinsert.fmt. Weitere Informationen zu XML- und anderen Formatdateien in SQL Server finden Sie unter Formatdatei erstellen.

    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. Gespeicherte Prozedur ausführen
  1. Stellen Sie mit dem Nutzer sqlserver eine Verbindung zu Ihrer Instanz her und erstellen Sie eine Beispieldatenbank und ‑tabelle für Bulk-Einfügungen.

    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
    );
    
  2. Erstellen Sie einen Datenbankmasterschlüssel, ein Datenbank-Anmeldedatenobjekt und eine externe Datenquelle. Legen Sie die Identität als S3 Access Key fest.

      -- 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
    );
    
  3. Führen Sie die gespeicherte Prozedur für die Bulk-Einfügung aus, um die Beispieldaten zu importieren.

    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"}]'
    
    

Importierte Daten ansehen

Sie können die importierten Daten mit einer der folgenden Methoden aufrufen:

  • Führen Sie die folgende Abfrage aus:

    SELECT * FROM dbo.myfirstimport
    
  • Cloud SQL fügt dem SQL-Fehlerprotokoll einen Eintrag für diese Prozedur hinzu. Sie können sich diese in Cloud Logging ansehen. Sie können sich diese Informationen auch in den SQL-Fehlerprotokolldaten in SQL Server Management Studio (SSMS) ansehen.

Bulk-Einfügen deaktivieren

Wenn Sie das Bulk-Einfügen deaktivieren möchten, entfernen Sie das Flag cloud sql enable bulk insert:

  gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable bulk insert"=off
  

Ersetzen Sie INSTANCE_NAME durch den Namen der Instanz, aus der Sie Bulk-Einfügung entfernen möchten.

Alternativ können Sie den folgenden Befehl ausführen, um alle Datenbank-Flags zu löschen:

  gcloud sql instances patch INSTANCE_NAME --clear-database-flags
  

Ersetzen Sie INSTANCE_NAME durch den Namen der Instanz, aus der Sie Bulk-Einfügung entfernen möchten.

Striping-Import und -export verwenden

Wenn Sie einen Striping-Import oder -Export durchführen, reduzieren Sie die Zeit, die für den Abschluss des Vorgangs benötigt wird, und ermöglichen den Import und Export von Datenbanken, die größer als 5 TB sind. Weitere Informationen finden Sie unter Mit BAK-Dateien exportieren und importieren.

Importierte Datenbank prüfen

Stellen Sie nach Abschluss eines Importvorgangs eine Verbindung zu Ihrer Datenbank her und führen Sie die entsprechenden Datenbankbefehle aus, um sicherzustellen, dass der Inhalt korrekt ist. Beispiel: Stellen Sie ein Verbindung her und listen Sie die Datenbanken, Tabellen und spezifischen Einträge auf.

Bekannte Einschränkungen

Eine Liste bekannter Einschränkungen finden Sie unter Probleme beim Importieren und Exportieren von Daten.

Exportvorgänge automatisieren

Obwohl Cloud SQL keine integrierte Möglichkeit zum Automatisieren von Datenbankexporten bietet, können Sie Ihr eigenes Automatisierungstool mithilfe mehrerer Google Cloud-Komponenten erstellen. Weitere Informationen finden Sie in dieser Anleitung.

Fehlerbehebung

Fehlerbehebung bei Importvorgängen

Problem Fehlerbehebung
HTTP Error 409: Operation failed because another operation was already in progress. Für Ihre Instanz steht bereits ein Vorgang aus. Es ist jeweils nur ein Vorgang zulässig. Senden Sie Ihre Anfrage, nachdem der aktuelle Vorgang abgeschlossen ist.
Der Importvorgang dauert zu lange. Zu viele aktive Verbindungen können Importvorgänge beeinträchtigen.

Schließen Sie nicht verwendete Vorgänge. Prüfen Sie die CPU- und Arbeitsspeichernutzung Ihrer Cloud SQL-Instanz, um dafür zu sorgen, dass genügend Ressourcen verfügbar sind. Die beste Methode, um maximale Ressourcen für den Import zu gewährleisten, ist ein Neustart der Instanz vor Beginn des Vorgangs.

Ein Neustart

  • beendet alle Verbindungen und
  • beendet alle Aufgaben, die möglicherweise Ressourcen nutzen.
Ein Importvorgang kann fehlschlagen, wenn ein oder mehrere Nutzer, auf die in der Dumpdatei verwiesen wird, nicht vorhanden sind. Vor dem Importieren einer Dumpdatei müssen alle Datenbanknutzer, die Inhaber von Objekten sind oder Berechtigungen für Objekte in der Dumpdatenbank erhalten haben, in der Zieldatenbank vorhanden sein. Andernfalls kann der Importvorgang die Objekte nicht mit den ursprünglichen Eigentumsrechten oder Berechtigungen neu erstellen.

Erstellen Sie die Datenbanknutzer vor dem Import.

LSN stimmt nicht überein Die Reihenfolge des Imports der Transaktionslog-Backups ist falsch oder die Transaktionslogkette ist fehlerhaft.
Importieren Sie die Transaktionslog-Backups in der Reihenfolge, die Sie in der Tabelle der Sicherungssätze vorfinden.
StopAt zu früh Dieser Fehler gibt an, dass das erste Protokoll in der Transaktionsprotokolldatei nach dem Zeitstempel StopAt liegt. Beispiel: Wenn das erste Log in der Transaktionslogdatei auf 2023-09-01T12:00:00 gesetzt ist und das StopAt-Feld den Wert 2023-09-01T11:00:00 hat, gibt Cloud SQL diesen Fehler zurück.
Achten Sie darauf, dass Sie den richtigen StopAt-Zeitstempel und die richtige Transaktionsprotokolldatei verwenden.

Fehlerbehebung bei Exportvorgängen

Problem Fehlerbehebung
HTTP Error 409: Operation failed because another operation was already in progress. Für Ihre Instanz steht bereits ein Vorgang aus. Es ist jeweils nur ein Vorgang zulässig. Senden Sie Ihre Anfrage, nachdem der aktuelle Vorgang abgeschlossen ist.
HTTP Error 403: The service account does not have the required permissions for the bucket. Prüfen Sie, ob der Bucket vorhanden ist und das Dienstkonto für die Cloud SQL-Instanz (die den Export durchführt) die Rolle Storage Object Creator (roles/storage.objectCreator) hat, um den Export in den Bucket zu ermöglichen. Siehe IAM-Rollen für Cloud Storage.
Sie möchten Exporte automatisieren. Cloud SQL bietet keine Möglichkeit, Exporte zu automatisieren.

Sie können Ihr eigenes automatisiertes Exportsystem mit Google Cloud-Produkten wie Cloud Scheduler, Pub/Sub und Cloud Functions erstellen, ähnlich wie in diesem Artikel zur Automatisierung von Sicherungen.

Nächste Schritte