Verwenden Sie eine verteilte AG zum Migrieren von Datenbanken aus einer eigenständigen Instanz

Verwenden Sie eine verteilte Verfügbarkeitsgruppe (AG), um eine Datenbank (oder mehrere Datenbanken) von einer eigenständigen Instanz von SQL Server zu einem SQL Server auf Azure Virtual Machines (VMs) zu migrieren.

Sobald Sie überprüft haben, dass Ihre SQL Server-Quellinstanz die Voraussetzungen erfüllt, folgen Sie den Schritten in diesem Artikel, um eine Verfügbarkeitsgruppe auf Ihrer eigenständigen SQL Server-Instanz zu erstellen und Ihre Datenbank (oder eine Gruppe von Datenbanken) auf Ihre SQL Server-VM in Azure zu migrieren.

Dieser Artikel ist für Datenbanken auf einer eigenständigen Instanz von SQL Server gedacht. Für diese Lösung ist kein Windows Server Failovercluster (WSFC) oder ein Verfügbarkeitsgruppenlistener erforderlich. Es ist auch möglich, Datenbanken in einer Verfügbarkeitsgruppe zu migrieren.

Diagramm: Erläuterung der Migration einer eigenständigen Instanz anhand einer verteilten Verfügbarkeitsgruppe

Ersteinrichtung

Der erste Schritt besteht im Erstellen Ihrer SQL Server-VM in Azure. Hierfür können Sie das Azure-Portal, Azure PowerShell oder eine ARM-Vorlage verwenden.

Stellen Sie sicher, dass Ihr SQL Server-VM entsprechend den Voraussetzungen konfiguriert ist.

Der Einfachheit halber verbinden Sie Ihre SQL Server Ziel-VM mit derselben Domäne wie Ihren SQL Quell-Server. Andernfalls verbinden Sie Ihre SQL Server Ziel-VM mit einer Domäne, die mit der Domäne Ihres SQL Quell-Servers zusammengeschlossen ist.

Um das automatische Seeding zur Erstellung Ihrer verteilte Verfügbarkeitsgruppe (DAG) zu verwenden, muss der Instanzname für die globale Primärinstanz (Quelle) der DAG mit dem Instanznamen des Forwarders (Ziel) der DAG übereinstimmen. Wenn der Instanzname zwischen der globalen Primärinstanz und dem Forwarder nicht übereinstimmt, müssen Sie die DAG mit manuellem Seeding erstellen und in Zukunft zusätzliche Datenbankdateien manuell hinzufügen.

In diesem Artikel werden die folgenden Beispielparameter verwendet:

  • Datenbankname: Adventureworks
  • Quellcomputernamen (global primär in DAG): OnPremNode
  • Name der SQL Server-Quellinstanz: MSSQLSERVER
  • Name der Quell-Verfügbarkeitsgruppe: OnPremAg
  • Name der SQL Server Ziel-VM (Forwarder in DAG): SQLVM
  • Name des SQL Ziel-Servers auf der Azure VM-Instanz: MSSQLSERVER
  • Name der Ziel-Verfügbarkeitsgruppe: AzureAG
  • Name des Endpunkts: Hadr_endpoint
  • Name der verteilten Verfügbarkeitsgruppe: DAG
  • Domänenname: Contoso

Erstellen von Endpunkten

Verwenden Sie Transact-SQL (T-SQL), um Endpunkte sowohl für die SQL Server Quell- (OnPremNode) als auch für die Zielinstanzen (SQLVM) zu erstellen.

Um Ihre Endpunkte zu erstellen, führen Sie dieses T-SQL-Skript sowohl auf den Quell- als auch auf den Zielservern aus:

CREATE ENDPOINT [Hadr_endpoint]  
   STATE=STARTED 
   AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) 
FOR DATA_MIRRORING ( 
   ROLE = ALL,  
   AUTHENTICATION = WINDOWS NEGOTIATE, 
   ENCRYPTION = REQUIRED ALGORITHM AES 
) 
GO 

Domänenkonten haben automatisch Zugriff auf Endpunkte, aber Dienstkonten sind möglicherweise nicht automatisch Teil der sysadmin-Gruppe und verfügen möglicherweise nicht über die Berechtigung zum Verbinden. Führen Sie das folgende T-SQL-Skript auf beiden Servern aus, um dem SQL Server-Dienstkonto manuell eine Verbindungsberechtigung für den Endpunkt zu erteilen:

GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [<your account>] 

Quell-AG erstellen

Da es sich bei einer verteilten Verfügbarkeitsgruppe um eine spezielle Verfügbarkeitsgruppe handelt, die sich über zwei einzelne Verfügbarkeitsgruppen erstreckt, müssen Sie zuerst eine Verfügbarkeitsgruppe für die SQL Server-Quellinstanz erstellen. Wenn Sie bereits über eine Verfügbarkeitsgruppe verfügen, die Sie in Azure verwalten möchten, dann migrieren Sie Ihre Verfügbarkeitsgruppe stattdessen.

Verwenden Sie Transact-SQL (T-SQL), um eine Verfügbarkeitsgruppe (OnPremAg) auf der Quellinstanz (OnPremNode) für die Beispiel-Datenbank Adventureworks zu erstellen.

Führen Sie zum Erstellen der Verfügbarkeitsgruppe dieses Skript für die Quelle aus:

