In dieser Anleitung erfahren Sie, wie Sie Daten von Microsoft SQL Server 2017 Enterprise, die auf Compute Engine ausgeführt werden, zu Cloud SQL for SQL Server 2017 Enterprise migrieren. Diese Anleitung ist nützlich, wenn Sie Systemadministrator, Entwickler, Datenbankadministrator oder DevOps-Entwickler sind. In der Anleitung wird gezeigt, wie Sie SQL Server Distribution einrichten, den SQL Server-Agent zur Snapshot-Replikation in Cloud SQL for SQL Server 2017 verwenden prüfen, ob die Daten erfolgreich importiert wurden.
In dieser Anleitung verwenden Sie die Snapshot-Replikation, um die Quelle und das Ziel synchron zu halten. Bei der Snapshot-Replikation werden Abonnenten eine vollständige Kopie jedes Artikels, also ein veröffentlichtes Datenbankobjekt, gesendet. Cloud SQL unterstützt auch die Transaktionsreplikation, bei der nur inkrementelle Daten gesendet werden. Eine Einschränkung der Transaktionsreplikation besteht darin, dass Tabellen Primärschlüssel haben müssen. Weitere Informationen zu SQL Server-Replikationstypen finden Sie in der SQL Server-Dokumentation.
Der Einfachheit halber wird in dieser Anleitung der SQL Server-Quellserver zum Hosten eines Collectors verwendet. Wenn in einem Produktionsszenario Daten von außerhalb der Google Cloud repliziert werden, könnte es sinnvoll sein, die Verteilung auf der Google Cloud-Seite auf einer Compute Engine-Instanz zu hosten.
In dieser Anleitung wird vorausgesetzt, dass Sie mit Folgendem vertraut sind.
- SQL Server
- Microsoft PowerShell
- Compute Engine
- Cloud SQL for SQL Server
Ziele
- SQL Server-VM-Instanz in Compute Engine erstellen, um die Beispieldatenbank zu hosten.
- Beispieldatenbank ausfüllen
- Cloud SQL for SQL Server-Instanz erstellen
- Distributor erstellen
- Publikation und Abo einrichten
- Replikation von SQL Server zu Cloud SQL initiieren
- Importierte Daten validieren
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Compute Engine
- Cloud SQL
- Cloud Storage
- SQL Server (Premium mit Compute Engine)
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin and Compute Engine API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin and Compute Engine API APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- Installieren Sie einen RDP-Client (Remote Desktop Protocol) Ihrer Wahl. Weitere Informationen finden Sie unter Microsoft Remote Desktop-Clients. Wenn Sie bereits einen RDP-Client installiert haben, können Sie diese Aufgabe überspringen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
SQL Server-VM erstellen
Im ersten Schritt erstellen Sie eine SQL Server 2017-Instanz auf einer Windows 2016-VM in Compute Engine und stellen mithilfe von RDP eine Verbindung zu ihr her.
Erstellen Sie in Cloud Shell eine SQL Server 2017-Standardinstanz unter Windows Server 2016. Die Quelldatenbank muss eine SQL Server-Standard- oder Enterprise-Datenbank sein, da niedrigere Ebenen nicht die Funktionen der Datenbank-Publisher haben.
gcloud compute instances create sqlserver --machine-type=n1-standard-4 \ --boot-disk-size=100GB \ --image-project=windows-sql-cloud \ --image-family=sql-std-2017-win-2016 \ --zone=us-central1-f \ --scopes=https://www.googleapis.com/auth/cloud-platform
Für diese Anleitung erstellen Sie die Instanz in der Zone
us-central1-f
mit einem 100 GB großen Bootlaufwerk. Weitere Informationen finden Sie unter Cloudstandorte.Generieren Sie ein Windows-Passwort:
gcloud compute reset-windows-password sqlserver --zone=us-central1-f
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie im Bereich Compute Engine der Google Cloud Console auf das Drop-down-Menü RDP und wählen Sie die Option RDP-Datei herunterladen aus, um die RDP-Datei für die Instanz herunterzuladen.
Stellen Sie mithilfe dieser Datei die Verbindung zur Instanz mithilfe eines RDP-Clients her. Weitere Informationen finden Sie unter Microsoft Remote Desktop-Clients.
Geben Sie in die Felder username und password den Nutzernamen und das Passwort ein, die Sie für die SQL Server-VM-Instanz erstellt haben. 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.
Wenn Sie den Bedingungen zustimmen, klicken Sie auf Weiter.
Minimieren Sie in der Instanz alle Fenster, klicken Sie in der Windows-Taskleiste auf Start, geben Sie
PowerShell
ein, klicken Sie mit der rechten Maustaste auf die Windows PowerShell App und wählen Sie Als Administrator ausführen aus.Erstellen Sie in der PowerShell-Eingabeaufforderung eine Verzeichnisstruktur für den Datenbankspeicher:
mkdir c:\sql-server-data\adventureworks
Beispieldatenbank erstellen und ausfüllen
Sie laden jetzt die Sicherungsdatei von AdventureWorks database von Microsoft herunter und stellen sie in Ihrer SQL Server-Instanz wieder her. Diese Datenbank simuliert die Produktionsdatenbank, die Sie migrieren möchten.
Laden Sie in der PowerShell-Befehlszeile die Sicherungsdatei
AdventureWorksLT2017.bak
herunter, um C zu starten:bitsadmin /transfer sampledb /dynamic /download /priority FOREGROUND "https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorksLT2017.bak " C:\sql-server-data\AdventureWorksLT2017.bak
Stellen Sie die Datenbank wieder her:
osql -E -Q "USE [master] RESTORE DATABASE [AdventureWorksLT2017] FROM DISK = N'C:\sql-server-data\AdventureWorksLT2017.bak' WITH FILE = 1, MOVE N'AdventureWorksLT2012_Data' TO N'C:\sql-server-data\adventureworks\AdventureWorksLT2012.mdf', MOVE N'AdventureWorksLT2012_Log' TO N'C:\sql-server-data\adventureworks\AdventureWorksLT2012_log.ldf', NOUNLOAD, STATS = 5"
Die neu wiederhergestellte Datenbank validieren. Dazu wird die Anzahl der Zeilen in der Tabelle
Customer
abgefragt. Die Ausgabe hat 847 Zeilen.osql -E -Q "select count(*) from AdventureWorksLT2017.SalesLT.Customer"
Cloud SQL-Instanz vorbereiten
Erstellen Sie in Cloud Shell die Cloud SQL for SQL Server 2017 Enterprise-Instanz:
gcloud sql instances create target-sqlserver \ --database-version=SQLSERVER_2017_STANDARD \ --cpu=4 \ --memory=15 \ --storage-size=100 \ --root-password=sqlserver12@ \ --zone=us-central1-f
Der Root-Nutzer ist
sqlserver
mit dem Passwortsqlserver12@
. Notieren Sie sich auch die SQL Server-IP-Adresse.Speichern Sie die IP-Adresse der SQL Server-Quell-VM in einer Umgebungsvariablen:
sql_source_ip=$(gcloud compute instances describe sqlserver \ --zone=us-central1-f | grep natIP | awk '{print $2}') echo $sql_source_ip
Fügen Sie die SQL Server-VM-IP-Adresse mit der Cloud SQL-Instanz der zugelassenen Liste (weiße Liste) hinzu:
gcloud sql instances patch target-sqlserver --authorized-networks=$sql_source_ip
Erstellen Sie eine Zieldatenbank:
gcloud sql databases create AdventureWorksTarget --instance=target-sqlserver
Überprüfen Sie in der PowerShell-Befehlszeile, die Sie als Administrator gestartet haben, die Verbindung zu Cloud SQL für SQL Server:
$cloud_sql_server_ip=gcloud sql instances describe target-sqlserver --format='value(ipAddresses.ipAddress)' osql -S $cloud_sql_server_ip -U sqlserver -P sqlserver12@ -Q "select 'test'"
Der Befehl gibt
'test'
aus.
Replikation von der VM zu Cloud SQL initiieren
Mithilfe der SQL Server-Snapshot-Replikation erstellen Sie einen Job, um Datenbank-Snapshots in Cloud SQL zu replizieren.
Distributor einrichten
Konfigurieren Sie nun die SQL Server-VM als SQL Server-Collector. In der Praxis kann ein Distributor auf einer separaten Maschine ausgeführt werden, aber in dieser Anleitung wird er auf derselben VM ausgeführt.
Aktualisieren Sie in der PowerShell-Befehlszeile, die Sie als Administrator gestartet haben, den Namen der lokalen SQL Server-Instanz mit dem Namen der VM-Host:
$servername=hostname osql -E -Q "sp_dropserver 'INST-INSTALL-SQ';" osql -E -Q "sp_addserver '$servername', local;" Restart-Service -F MSSQLServer mkdir c:\sql-server-data\repldata
Wenn Sie den Fehler
Cannot open MSSQLServer service on computer '.'.
erhalten, haben Sie die PowerShell-Befehlszeile wahrscheinlich nicht als Administrator ausgeführt.Prüfen Sie, ob der Name der Instanz jetzt
"sqlserver"
lautet:osql -E -Q "select @@servername;"
Geben Sie die Distributionsdatenbank an:
$servername=hostname osql -E -Q "use master; exec sp_adddistributor @distributor = N'$servername', @password = N'';" osql -E -Q "exec sp_adddistributiondb @database = N'distribution', @data_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Data', @log_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Data', @log_file_size = 2, @min_distretention = 0, @max_distretention = 72, @history_retention = 48, @deletebatchsize_xact = 5000, @deletebatchsize_cmd = 2000, @security_mode = 1"
Konfigurieren Sie die Distributionsdatenbank:
osql -E -Q " use [distribution] if (not exists (select * from sysobjects where name = 'UIProperties' and type = 'U ')) create table UIProperties(id int) if (exists (select * from ::fn_listextendedproperty('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', null, null))) exec sp_updateextendedproperty N'SnapshotFolder', N'c:\sql-server-data\repldata', 'user', dbo, 'table', 'UIProperties' else exec sp_addextendedproperty N'SnapshotFolder', N'c:\sql-server-data\repldata', 'user', dbo, 'table', 'UIProperties' "
Registrieren Sie den SQL Server-VM-Namen als Publisher beim Distribution:
osql -E -Q "exec sp_adddistpublisher @publisher = N'$servername', @distribution_db = N'distribution', @security_mode = 1, @working_directory = N'c:\sql-server-data\repldata', @trusted = N'false', @thirdparty_flag = 0, @publisher_type = N'MSSQLSERVER'"
Publikation einrichten
Nachdem die Verteilung eingerichtet ist, konfigurieren Sie, welche Tabellen veröffentlicht werden.
Aktivieren und starten Sie in der PowerShell-Befehlszeile den SQL Server-Agent:
Set-Service -Name SQLServerAgent -StartupType Automatic Start-Service -Name SQLServerAgent
Erstellen Sie eine Publikation für die Datenbank
AdventureWorksLT2017
:$servername=hostname osql -E -Q " use [AdventureWorksLT2017] exec sp_replicationdboption @dbname = N'AdventureWorksLT2017', @optname = N'publish', @value = N'true'" osql -E -Q "use [AdventureWorksLT2017] exec sp_addpublication @publication = N'advn-pub3', @description = N'Snapshot publication of database ''AdventureWorksLT2017'' from Publisher ''$servername''.', @sync_method = N'native', @retention = 0, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'true', @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21, @ftp_login = N'anonymous', @allow_subscription_copy = N'false', @add_to_active_directory = N'false', @repl_freq = N'snapshot', @status = N'active', @independent_agent = N'true', @immediate_sync = N'true', @allow_sync_tran = N'false', @autogen_sync_procs = N'false', @allow_queued_tran = N'false', @allow_dts = N'false', @replicate_ddl = 1"
Konfigurieren Sie die Publikation so, dass einmal pro Stunde ein Snapshot der Quelle an Cloud SQL gesendet wird:
osql -E -Q " use [AdventureWorksLT2017] exec sp_addpublication_snapshot @publication = N'advn-pub3', @frequency_type = 4, @frequency_interval = 1, @frequency_relative_interval = 1, @frequency_recurrence_factor = 0, @frequency_subday = 8, @frequency_subday_interval = 1, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @job_login = null, @job_password = null, @publisher_security_mode = 1"
Artikel (Tabellen) zur Publikation hinzufügen Obwohl die
AdventureWorksLT2017
-Datenbank viele Tabellen enthält, sollten Sie der Einfachheit halber drei Tabellen replizieren:Address
,Customer
undCustomerAddress
.osql -E -Q " use [AdventureWorksLT2017] exec sp_addarticle @publication = N'advn-pub3', @article = N'Address', @source_owner = N'SalesLT', @source_object = N'Address', @type = N'logbased', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509D, @identityrangemanagementoption = N'manual', @destination_table = N'Address', @destination_owner = N'SalesLT', @vertical_partition = N'false' " osql -E -Q " use [AdventureWorksLT2017] exec sp_addarticle @publication = N'advn-pub3', @article = N'Customer', @source_owner = N'SalesLT', @source_object = N'Customer', @type = N'logbased', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509D, @identityrangemanagementoption = N'manual', @destination_table = N'Customer', @destination_owner = N'SalesLT', @vertical_partition = N'false' " osql -E -Q " use [AdventureWorksLT2017] exec sp_addarticle @publication = N'advn-pub3', @article = N'CustomerAddress', @source_owner = N'SalesLT', @source_object = N'CustomerAddress', @type = N'logbased', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509D, @identityrangemanagementoption = N'manual', @destination_table = N'CustomerAddress', @destination_owner = N'SalesLT', @vertical_partition = N'false' "
Erstellen Sie manuell einen Snapshot der Artikel. Andernfalls kann es bis zu einer Stunde dauern, bis der Planer den ersten Snapshot erstellt.
osql -E -Q "use [AdventureWorksLT2017] exec sp_startpublication_snapshot @publication = N'advn-pub3'"
Abo einrichten
Sie erstellen jetzt ein Abo, das die veröffentlichten Daten an Cloud SQL sendet.
Erstellen Sie über die PowerShell-Befehlszeile ein Abo, um den Veröffentlichungs-Snapshot an Cloud SQL zu senden:
$cloud_sql_server_ip=gcloud sql instances describe target-sqlserver --format='value(ipAddresses.ipAddress)' $cloud_sql_user="sqlserver" $cloud_sql_password="sqlserver12@" $target_db_name="AdventureWorksTarget" osql -E -Q " use [AdventureWorksLT2017] exec sp_addsubscription @publication = N'advn-pub3', @subscriber = N'$cloud_sql_server_ip', @destination_db = N'$target_db_name', @subscription_type = N'Push', @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0 exec sp_addpushsubscription_agent @publication = N'advn-pub3', @subscriber = N'$cloud_sql_server_ip', @subscriber_db = N'$target_db_name', @job_login = null, @job_password = null, @subscriber_security_mode = 0, @subscriber_login = N'$cloud_sql_user', @subscriber_password = N'$cloud_sql_password', @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20200408, @active_end_date = 99991231, @enabled_for_syncmgr = N'False', @dts_package_location = N'Distributor' "
Validieren Sie, ob die Daten in der Cloud SQL-Instanz verfügbar sind:
osql -S $cloud_sql_server_ip -U $cloud_sql_user -P $cloud_sql_password -Q "select count(*) from [AdventureWorksTarget].[SalesLT].[CustomerAddress] UNION select count(*) from [AdventureWorksTarget].[SalesLT].[Customer] UNION Select count(*) from [AdventureWorksTarget].[SalesLT].[Address]"
Der Befehl gibt
417
,450
,847
aus
Bereinigen
Nachdem Sie die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.
Projekt löschen
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Nächste Schritte
- Daten von SQL Server 2017 zu Cloud SQL for SQL Server mit Sicherungsdateien migrieren
- Daten aus SQL Server 2008 zu Cloud SQL für SQL Server mithilfe von Sicherungsdateien migrieren
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center