高可用性と災害復旧

ODBC ドライバーのダウンロード

Microsoft ODBCドライバー for SQL ServerはAlways Onの可用性グループをサポートしています。 Always On 可用性グループの詳細については、次を参照してください。

接続文字列内で、特定の可用性グループのリスナーを指定できます。 ODBCアプリケーションがフェイルオーバーした可用性グループのデータベースに接続すると、元の接続が切れます。 このアプリケーションでは、新しい接続を開いて、フェールオーバー後の作業を続行する必要があります。

MultiSubnetFailover=Yesがなければ、最初に解決されたIPアドレスにアクセスできないと、ドライバーのレガシーマルチIPフォールバックが遅くなることがあります。 Windowsのフォールバック動作の詳細については、「ODBCドライバーで透過的なネットワークIP解決を使う」をご覧ください。

MultiSubnetFailover=Yesを使って可用性グループのリスナーに接続すると、ドライバーは解決済みのすべてのIPアドレスへの接続を並行して試みます。 接続試行が成功すると、ドライバーは保留状態の接続試行をすべて破棄します。

Note

可用性グループのフェールオーバーにより接続が失敗する可能性があるため、接続再試行のロジックを実装する必要があります。 失敗した接続が再接続されるまで再試行します。 接続タイムアウトを長くして、接続再試行のロジックを実装すると、可用性グループに接続できる可能性が高くなります。

MultiSubnetFailover を使用して接続する

ターゲットがAzure SQL Database、Azure SQL Managed Instance、Microsoft FabricのSQLデータベース、可用性グループのリスナー、またはフェイルオーバークラスターインスタンスの場合にMultiSubnetFailover=Yes設定してください。 MultiSubnetFailover これにより、ドライバーが解決済みのすべてのIPアドレスに対してTCP接続を並行して試み、最初に成功した接続を使用することで、より高速なフェイルオーバー回復が可能になります。

また、この接続プロパティによって、単一およびマルチサブネットの AlwaysOn トポロジのフェールオーバー時間も大幅に短縮されます。 マルチサブネット フェールオーバーの場合、クライアントは複数の接続を並列で試行します。 サブネット フェールオーバーの場合、ドライバーは TCP 接続を積極的に再試行します。

MultiSubnetFailover接続プロパティは、アプリケーションがターゲットホスト名が複数のエンドポイントに解決される可能性のあるトポロジーに対して展開されていることを示しています。 ドライバーでは、すべての IP アドレスに対する接続を試行することで、プライマリ SQL Server インスタンス上のデータベースへの接続が試みられます。

MultiSubnetFailover=Yesで接続すると、クライアントはOSのデフォルトのTCP再送信間隔よりも速くTCP接続の再試行を行います。 MultiSubnetFailover=Yes を指定すると、Always On 可用性グループまたは Always On フェールオーバー クラスター インスタンスのフェールオーバー後に、短時間で再接続できます。 MultiSubnetFailover=Yes は、単一およびマルチサブネットの可用性グループとフェールオーバー クラスター インスタンスの両方に適用されます。

MultiSubnetFailover=Yes 単一IPターゲットには安全です。 DNSが1つのアドレスに解決しても、 MultiSubnetFailover=Yes 追加の並列接続試行は発生しません。

Recommendations

高可用性またはマルチエンドポイントのターゲット(Azure SQL Database、Azure SQL Managed Instance、Microsoft FabricのSQLデータベース、可用性グループリスナー、フェイルオーバークラスターインスタンス)に接続する場合:

  • MultiSubnetFailover=Yes を指定します。 これらのターゲットには推奨される設定で、ターゲットが単一のIPアドレスに解決されたら、ドライバーが一度だけ接続を試みるため、そのままにしても安全です。

  • 接続文字列では、サーバーとして可用性グループのリスナーを指定します。

  • TCP以外のプロトコル上で MultiSubnetFailover=Yes を使うことはできません。

  • IP アドレス数が 64 個を超える構成の SQL Server インスタンスには接続できません。

  • データベースミラーリングでは MultiSubnetFailover=Yes は使えません。 接続文字列がFailover_Partnerを指定する場合や、サーバーがデータベースがミラーリングされていると報告した場合、ドライバーはエラーを返します。 データベースミラーリングは、サポートされているすべてのSQL Serverバージョンで推奨されていません。 代わりに Always On 可用性グループ を使用してください

  • MultiSubnetFailover=YesSQL Server認証またはKerberos認証の両方を使い、アプリケーションの動作に影響を与えないようにしてください。

  • フェイルオーバー時間を考慮して loginTimeout を増やし、アプリケーションの接続再試行を減らしましょう。 Azure SQL Databaseのサーバーレスで自動一時停止を有効にする場合は、少なくとも60秒間使ってください。 自動一時停止されたデータベースは最初の接続試行で再開されますが、その試行はエラー40613で失敗する可能性があり、データベースが再開される間にアプリケーションは再試行しなければなりません。 詳細については、Azure SQL Databaseのサーバーレス計算層における自動一時停止および自動再開をご覧ください。

  • 分散トランザクションはサポートされていません。

