使用分散式 AG 從獨立執行個體移轉資料庫

使用分散式可用性群組 (AG) 將資料庫 (或多個資料庫) 從 SQL Server 的獨立執行個體移轉至 Azure 虛擬機器 (VM) 上的 SQL Server。

驗證來源 SQL Server 執行個體符合必要條件後,請遵循本文中的步驟,在獨立 SQL Server 執行個體上建立可用性群組,並將資料庫 (或資料庫群組) 移轉至 Azure 中的 SQL Server VM。

本文適用於獨立 SQL Server 執行個體上的資料庫。 此解決方案不需要 Windows Server 容錯移轉叢集 (WSFC) 或可用性群組接聽程式。 您也可以移轉可用性群組中的資料庫

Diagram explaining single instance migration using a distributed availability group

初始設定

第一個步驟是在 Azure 中建立 SQL Server VM。 做法是使用 Azure 入口網站Azure PowerShellARM 範本

請務必根據必要條件來設定 SQL Server VM。

為簡單起見,請將目標 SQL Server VM 加入與來源 SQL Server 相同的網域。 否則,請將目標 SQL Server VM 加入與來源 SQL Server 網域同盟的網域。

若要使用自動植入來建立分散式可用性群組 (DAG),DAG 的全域主要 (來源) 執行個體名稱必須符合 DAG 的轉寄站 (目標) 執行個體名稱。 如果全域主要和轉寄站之間有執行個體名稱不符,則必須使用手動植入來建立 DAG,並在未來手動新增任何其他資料庫檔案。

本文使用下列範例參數:

  • 資料庫名稱:Adventureworks
  • 來源機器名稱 (DAG 中的全域主要名稱):OnPremNode
  • 來源 SQL Server 執行個體名稱:MSSQLSERVER
  • 來源可用性群組名稱:OnPremAg
  • 目標 SQL Server VM 名稱 (DAG 中的轉寄站):SQLVM
  • Azure VM 執行個體名稱上的目標 SQL Server:MSSQLSERVER
  • 目標可用性群組名稱:AzureAG
  • 端點名稱:Hadr_endpoint
  • 分散式可用性群組名稱:DAG
  • 網域名稱:Contoso

建立端點

使用 Transact-SQL (T-SQL) 在來源 (OnPremNode) 和目標 (SQLVM) SQL Server 執行個體上建立端點。

若要建立端點,請在來源和目標伺服器上執行此 T-SQL 指令碼:

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 

網域帳戶會自動具有端點的存取權,但服務帳戶可能不會自動成為系統管理員群組的一部分,而且可能沒有連線權限。 若要手動授與 SQL Server 服務帳戶對端點的連線權限,請在這兩部伺服器上執行下列 T-SQL 指令碼:

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

建立來源 AG

由於分散式可用性群組是跨越兩個個別可用性群組的特殊可用性群組,因此您必須先在來源 SQL Server 執行個體上建立可用性群組。 如果您已經有想要在 Azure 中維護的可用性群組,請改為移轉可用性群組

使用 Transact-SQL (T-SQL) 在範例 Adventureworks 資料庫的來源 (OnPremNode) 執行個體上建立可用性群組 (OnPremAg)。

若要建立可用性群組,請在來源上執行此指令碼:

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 

建立目標 AG

您也需要在目標 SQL Server VM 上建立可用性群組。

使用 Transact-SQL (T-SQL) 在目標 (SQLVM) 執行個體上建立可用性群組 (AzureAG)。

若要建立可用性群組,請在目標上執行此指令碼:

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

建立分散式 AG

設定來源 (OnPremAG) 和目標 (AzureAG) 可用性群組之後,請建立分散式可用性群組以跨越這兩個個別可用性群組。

在來源 SQL Server 執行個體 (OnPremNode) 和 AG (OnPremAG) 上使用 Transact-SQL 來建立分散式可用性群組 (DAG)。

若要建立分散式 AG,請在來源上執行此指令碼:

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   

注意

植入模式會設定為 AUTOMATIC,因為目標上的 SQL Server 版本和來源相同。 如果您的 SQL Server 目標版本較高,或您的全域主要和轉寄站具有不同的執行個體名稱,請建立分散式 AG,並將次要 AG 加入分散式 AG,並將 SEEDING_MODE 設定為 MANUAL。 然後,將資料庫從來源手動還原至目標 SQL Server 執行個體。 請檢閱在移轉期間升級版本,以深入瞭解。

建立分散式 AG 之後,將目標執行個體 (SQLVM) 上的目標 AG (AzureAG) 聯結至分散式 AG (DAG)。

若要將目標 AG 加入分散式 AG,請在目標上執行此文稿:

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  

如果您需要取消、暫停或延遲來源和目標可用性群組之間的同步處理 (例如效能問題) ,請在來源全域主要執行個體上執行此指令碼 (OnPremNode) :

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

若要深入瞭解,請檢閱取消自動植入至轉寄站

下一步

建立分散式可用性群組之後,您就可以完成移轉