CREATE AVAILABILITY GROUP [OnPremAG] 
   WITH (AUTOMATED_BACKUP_PREFERENCE = PRIMARY, 
   DB_FAILOVER = OFF, 
   DTC_SUPPORT = NONE, 
   CLUSTER_TYPE=NONE )
   FOR DATABASE [Adventureworks] 

REPLICA ON N'OnPremNode' 
WITH (ENDPOINT_URL = N'TCP://OnPremNode.contoso.com:5022', FAILOVER_MODE = MANUAL, 
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)); 

GO 

Ziel-AG erstellen

Sie müssen auch eine Verfügbarkeitsgruppe auf der SQL Server Ziel-VM erstellen.

Verwenden Sie Transact-SQL (T-SQL), um eine Verfügbarkeitsgruppe (AzureAG) auf der Ziel-Instanz (SQLVM) zu erstellen.

Führen Sie zum Erstellen der Verfügbarkeitsgruppe dieses Skript für das Ziel aus:

CREATE AVAILABILITY GROUP [AzureAG]
   WITH (AUTOMATED_BACKUP_PREFERENCE = PRIMARY, 
   DB_FAILOVER = OFF, 
   DTC_SUPPORT = NONE, 
   CLUSTER_TYPE=NONE, 
   REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0) 
FOR REPLICA ON N'SQLVM' 
WITH (ENDPOINT_URL = N'TCP://SQLVM.contoso.com:5022', FAILOVER_MODE = MANUAL,    
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,    
SEEDING_MODE = AUTOMATIC,SECONDARY_ROLE(ALLOW_CONNECTIONS = NO));    
GO

Erstellen einer verteilten AG

Nachdem Sie Ihre Quell- (OnPremAG) und Zielverfügbarkeitsgruppen (AzureAG) konfiguriert haben, erstellen Sie Ihre verteilte Verfügbarkeitsgruppe, die beide individuellen Verfügbarkeitsgruppen umfasst.

Verwenden Sie Transact-SQL auf der SQL Server Quell-Instanz (OnPremNode) und AG (OnPremAG), um die verteilte Verfügbarkeitsgruppe (DAG) zu erstellen.

Führen Sie zum Erstellen der verteilten AG dieses Skript für die Quelle aus:

CREATE AVAILABILITY GROUP [DAG]   
   WITH (DISTRIBUTED)    
   AVAILABILITY GROUP ON 
      'OnPremAG' WITH    
      (		 
         LISTENER_URL = 'tcp://OnPremNode.contoso.com:5022',   
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   
         FAILOVER_MODE = MANUAL,    
         SEEDING_MODE = AUTOMATIC    
      ),    
      'AzureAG' WITH     
      (    
         LISTENER_URL = 'tcp://SQLVM.contoso.com:5022',  
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,    
         FAILOVER_MODE = MANUAL,    
         SEEDING_MODE = AUTOMATIC    
      );    
GO   

Hinweis

Der Seeding-Modus ist auf AUTOMATIC eingestellt, da die Version von SQL Server auf dem Ziel und der Quelle dieselbe ist. Wenn Ihr SQL Server-Ziel eine höhere Version ist oder wenn Ihr globaler Primärserver und der Forwarder unterschiedliche Instanznamen haben, erstellen Sie die verteilte AG und verbinden Sie die sekundäre AG mit der verteilten AG mit SEEDING_MODE auf MANUAL. Stellen Sie die Datenbanken dann manuell von der Quell- auf die Ziel-SQL Server-Instanz wieder her. Lesen Sie Versionsupgrades während der Migration für weitere Informationen.

Nachdem die verteilte AG erstellt wurde, verknüpfen Sie die Ziel-AG (AzureAG) auf der Ziel-Instanz (SQLVM) mit der verteilten AG (DAG).

Um die Ziel-AG mit der verteilten AG zu verknüpfen, führen Sie dieses Skript auf der Ziel-Instanz aus:

ALTER AVAILABILITY GROUP [DAG]    
JOIN    
AVAILABILITY GROUP ON   
   'OnPremAG' WITH    
 	(LISTENER_URL = 'tcp://OnPremNode.contoso.com:5022', 
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,  
    FAILOVER_MODE = MANUAL,  
    SEEDING_MODE = AUTOMATIC  
 	),   
   'AzureAG' WITH 
 	(LISTENER_URL = 'tcp://SQLVM.contoso.com:5022',    
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   
    FAILOVER_MODE = MANUAL,    
    SEEDING_MODE = AUTOMATIC    
 	);     
GO  

Wenn Sie die Synchronisierung zwischen der Quell- und der Zielverfügbarkeitsgruppe abbrechen, anhalten oder verzögern müssen (z. B. bei Leistungsproblemen), führen Sie dieses Skript auf der globalen primären Quellinstanz (OnPremNode) aus:

ALTER AVAILABILITY GROUP [DAG] 
   MODIFY  
   AVAILABILITY GROUP ON   
   'AzureAG' WITH 
   (  SEEDING_MODE = MANUAL  );  

Weitere Informationen finden Sie unter Automatisches Seeding an Forwarder abbrechen.

Nächste Schritte

Nachdem Ihre verteilte Verfügbarkeitsgruppe erstellt wurde, können Sie die Migration abschließen.