Daten mithilfe von Sicherungsdateien zwischen SQL Server 2017 und Cloud SQL for SQL Server migrieren

In dieser Anleitung migrieren Sie Daten von SQL Server 2017 Enterprise, das auf Compute Engine ausgeführt wird, zu Cloud SQL for SQL Server 2017 Enterprise. Sie erfahren hier, wie Sie Daten aus SQL Server 2017 exportieren, die Daten in Cloud SQL for SQL Server 2017 importieren und prüfen, ob die Daten erfolgreich importiert wurden.

Informationen zum Migrieren von Daten aus SQL Server 2008 finden Sie unter Daten mithilfe von Sicherungsdateien zwischen SQL Server 2008 und Cloud SQL for SQL Server migrieren.

Diese Anleitung ist hilfreich, wenn Sie ein Systemadministrator, Entwickler, Datenbankadministrator oder DevOps-Entwickler sind, der Daten vom SQL Server 2017 zu Cloud SQL for SQL Server migrieren möchte.

In dieser Anleitung wird vorausgesetzt, dass Sie mit Folgendem vertraut sind.

Ziele

  • SQL Server-VM-Instanz in Compute Engine erstellen, um die Beispieldatenbank zu hosten.
  • Cloud SQL for SQL Server-Instanz erstellen
  • Cloud Storage-Bucket erstellen
  • Beispieldatenbank sichern
  • Datenbank in Cloud SQL for SQL Server importieren
  • Importierte Daten validieren

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Vorbereitung

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Cloud Storage, Cloud SQL Admin, and Compute Engine APIs aktivieren.

    Aktivieren Sie die APIs

  5. Aktivieren Sie Cloud Shell in der Cloud Console.

    Cloud Shell aktivieren

    Unten in der Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Cloud SDK einschließlich des gcloud-Befehlszeilentools vorinstalliert ist. Die Werte sind bereits für Ihr aktuelles Projekt festgelegt. Das Initialisieren der Sitzung kann einige Sekunden dauern.

Skript für eine Beispieldatenbank erstellen

In diesem Abschnitt erstellen Sie ein Skript, um eine vorab geladene Beispieldatenbank auszufüllen. Dann erstellen Sie eine SQL Server 2017-Instanz in Compute Engine, die diese Datenbank verwendet.

  1. Erstellen Sie in Cloud Shell ein PowerShell-Skript, das als Startskript bereitgestellt werden soll:

    cat << 'EOF' > startup.ps1
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    $dataseturl = "https://opendata.maryland.gov/api/views/ryxx-aeaf/rows.csv?accessType=DOWNLOAD"
    Invoke-WebRequest -Uri $dataseturl -OutFile c:\dataset.csv
    Invoke-Sqlcmd -Query "CREATE DATABASE testdb;"
    Invoke-Sqlcmd -Query "CREATE TABLE testdb.dbo.MarylandZipCodes ( zipcode int NOT NULL PRIMARY KEY,  city varchar(255), county varchar(255))"
    Invoke-Sqlcmd -Query "BULK INSERT testdb.dbo.MarylandZipCodes FROM 'c:\dataset.csv' WITH (DATAFILETYPE='char',FIELDTERMINATOR=',' ,ROWTERMINATOR = '0x0a',  FIRSTROW=2);"
    EOF
    

    Dieses Startskript erstellt eine lokale Datenbank namens testdb mit einer Tabelle namens MarylandZipCodes. Dann lädt das Skript die öffentliche Registry für Postleitzahlen von Maryland herunter und importiert die Registry in die Tabelle.

  2. Erstellen Sie eine SQL Server 2017 Enterprise-Instanz für Windows Server 2016:

    gcloud compute instances create sql-server --machine-type n1-highmem-4 \
        --boot-disk-size 50GB \
      --image-project windows-sql-cloud --image-family sql-ent-2017-win-2016 \
      --zone us-central1-f  \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --metadata-from-file windows-startup-script-ps1=startup.ps1
    

    Für diese Anleitung erstellen Sie die Instanz in der Zone us-central1-f mit einem 50 GB großen Bootlaufwerk. Weitere Informationen zu Zonen erhalten Sie unter Cloudstandorte. Das Flag --metadata-from-file legt das PowerShell-Skript als Startskript für die Instanz fest.

Cloud SQL-Instanz und Cloud Storage-Bucket erstellen

  1. Erstellen Sie in Cloud Shell die Cloud SQL for SQL Server 2017 Enterprise-Instanz, zu der Sie später die Datenbank migrieren:

    gcloud beta sql instances create target  \
        --database-version=SQLSERVER_2017_ENTERPRISE \
        --cpu=2 \
        --memory=5GB \
        --root-password=sqlserver12@ \
        --zone=us-central1-f
    

    Es kann einige Minuten dauern, bis die Instanz erstellt ist. Der standardmäßige Root-Nutzername lautet sqlserver und das Standardpasswort sqlserver12@. In dieser Anleitung erstellen Sie die Instanz in der Zone us-central1-f. Weitere Informationen zu Zonen erhalten Sie unter Cloud-Standorte.

  2. Erstellen Sie einen Cloud Storage-Bucket, um die Sicherungsdatei zu speichern, bevor die Daten in Cloud SQL importiert werden:

    gsutil mb -l US "gs://${DEVSHELL_PROJECT_ID}-sql-backups"
    

