リンクのために環境を準備する - Azure SQL Managed Instance
適用対象: Azure SQL Managed Instance
この記事では、Windows や Linux にインストールされた SQL Server と Azure SQL Managed Instance 間のレプリケーションを行うために、Managed Instance リンク用の環境を準備する方法について説明します。
Note
ダウンロード可能なスクリプトを使用して、Managed Instance リンク用の環境の準備を自動化できます。 詳細については、リンク設定の自動化に関するブログを参照してください。
前提条件
SQL Server と Azure SQL Managed Instance 間のリンクを作成するには、次の前提条件が必要です。
- 有効な Azure サブスクリプション アカウントがない場合は、無料アカウントを作成してください。
- 必要なサービス更新プログラムがインストールされている SQL Server のサポート対象バージョン。
- Azure SQL Managed Instance。 ない場合はこれを開始します。
- 最初のプライマリにするサーバーを決定し、リンクを作成する場所を決定します。
- SQL Managed Instance プライマリから SQL Server セカンダリへのリンクの構成は、SQL Server 2022 CU10 以降、および SQL Server 2022 更新ポリシーを使用して構成されたインスタンスによってのみサポートされます。
注意事項
リンク機能で使用する SQL managed instance を作成するときは、SQL Server で使用されるインメモリ OLTP 機能のメモリ要件を考慮してください。 詳細については、「Azure SQL Managed Instance のリソース制限の概要」を参照してください。
アクセス許可
SQL Server の場合、sysadmin アクセス許可が必要です。
Azure SQL Managed Instance の場合、SQL Managed Instance 共同作成者のメンバーであるか、カスタム ロールに対して次のアクセス許可を持っている必要があります。
Microsoft.Sql/ リソース | 必要なアクセス許可 |
---|---|
Microsoft.Sql/managedInstances | /read、/write |
Microsoft.Sql/managedInstances/hybridCertificate | /action |
Microsoft.Sql/managedInstances/databases | /read、/delete、/write、/completeRestore/action、/readBackups/action、/restoreDetails/read |
Microsoft.Sql/managedInstances/distributedAvailabilityGroups | /read、/write、/delete、/setRole/action |
Microsoft.Sql/managedInstances/endpointCertificates | /read |
Microsoft.Sql/managedInstances/hybridLink | /read、/write、/delete |
Microsoft.Sql/managedInstances/serverTrustCertificates | /write、/delete、/read |
SQL Server インスタンスを準備する
SQL Server インスタンスを準備するには、次のことを検証する必要があります。
- サポートされる最小バージョンである。
- 可用性グループ機能を有効にしている。
- 適切なトレース フラグを起動時に追加している。
- データベースが完全復旧モデルであり、バックアップされている。
これらの変更を有効にするためには、SQL Server の再起動が必要になります。
サービスの更新プログラムをインストールする
SQL Server バージョンに対する適切なサービス更新プログラムがインストールされていることを確認してください。サポート対象バージョン表を参照してください。 更新プログラムをインストールする必要がある場合は、更新中に SQL Server インスタンスを再起動する必要があります。
お使いの SQL Server バージョンを確認するには、次の Transact-SQL (T-SQL) スクリプトを SQL Server で実行します。
-- Run on SQL Server
-- Shows the version and CU of the SQL Server
USE master;
GO
SELECT @@VERSION as 'SQL Server version';
master
データベースにデータベース マスター キーを作成する
master
データベースにデータベース マスター キーを作成します (まだ存在しない場合)。 次のスクリプトの <strong_password>
の代わりにご自分のパスワードを挿入し、機密情報として安全な場所に保管します。 この T-SQL スクリプトを SQL Server で実行します。
-- Run on SQL Server
-- Create a master key
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>';
データベース マスター キーがあることを確認するために、SQL Server で次の T-SQL スクリプトを使用します。
-- Run on SQL Server
USE master;
GO
SELECT * FROM sys.symmetric_keys WHERE name LIKE '%DatabaseMasterKey%';
可用性グループを有効にする
リンク機能は、Always On 可用性グループ機能に依存しており、これは既定では有効になっていません。 詳細については、「Always On 可用性グループ機能を有効にする」を参照してください。
Note
SQL Server on Linux については、「Always On 可用性グループを有効にする」をご覧ください。
Always On 可用性グループ機能が有効になっていることを確認するには、SQL Server で次の T-SQL スクリプトを実行します。
-- Run on SQL Server
-- Is the availability groups feature enabled on this SQL Server
DECLARE @IsHadrEnabled sql_variant = (select SERVERPROPERTY('IsHadrEnabled'))
SELECT
@IsHadrEnabled as 'Is HADR enabled',
CASE @IsHadrEnabled
WHEN 0 THEN 'Availability groups DISABLED.'
WHEN 1 THEN 'Availability groups ENABLED.'
ELSE 'Unknown status.'
END
as 'HADR status'
重要
SQL Server 2016 (13.x) では、可用性グループ機能を有効にする必要がある場合、「SQL Server 2016 の前提条件を準備する - Azure SQL Managed Instance リンク」に記載されている追加の手順を完了する必要があります。 これらの追加の手順は、リンクでサポートされている SQL Server 2019 (15.x) 以降のバージョンでは必要ありません。
可用性グループ機能が有効になっていない場合は、以下の手順に従って有効にします。
[SQL Server 構成マネージャー] を開きます。
左側のウィンドウから [SQL Server サービス] を選択します。
SQL Server サービスを右クリックし、 [プロパティ] を選択します。
[Always On 可用性グループ] タブに移動します。
[AlwaysOn 可用性グループを有効にする] チェックボックスをオンにして、[OK] を選択します。
- SQL Server 2016 (13.x) を使用している場合で、[Always On 可用性グループを有効にする] オプションがメッセージ
This computer is not a node in a failover cluster.
で無効になっている場合は、「SQL Server 2016 の前提条件を準備する - Azure SQL Managed Instance リンク」に記載されている追加の手順に従います。 そのような追加の手順を完了したら、もう一度こちらの手順をやり直してください。
- SQL Server 2016 (13.x) を使用している場合で、[Always On 可用性グループを有効にする] オプションがメッセージ
ダイアログで [OK] を選択します。
SQL Server サービスを再起動します。
起動時のトレース フラグを有効にする
リンクのパフォーマンスを最適化するために、起動時に次のトレース フラグを有効にすることをお勧めします。
-T1800
: このトレース フラグは、可用性グループ内のプライマリ レプリカとセカンダリ レプリカのログ ファイルが、セクター サイズが 512 バイトと 4KB のように異なるディスクでホストされているときのパフォーマンスを最適化します。 プライマリ レプリカとセカンダリ レプリカの両方のディスク セクター サイズが 4KB であれば、このトレース フラグは必要ありません。 詳しくは、KB3009974 を参照してください。-T9567
: このトレース フラグは、自動シード処理時の可用性グループのデータ ストリーム圧縮を有効にします。 圧縮によってプロセッサの負荷が増加しますが、シード処理中の転送時間が大幅に短縮されます。
Note
SQL Server on Linux については、「 トレース フラグを有効にする」をご覧ください。
起動時にこれらのトレース フラグを有効にするには、次の手順を使用します。
[SQL Server 構成マネージャー] を開きます。
左側のウィンドウから [SQL Server サービス] を選択します。
SQL Server サービスを右クリックし、 [プロパティ] を選択します。
[起動時のパラメーター] タブに移動します。[起動時のパラメーターの指定] に「
-T1800
」と入力し、[追加] を選択して起動時のパラメーターを追加します。 次に、「-T9567
」と入力して [追加] を選択し、他のトレース フラグを追加します。 [適用] を選択して変更を保存します。[OK] を選択して [プロパティ] ウィンドウを閉じます。
詳細については、「トレース フラグを有効にするための構文」を参照してください。
SQL Server を再起動して構成を検証する
SQL Server のサポートされるバージョンを使用していること、Always On 可用性グループ機能を有効にしたこと、起動時のトレース フラグを追加したことを確認したら、SQL Server インスタンスを再起動して、これらの変更をすべて適用します。
[SQL Server 構成マネージャー] を開きます。
左側のウィンドウから [SQL Server サービス] を選択します。
SQL Server サービスを右クリックし、[再起動] を選択します。
再起動後、次の T-SQL スクリプトを SQL Server で実行して、SQL Server インスタンスの構成を検証します。
-- Run on SQL Server
-- Shows the version and CU of SQL Server
USE master;
GO
SELECT @@VERSION as 'SQL Server version';
GO
-- Shows if the Always On availability groups feature is enabled
SELECT SERVERPROPERTY ('IsHadrEnabled') as 'Is Always On enabled? (1 true, 0 false)';
GO
-- Lists all trace flags enabled on SQL Server
DBCC TRACESTATUS;
SQL Server のバージョンは適切なサービス更新プログラムが適用された、サポートされているバージョンの 1 つである必要があり、Always On 可用性グループ機能が有効になっていて、さらにトレース フラグ -T1800
と -T9567
が有効になっている必要があります。 次のスクリーンショットは、適切に構成された SQL Server インスタンスについての、予期される結果の例です。
ネットワーク接続を構成する
リンクが機能するには、SQL Server と SQL Managed Instance の間にネットワーク接続が必要です。 選択するネットワーク オプションは、SQL Server インスタンスが Azure ネットワーク上にあるかどうかによって異なります。
Azure Virtual Machines 上の SQL Server
SQL Managed Instance をホストしているのと同じ Azure 仮想ネットワーク内の Azure Virtual Machines に SQL Server をデプロイするのが最もシンプルな方法です。これは、2 つのインスタンス間にネットワーク接続が自動的に存在することになるためです。 詳細については、「クイックスタート: Azure SQL Managed Instance に接続するように Azure VM を構成する」を参照ください。
Azure Virtual Machines インスタンス上の SQL Server がマネージド インスタンスとは異なる仮想ネットワークにある場合は、両方の仮想ネットワーク間で接続する必要があります。 このシナリオを機能させるために、各仮想ネットワークが同じサブスクリプションに属している必要はありません。
仮想ネットワークを接続するには、次の 2 つのオプションがあります。
- Azure 仮想ネットワーク ピアリング
- VNet 間 VPN ゲートウェイ (Azure Portal、PowerShell、Azure CLI)
ピアリングでは Microsoft バックボーン ネットワークが使用されるため、接続性の観点から言えば、ピアリングされた仮想ネットワーク内の仮想マシンであっても、同じ仮想ネットワーク内の仮想マシンであっても、待機時間に顕著な違いはありません。そのため、ピアリングが推奨されます。 仮想ネットワーク ピアリングは、同じリージョン内のネットワーク間でサポートされます。 グローバル仮想ネットワーク ピアリングは、2020 年 9 月 22 日より後に作成されたサブネットでホストされているインスタンスでサポートされています。 詳細については、「よく寄せられる質問 (FAQ)」をご覧ください。
Azure 外部の SQL Server
お使いの SQL Server インスタンスが Azure 外部でホスティングされている場合は、次のオプションのいずれかを使用して、SQL Server と SQL Managed Instance の間に VPN 接続を確立します。
ヒント
データをレプリケートするときの最適なネットワーク パフォーマンスを実現するために、ExpressRoute をお勧めします。 実際のユース ケースに十分な帯域幅を持つゲートウェイをプロビジョニングしてください。
環境間のネットワーク ポート
接続メカニズムに関係なく、ネットワーク トラフィックが環境間を流れるようにするために満たさなければならない要件があります。
マネージド インスタンスをホストするサブネットのネットワーク セキュリティ グループ (NSG) 規則では、次を許可する必要があります。
- 送信元 SQL Server IP からのトラフィックを受信するためのインバウンド ポート 5022 とポート範囲 11000-11999
- 送信先 SQL Server IP にトラフィックを送信するためのアウトバウンド ポート 5022
SQL Server をホストするネットワークとホスト OS 上のすべてのファイアウォールで、以下を許可する必要があります。
- MI サブネット /24 (10.0.0.0/24 など) の送信元 IP 範囲からのトラフィックを受信するために開かれたインバウンド ポート 5022
- MI サブネット (例: 10.0.0.0/24) の送信先 IP 範囲にトラフィックを送信するために開かれたアウトバウンド ポート 5022 とポート範囲 11000-11999
次の表で、各環境でのポートのアクションについて説明します。
環境 | 対処 |
---|---|
SQL Server (Azure 内) | ネットワーク ファイアウォールのポート 5022 で、SQL Managed Instance のサブネット IP 全体に対して受信と送信両方のトラフィックを開きます。 必要に応じて、SQL Server ホスト OS (Windows/Linux) のファイアウォールで同じようにします。 ポート 5022 での通信を許可するには、VM をホストする仮想ネットワークにネットワーク セキュリティ グループ (NSG) ルールを作成します。 |
SQL Server (Azure 外部) | ネットワーク ファイアウォールのポート 5022 で、SQL Managed Instance のサブネット IP 全体に対して受信と送信両方のトラフィックを開きます。 必要に応じて、SQL Server ホスト OS (Windows/Linux) のファイアウォールで同じようにします。 |
SQL Managed Instance | Azure portal で NSG 規則を作成して、ポート 5022 およびポート範囲 11000 - 11999 上で、SQL Server をホストする IP アドレスとネットワークからの送受信トラフィックを許可します。 |
SQL Server インスタンスの Windows ホスト OS で次の PowerShell スクリプトを使用して、Windows ファイアウォールでポートを開きます。
New-NetFirewallRule -DisplayName "Allow TCP port 5022 inbound" -Direction inbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP
New-NetFirewallRule -DisplayName "Allow TCP port 5022 outbound" -Direction outbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP
次に示す図はオンプレミスネットワーク環境の例であり、SQL Server をホストする OS ファイアウォールおよび企業のファイアウォールやゲートウェイなど、環境内のすべてのファイアウォールに開いているポートが必要であることを示しています。
重要
- ホスト サーバーおよびネットワーク上の企業のファイアウォールやゲートウェイも含め、ネットワーク環境内のすべてのファイアウォールでポートを開く必要があります。 企業環境では、企業ネットワーク レイヤーで追加のポートを開くため、このセクションの情報をネットワーク管理者に示すことが必要な場合があります。
- SQL Server 側でエンドポイントをカスタマイズすることもできますが、SQL Managed Instance のポート番号は変更したりカスタマイズしたりできません。
- マネージド インスタンスをホストするサブネットと SQL Server の IP アドレス範囲が、重複していてはなりません。
URL を許可リストに追加する
ネットワーク セキュリティ設定によっては、SQL Managed Instance FQDN の URL と、Azure で使用されるリソース管理エンドポイントの一部を許可リストに追加することが必要になる場合があります。
許可リストに追加する必要があるリソースの一覧を次に示します。
- SQL Managed Instance の完全修飾ドメイン名 (FQDN)。 例: managedinstance1.6d710bcf372b.database.windows.net。
- Microsoft Entra 機関
- Microsoft Entra エンドポイントのリソース ID
- Resource Manager エンドポイント
- サービス エンドポイント
SQL Server Management Studio (SSMS) のツール インターフェイスにアクセスし、許可リストに追加する必要があるクラウド内のリソースの特定の URL を特定するには、「政府向けクラウドの SSMS の構成」セクションの手順に従います。
ネットワーク接続をテストする
リンクが機能するためには、SQL Server と SQL Managed Instance との間に、双方向のネットワーク接続が必要です。 SQL Server 側でポートを開き、SQL Managed Instance 側で NSG ルールを構成したら、SQL Server Management Studio (SSMS) または Transact-SQL を使用して接続をテストします。
SQL Server と SQL Managed Instance の両方で一時的な SQL Agent ジョブを作成して、2 つのインスタンス間の接続を確認することで、ネットワークをテストします。 SSMS でネットワーク チェッカーを使用すると、ジョブが自動的に作成され、テストの完了後に削除されます。 T-SQL を使用してネットワークをテストする場合は、SQL Agent ジョブを手動で削除する必要があります。
Note
SQL Server on Linux の SQL Server エージェントによる PowerShell スクリプトの実行は現在サポートされていないため、現時点では SQL Server on Linux の SQL Server エージェント ジョブから Test-NetConnection
を実行できません。
SQL Agent を使用してネットワーク接続をテストするには、次の要件が必要です。
- テストを実行するユーザーは、SQL Server と SQL Managed Instance の両方でジョブを作成するためのアクセス許可 (sysadmin あるいは
msdb
の SQLAgentOperator ロールに属している) が必要です。 - SQL Server エージェント サービスが SQL Server で実行されている必要があります。 SQL Managed Instance では、既定でエージェントがオンになっているため、追加操作は必要ありません。
SSMS で SQL Server と SQL Managed Instance の間のネットワーク接続をテストするには、次の手順に従います。
SSMS でプライマリ レプリカとなるインスタンスに接続します。
オブジェクト エクスプローラーで、データベースを展開し、セカンダリにリンクするデータベースを右クリックします。 [タスク]>Azure SQL Managed Instance リンク>[テスト接続] を選択して、ネットワーク チェッカー ウィザードを開きます。
ネットワーク チェッカー ウィザードの [概要] ページで [次へ] を選択肢ます。
すべての要件が [前提条件] ページで満たされている場合は、[次へ] を選択します。 それ以外の場合は、満たされていない前提条件を解決し、[検証の再実行] を選択します。
[ログイン] ページで、[ログイン] を選択して、セカンダリ レプリカになるもう一方のインスタンスに接続します。 [次へ] を選択します。
[ネットワーク オプションの指定] ページで詳細を確認し、必要に応じて IP アドレスを指定します。 [次へ] を選択します。
[概要] ページで、ウィザードが実行する操作を確認し、[完了] を選択して 2 つのレプリカ間の接続をテストします。
[結果] ページを確認して、2 つのレプリカ間に接続が存在することを確認し、[閉じる] を選択して完了します。
注意事項
次の手順に進むのは、ソース環境とターゲット環境の間のネットワーク接続を検証済みの場合だけにしてください。 それ以外の場合は、進める前に、ネットワーク接続の問題のトラブルシューティングを行ってください。
TDE で保護されたデータベースの証明書を移行する (省略可能)
Transparent Data Encryption (TDE) によって保護された SQL Server をマネージド インスタンスにリンクする場合は、リンクを使用する前に、オンプレミスまたは Azure VM SQL Server インスタンスの対応する暗号化証明書をマネージド インスタンスに移行する必要があります。 詳細な手順については、「TDE で保護されたデータベースの証明書を Azure SQL Managed Instance に移行する」を参照してください。
サービスマネージド TDE キーで暗号化されたSQL Managed Instance は、SQL Server にリンクできません。 暗号化されたデータベースを SQL Server にリンクできるのは、カスタマー マネージド キーで暗号化されていて、宛先サーバーがデータベースの暗号化に使われたのと同じキーにアクセスできる場合のみです。 詳細については、Azure Key Vault を使った SQL Server TDE の設定に関する記事を参照してください。
Note
Azure Key Vault は、 SQL Server 2022 CU 14 以降の SQL Server on Linux でサポートされています。
SSMS のインストールする
SQL Server Management Studio (SSMS) は、Managed Instance のリンクを使用する最も簡単な方法です。 SSMS バージョン 19.0 以降をダウンロードして、クライアント コンピューターにインストールします。
インストールが終了したら、SSMS を開き、サポートされている SQL Server インスタンスに接続します。 ユーザー データベースを右クリックし、メニューに [Azure SQL Managed Instance リンク] オプションが表示されることを確認します。
政府機関向けクラウド用に SSMS を構成する
SQL Managed Instance を政府機関向けクラウド用にデプロイする場合は、正しいクラウドを使うように SQL Server Management Studio (SSMS) 設定を変更する必要があります。 SQL Managed Instance を政府機関向けクラウドにデプロイしない場合は、このステップをスキップしてください。
SSMS の設定を更新するには、次の手順のようにします。
- SSMS を開きます。
- メニューから [ツール] を選んだ後、[オプション] を選びます。
- [Azure サービス] を展開して、[Azure Cloud] を選びます。
- [Azure クラウドの選択] で、ドロップダウン リストを使って AzureUSGovernment または別の政府機関クラウド (AzureChinaCloud など) を選びます。
パブリック クラウドに戻る場合は、ドロップダウン リストから [AzureCloud] を選びます。