読み取り専用のルーティングが無効である場合、次の状況では可用性グループのセカンダリ レプリカの場所には接続できません。

  • セカンダリ レプリカの場所が接続を受け付けるように構成されていない場合。

  • アプリケーションに ApplicationIntent=ReadWrite が使用されているが、セカンダリ レプリカの場所が読み取り専用アクセスとして構成されている。

プライマリ レプリカが読み取り専用ワークロードを拒否するように構成されているとき、接続文字列に ApplicationIntent=ReadOnly が含まれていると、接続は失敗します。

アプリケーションの意図を指定する

接続文字列内にキーワード ApplicationIntent を指定できます。 割り当て可能な値は ReadWrite (既定値) または ReadOnly です。

ApplicationIntent=ReadOnly を設定すると、接続時にクライアントによって読み取りワークロードが要求されます。 サーバーでは、接続時と USE データベース ステートメントの実行時にこの意図が適用されます。

ApplicationIntent キーワードは、従来型の読み取り専用データベースに対しては動作しません。

ReadOnly のターゲット

接続で ReadOnly が選択された場合、その接続は、データベースに存在する可能性のある次の特別な構成のいずれかに割り当てられます。

  • Always On。 データベースでは、対象の可用性グループ データベースのワークロードの読み取りを許可または禁止できます。 この選択は、ALLOW_CONNECTIONS および PRIMARY_ROLE Transact-SQL ステートメントの SECONDARY_ROLE 句を使用して制御できます。

  • Geo-replication

  • 読み取りスケールアウト

これらの特別なターゲットがいずれも使用できない場合は、通常のデータベースから読み取られます。

ApplicationIntent キーワードを使用すると、"読み取り専用ルーティング" が有効になります。

読み取り専用ルーティング

読み取り専用ルーティングは、データベースの読み取り専用レプリカの可用性を実現する機能です。 読み取り専用ルーティングを有効にするには、次のすべてを適用します。

  • Always On 可用性グループ リスナーに接続する必要があります。

  • ApplicationIntent 接続文字列キーワードを ReadOnly に設定する必要があります。

  • データベース管理者は、読み取り専用ルーティングを有効にするように可用性グループを構成する必要があります。

複数の接続でそれぞれに読み取り専用ルーティングが使用されている場合、すべてが同じ読み取り専用レプリカに接続されるとは限りません。 データベースの同期変更またはサーバーのルーティング構成の変更は、異なる読み取り専用のレプリカに対するクライアントの接続につながることがあります。

Server 接続文字列キーワードに可用性グループ リスナーを渡さないことで、すべての読み取り専用要求が同じ読み取り専用レプリカに接続されるようにできます。 代わりに、読み取り専用のインスタンスの名前を指定します。

読み取り専用ルーティングには、プライマリへの接続よりも時間がかかることがあります。 これは、読み取り専用ルーティングではまずプライマリに接続し、次に使用できる最善の読み取り可能なセカンダリを検索するためです。 このような複数のステップがあるため、login タイムアウトを少なくとも 30 秒に増やす必要があります。

ODBC 構文

次の 2 つの ODBC 接続文字列キーワードで Always On 可用性グループがサポートされています。

  • ApplicationIntent

  • MultiSubnetFailover

ODBC 接続文字列キーワードの詳細については、「Using Connection String Keywords with SQL Server Native Client」をご覧ください。

対応する接続属性は次のとおりです。

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

ODBC 接続プロパティの詳細については、「SQLSetConnectAttr」を参照してください。

Always On 可用性グループを使用する ODBC アプリケーションでは、次の 2 つの関数のいずれかを使用して接続できます。

Function Description
SQLConnect 関数 SQLConnect では、データ ソース名 (DSN) または接続属性を介して、ApplicationIntentMultiSubnetFailover の両方がサポートされます。
SQLDriverConnect 関数 SQLDriverConnect では、DSN、接続文字列キーワード、または接続属性を介して、ApplicationIntentMultiSubnetFailover がサポートされます。