Die Beispieldatenbank sichern

In diesem Abschnitt stellen Sie eine Verbindung zur virtuellen SQL Server-Maschine (VM) her, erstellen eine Sicherung der Datenbank und laden diese in Cloud Storage hoch.

  1. Setzen Sie in Cloud Shell das Passwort für die SQL Server-VM-Instanz zurück:

    gcloud compute reset-windows-password sql-server --zone=us-central1-f
    

    Notieren Sie sich das neue Passwort für den Nutzer.

  2. Installieren Sie im Browser die Erweiterung "Chrome RDP for Google Cloud".

  3. Gehen Sie in der Cloud Console zur Seite VM-Instanzen.

    ZUR SEITE "VM-INSTANZEN"

  4. Klicken Sie zum Öffnen der Chrome RDP-Erweiterung auf die Schaltfläche RDP für die VM-Instanz sql-server, zu der Sie eine Verbindung herstellen möchten.

  5. Geben Sie in die Felder Nutzername und Passwort den Nutzernamen und das Passwort ein, die Sie zuvor für die SQL Server-VM-Instanz notiert haben.

  6. Lassen Sie das Feld Domain leer und klicken Sie auf OK, um eine Verbindung zur SQL Server-VM herzustellen.

    Akzeptieren Sie das Zertifikat, wenn Sie dazu aufgefordert werden.

  7. Wenn Sie den Bedingungen zustimmen, klicken Sie auf Weiter.

  8. Minimieren Sie im Browser alle Fenster und starten Sie dann das PowerShell-Befehlszeilentool.

  9. Erstellen Sie einen Sicherungsordner:

    mkdir c:\backup
    
  10. Erstellen Sie im Browser im Sicherungsordner eine Sicherung der Datenbank:

    osql -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak'"
    
  11. Kopieren Sie in der Shell in der Instanz die Sicherungsdatei in den Cloud Storage-Bucket:

    $PROJECT_ID=(gcloud config get-value core/project)
    
    gsutil cp -n c:\backup\testdb.bak gs://$PROJECT_ID-sql-backups
    

Sicherungsdatei in Cloud SQL importieren

  1. Rufen Sie in Cloud Shell den Namen des der Cloud SQL-Instanz zugeordneten Dienstkontos ab und speichern Sie diesen in einer Variable:

    SVC_EMAIL_ADDRESS=$(gcloud sql instances describe target \
        --format='value(serviceAccountEmailAddress)')
    echo $SVC_EMAIL_ADDRESS
    

    Google Cloud hat beim Erstellen der Cloud SQL-Instanz ein Dienstkonto erstellt. Sie verwenden das Dienstkonto, um der Cloud SQL-Instanz Zugriff auf die erforderlichen Ressourcen zu gewähren.

  2. Fügen Sie das Dienstkonto der Access Control List (ACL) des Cloud Storage-Buckets mit Schreibberechtigungen hinzu:

    gsutil acl ch -u ${SVC_EMAIL_ADDRESS}:W gs://${DEVSHELL_PROJECT_ID}-sql-backups
    
  3. Fügen Sie das Dienstkonto mit Leseberechtigungen der Importdatei hinzu:

    gsutil acl ch -u $SVC_EMAIL_ADDRESS:R gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak
    
  4. Importieren Sie die Sicherungsdatei in die Cloud SQL-Datenbank:

    gcloud beta sql import bak target \
        gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak --database testdb
    

Datenimport validieren

In diesem Abschnitt prüfen Sie, ob die Beispieldaten erfolgreich importiert wurden.

  1. Installieren Sie in Cloud Shell das SQL Server-Toolkit:

    sudo apt-get install -y mssql-tools
    

    Wenn Sie den Lizenzbedingungen zustimmen, geben Sie yes ein, wenn Sie dazu aufgefordert werden.

  2. Um sicher auf die Cloud SQL-Instanz zuzugreifen, laden Sie den Cloud SQL-Proxy herunter:

    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  3. Starten Sie den Cloud SQL-Proxy:

    CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)')
    ./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  4. Lesen Sie die Anzahl der Zeilen in der Cloud SQL-Tabelle:

    /opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q "select count(*)
    from testdb.dbo.MarylandZipCodes"
    

    Wenn Sie dazu aufgefordert werden, geben Sie das Passwort sqlserver12@ ein. Achten Sie in der Ausgabe darauf, dass das Ergebnis 619 ist.

Bereinigen

Am einfachsten können Sie die Abrechnung deaktivieren, wenn Sie das Cloud-Projekt löschen, das Sie für die Anleitung erstellt haben.

Projekt löschen

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte