次の方法で共有


分散 AG を使用してスタンドアロン インスタンスからデータベースを移行する

分散型可用性グループ (AG) を使用して、データベース (または複数のデータベース) を SQL Server のスタンドアロン インスタンスから Azure Virtual Machines (VM) 上の SQL Server に移行します。

ソース SQL Server インスタンスが前提条件を満たしていることを検証したら、この記事の手順に従ってスタンドアロン SQL Server インスタンスに可用性グループを作成し、データベース (またはデータベースのグループ) を Azure の SQL Server VM に移行します。

この記事では、SQL Server のスタンドアロン インスタンス上のデータベースを想定しています。 このソリューションでは、Windows Server フェールオーバー クラスター (WSFC) または可用性グループ リスナーは不要です。 可用性グループ 内のデータベースを移行することもできます。

分散型可用性グループを使用した単一インスタンスの移行を説明する図

初期セットアップ

最初の手順では、Azure 内に SQL Server VM を作成します。 これを行うには、Azure portalAzure PowerShell、または ARM テンプレートを使用します。

必ず、前提条件に従って 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 

ドメイン アカウントではエンドポイントに自動的にアクセスできますが、サービス アカウントは自動的には sysadmin グループに含まれない場合があり、接続アクセス許可を持たない場合があります。 エンドポイントへの SQL Server サービス アカウントの接続アクセス許可を手動で付与するには、両方のサーバーで次の T-SQL スクリプトを実行します。

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

ソース AG を作成する

分散型可用性グループは 2 つの個別の可用性グループにまたがる特殊な可用性グループであるため、最初に、ソース 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) に可用性グループ (Azure AG)を作成します。

可用性グループを作成するには、ターゲットで次のスクリプトを実行します。

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   

Note

ターゲットとソースの SQL Server のバージョンが同じであるため、シード処理モードは AUTOMATIC に設定されています。 SQL Server ターゲットのバージョンのほうが高い場合、またはグローバル プライマリとフォワーダーのインスタンス名が異なる場合は、分散型 AG を作成し、セカンダリ AG を SEEDING_MODEMANUAL に設定されている分散型 AG に参加させます。 その後、データベースをソースからターゲットの 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  );  

詳細については、「フォワーダーへの自動シード処理を取り消す」を参照してください。

次のステップ

分散型可用性グループが作成されると、移行を完了する準備が整います。