データベース ミラーリング セッションへのクライアントの接続 (SQL Server)Connect Clients to a Database Mirroring Session (SQL Server)

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

データベース ミラーリング セッションに接続するには、クライアント側で SQL ServerSQL Server Native Client または .NET Framework Data Provider for SQL ServerSQL Serverを使用できます。To connect to a database mirroring session, a client can use either SQL ServerSQL Server Native Client or .NET Framework Data Provider for SQL ServerSQL Server. これらのデータ アクセス プロバイダーは、 SQL Server 2017SQL Server 2017 データベース用に構成されると、両方ともデータベース ミラーリングを完全にサポートします。When configured for a SQL Server 2017SQL Server 2017 database, these data access providers both fully support database mirroring. ミラー化されたデータベースの使用に関するプログラミングの注意点については、「 Using Database Mirroring」を参照してください。For information about programming considerations for using a mirrored database, see Using Database Mirroring. さらに、現在のプリンシパル サーバー インスタンスは使用可能であり、クライアントのログインがサーバー インスタンス上に作成されている必要があります。In addition, the current principal server instance must be available and the login of the client must have been created on the server instance. 詳細については、「 孤立ユーザーのトラブルシューティング (SQL Server)を実行します。For more information, see Troubleshoot Orphaned Users (SQL Server). データベース ミラーリング セッションへのクライアント接続では、ミラーリング監視サーバー インスタンスが存在していても使用されません。Client connections to a database mirroring session do not involve the witness server instance, if one exists.

データベース ミラーリング セッションへの最初の接続Making the Initial Connection to a Database Mirroring Session

クライアントはミラー化されたデータベースに初めて接続するときに、最低限サーバー インスタンスの名前を含む接続文字列を指定する必要があります。For the initial connection to a mirrored database, a client must supply a connection string that minimally supplies the name of a server instance. この必須のサーバー名は、現在のプリンシパル サーバー インスタンスを特定するもので、 イニシャル パートナー名と呼びます。This required server name should identify the current principal server instance and is known as the initial partner name.

接続文字列には、必要に応じて、別のサーバー インスタンスの名前を指定することもできます。この名前は、現在のミラー サーバー インスタンスを特定するもので、最初の接続試行でイニシャル パートナーを使用できない場合に使用されます。Optionally, the connection string can also supply the name of another server instance, which should identify the current mirror server instance, for use if the initial partner is unavailable during the first connection attempt. この 2 つ目の名前を フェールオーバー パートナー名と呼びます。The second name is known as the failover partner name.

また、接続文字列にはデータベース名も指定する必要があります。The connection string must also supply a database name. データベース名は、データ アクセス プロバイダーがフェールオーバーを試行できるようにするために必要です。This is necessary to enable failover attempts by the data access provider.

データ アクセス プロバイダーは接続文字列を受け取ると、イニシャル パートナー名とフェールオーバー パートナー名 (指定された場合) をクライアントの揮発性メモリのキャッシュに格納します (マネージド コードの場合、キャッシュはアプリケーション ドメインにスコープが設定されます)。On receiving a connection string, the data access provider stores the initial partner name and the failover partner name, if supplied, in a cache in the client's volatile memory (for managed code, the cache is scoped to the application domain). キャッシュに保存されたイニシャル パートナー名は、データ アクセス プロバイダーによって更新されません。Once cached, the initial partner name is never updated by the data access provider. クライアントがフェールオーバー パートナー名を指定した場合、データ アクセス プロバイダーでは、イニシャル パートナー名を使用して接続できなかった場合に備えて、このフェールオーバー パートナー名も一時的に保存します。When the client supplies the failover partner name, the data access provider also stores this failover partner name temporarily in case the provider cannot connect using the initial partner name.

データベース ミラーリング セッションによる保護は、クライアント コンピューターでネットワーク通信に関する問題が発生した場合など、サーバーへのアクセスに関するクライアント固有の問題には対処できません。A database mirroring session does not protect against server-access problems that are specific to clients, such as when a client computer is having a problems communicating with the network. ミラー化されたデータベースへの接続は、データ アクセス プロバイダーに関連しない原因で失敗することもあります。たとえば、データベースがフェールオーバー中である場合や、ネットワーク エラーが発生した場合に、プリンシパル サーバー インスタンスがアクティブでないことが原因で接続試行が失敗することがあります。A connection attempt to a mirrored database can also fail for a variety of reasons that are unrelated to the data-access provider; for example, a connection attempt can fail because the principal server instance is inactive, as occurs when the database is failing over, or because of a network error.

データ アクセス プロバイダーでは、まずイニシャル パートナー名を使用して接続を試行します。When attempting to connect, the data access provider begins by using the initial partner name. 通常、指定したサーバー インスタンスが使用可能で、それが現在のプリンシパル サーバー インスタンスであれば接続は成功します。If the specified server instance is available and is the current principal server instance, the connection attempt typically succeeds.

注意

ミラーリング セッションが一時停止した場合、通常、クライアントはプリンシパル サーバーに接続し、パートナー名をダウンロードします。If the mirroring session is paused, the client typically connects to the principal server and the downloads the partner name. ただし、ミラーリングが再開されるまで、クライアントはデータベースにアクセスできません。However, the database is unavailable to the client until mirroring resumes.

イニシャル パートナー名で接続できない場合、フェールオーバー パートナー名 (指定された場合) で接続を試行します。If that attempt does not work, the data access provider tries the failover partner name, if available. いずれかのパートナー名で現在のプリンシパル サーバーを正しく特定できると、正常に最初の接続を開くことができます。If either partner name correctly identifies the current principal server, the data access provider normally succeeds in opening the initial connection. この接続が完了すると、現在のミラー サーバーのサーバー インスタンス名をダウンロードします。On completing this connection, the data access provider downloads the server instance name of the current mirror server. この名前はフェールオーバー パートナー名としてキャッシュに保存され、クライアントが指定したフェールオーバー パートナー名 (存在する場合) が上書きされます。This name is stored in the cache as the failover partner name, overwriting the client-supplied failover partner name, if any. その後、.NET Framework Data Provider for SQL ServerSQL Server はこのフェールオーバー パートナー名を更新しません。Thereafter, the .NET Framework Data Provider for SQL ServerSQL Server does not update the failover partner name. それに対して、 SQL ServerSQL Server Native Client は、その後の接続や接続のリセットにより異なるパートナー名が返されたときはキャッシュを更新します。In contrast, SQL ServerSQL Server Native Client updates the cache whenever a subsequent connection or connection reset returns a different partner name.

次の図は、 Db_1という名前のミラー化されたデータベースのイニシャル パートナーである Partner_Aへのクライアント接続を示しています。The following figure illustrates a client connection to the initial partner, Partner_A, for a mirrored database named Db_1. この図では、クライアントが指定したイニシャル パートナー名が現在のプリンシパル サーバーである Partner_Aを正しく特定しています。This figure shows a case in which the initial partner name supplied by the client correctly identifies the current principal server, Partner_A. 最初の接続試行が成功し、データ アクセス プロバイダーのローカル キャッシュに、ミラー サーバーの名前 (現在は Partner_B) がフェールオーバー パートナー名として保存されます。The initial connection attempt succeeds, and the data access provider stores the name of the mirror server (currently Partner_B) as the failover partner name in the local cache. 最後に、クライアントが Db_1 データベースのプリンシパル コピーに接続されます。Finally, the client connects to the principal copy of the Db_1 database.

イニシャル パートナーがプリンシパルの場合のクライアント接続Client connection if initial partner is principal

最初の接続試行は、ネットワーク エラーやアクティブでないサーバー インスタンスが原因で失敗する場合があります。The initial connection attempt may fail, for example, because of a network error or an inactive server instance. 最初のパートナーが使用できないときに、データ アクセス プロバイダーがフェールオーバー パートナーへの接続を試行するには、クライアントが接続文字列にフェールオーバー パートナー名を指定している必要があります。Because the initial partner is unavailable, for the data access provider to attempt to connect to the failover partner, the client must have supplied the failover partner name in the connection string.

フェールオーバー パートナー名が指定されていなければ、ネットワーク接続がタイムアウトになるかエラーが返されるまで、元の接続試行が続行されます (データベースがミラー化されていない場合と同じ動作です)。In that case, if the failover partner name is unavailable, the original connection attempt continues until the network connection timeout or an error is returned (just as for a non-mirrored database).

接続文字列にフェールオーバー パートナー名を指定した場合、データ アクセス プロバイダーの動作は、クライアントのネットワーク プロトコルとオペレーティング システムによって次のように異なります。When the failover partner name is supplied in the connection string, the behavior of the data access provider depends on the network protocol and operating system of the client, as follows:

  • TCP/IP では、データベース ミラーリング固有の接続再試行アルゴリズムによって接続試行が規制されます。For TCP/IP, the connection attempts are regulated by a connection retry algorithm that is specific to database mirroring. 接続再試行アルゴリズム は、1 回の接続試行で接続を開くのに割り当てる最大時間 ( 再試行時間) を決定します。The connection retry algorithm determines the maximum time (the retry time) allotted for opening a connection in a given connection attempt.

  • その他のネットワーク プロトコルFor other network protocols

    エラーが発生するか、イニシャル パートナーを使用できない場合、最初の接続試行は、ネットワーク接続がタイムアウトになるか、データ アクセス プロバイダーのログインがタイムアウトになるまで待機します。If an error occurs or if the initial partner is unavailable, the initial connection attempt waits until the network connection timeout period expires or the login timeout period expires on the data access provider. 通常、この待機時間は 20 ~ 30 秒です。Typically, this wait is on the order of 20 to 30 seconds. データ アクセス プロバイダーがタイムアウトしなければ、フェールオーバー パートナーへの接続が試行されます。Thereafter, if the data access provider has not timed out, it attempts to connect to the failover partner. 接続が成功する前に接続がタイムアウトになるか、フェールオーバー パートナーを使用できない場合、接続試行は失敗します。If the connection timeout period expires before the connection succeeds or the failover partner is unavailable, the connection attempt fails. ログインがタイムアウトになる前に、フェールオーバー パートナーが使用でき、そのパートナーがその時点のプリンシパル サーバーの場合、接続試行は成功します。If failover partner is available within the login timeout period and is now the principal server, the connection attempt normally succeeds.

ミラー化されたデータベースの接続文字列Connection Strings for a Mirrored Database

クライアントが指定する接続文字列には、データ アクセス プロバイダーがデータベースへの接続に使用する情報が含まれています。The connection string supplied by the client contains information that the data access provider uses to connect to the database. ここでは特に、ミラー化されたデータベースに SQL ServerSQL Server Native Client の ODBC ドライバー接続を使用して接続する場合のキーワードについて説明します。This section discusses the keywords that are specifically relevant for connecting to a mirrored database using a SQL ServerSQL Server Native Client ODBC Driver Connection.

Network 属性Network Attribute

接続文字列には、ネットワーク プロトコルを指定するための Network 属性を含めます。The connection string should contain the Network attribute to specify the network protocol. この属性を含めると、異なるパートナーに接続を切り替えても、指定したネットワーク プロトコルが保持されます。This ensures that the specified network protocol persists between connections to different partners. ミラー化されたデータベースへの接続に最も適したプロトコルは TCP/IP です。The best protocol for connecting to a mirrored database is TCP/IP. クライアントがパートナーへのすべての接続に TCP/IP を要求するには、接続文字列に次の属性を指定します。To ensure that the client requests TCP/IP for every connection to the partners, a connection string supplies the following attribute:

Network=dbmssocn;   

重要

TCP/IP はクライアントのプロトコル一覧の先頭に指定することをお勧めします。We recommend keeping TCP/IP at the top of a client's protocol list. ただし、接続文字列に Network 属性を指定した場合は、そのプロトコルが一覧の順序をオーバーライドします。However, if the connection string specifies the Network attribute, this overrides the list order.

また、クライアントがパートナーへのすべての接続に名前付きパイプを要求するには、接続文字列に次の属性を指定します。Alternatively, to ensure that the client requests named pipes for every connection to the partners, a connection string supplies the following attribute:

Network=dbnmpntw;   

重要

名前付きパイプでは TCP/IP の再試行アルゴリズムを使用しないので、多くの場合、名前付きパイプによる接続試行はミラー化されたデータベースに接続される前にタイムアウトします。Because named pipes does not use the TCP/IP retry algorithm, in many cases, a named pipes connection attempt may time out before connecting to a mirrored database.

Server 属性Server Attribute

接続文字列には、イニシャル パートナー名を指定する Server 属性を含める必要があります。この名前で現在のプリンシパル サーバー インスタンスを特定します。The connection string must contain a Server attribute that supplies the initial partner name, which should identify the current principal server instance.

サーバー インスタンスを特定する最も簡単な方法は、 <server_name> [ \ <SQL_Server_instance_name> ] の形式でインスタンス名を指定することです。The simplest way to identify the server instance is by specifying its name , <server_name>[\<SQL_Server_instance_name>]. 例:For example:

Server=Partner_A;

内の複数のor

Server=Partner_A\Instance_2;

ただし、システム名を使用するときは、クライアントは DNS 参照を実行してサーバーの IP アドレスを取得し、SQL Server Browser クエリを実行してパートナーが存在するサーバーのポート番号を取得する必要があります。However, when the system name is used, the client must perform a DNS lookup to obtain the IP address of the server and a SQL Server Browser query to obtain the port number of the server on which the partner resides. Server 属性にパートナーのサーバー名ではなく IP アドレスとポート番号を指定すると、こうした参照やクエリを回避できます。Those lookups and queries can be bypassed by specifying the IP address and port number of the partner in the Server attribute, rather than specifying the server name. パートナーへの接続中に外部遅延が発生する可能性を最小限に抑えるために、この指定を行うことをお勧めします。This is recommended to minimize the possibility of external delays while connecting to that partner.

注意

接続文字列に名前付きインスタンス名を指定し、ポート名を指定しない場合は、SQL Server Browser クエリの実行が必要です。A SQL Server Browser query is necessary if the connection string specifies the named instance name and not the port.

Server 属性では、Server= <ip_address> ,<port> という形式で IP アドレスとポートを指定します。次に例を示します。To specify the IP address and port, the Server attribute takes the following form, Server=<ip_address>,<port>, for example:

Server=123.34.45.56,4724;   

注意

IP アドレスには、IP Version 4 (IPv4) または IP Version 6 (IPv6) を使用できます。The IP address can be IP Version 4 (IPv4) or IP Version 6 (IPv6).

Database 属性Database Attribute

接続文字列には、ミラー化されたデータベースの名前を指定する Database 属性も指定する必要があります。In addition, the connection string must specify the Database attribute to supply the name of the mirrored database. クライアントが接続を試行したときにデータベースを使用できない場合は、例外が発生します。If the database is unavailable when the client attempts to connect, an exception is raised.

たとえば、プリンシパル サーバー Partner_A の AdventureWorks データベースに明示的に接続するには、クライアントで次の接続文字列を使用します。For example, to expressly connect to the AdventureWorks database on the principal server Partner_A, a client uses the following connection string:

" Server=Partner_A; Database=AdventureWorks "

注意

この文字列では、認証情報が省略されています。This string omits authentication information.

重要

Server 属性にプロトコル プレフィックスを指定すると (Server=tcp:<servername> )、Network 属性と互換性がなくなります。また、両方の属性にプロトコルを指定すると、エラーが発生する可能性が高くなります。Bundling the protocol prefix with the Server attribute (Server=tcp:<servername>) is incompatible with the Network attribute, and specifying the protocol in both places will likely result in an error. このため、接続文字列でプロトコルを指定するときには Network 属性を使用し、Server 属性にはサーバー名だけを指定することをお勧めします。つまり、"Network=dbmssocn; Server=<servername> " という形式を使用します。Therefore, we recommend that a connection string specify the protocol using the Network attribute and specify only the server name in the Server attribute ("Network=dbmssocn; Server=<servername>").

Failover Partner 属性Failover Partner Attribute

クライアントは、イニシャル パートナー名以外に、現在のミラー サーバー インスタンスを特定するフェールオーバー パートナー名も指定できます。In addition to the initial partner name, the client can also specify failover partner name, which should identify the current mirror server instance. フェールオーバー パートナーは、Failover Partner 属性を表すいずれかのキーワードで指定します。The failover partner is specified by one of the keywords for the failover partner attribute. この属性を表すキーワードは、使用する API によって異なります。The keyword for this attribute depends on the API that you are using. 次の表は、これらのキーワードを示しています。The following table lists these keywords:

API (API)API Failover Partner 属性を表すキーワードKeyword for failover partner attribute
OLE DB プロバイダーOLE DB Provider FailoverPartnerFailoverPartner
ODBC ドライバーODBC Driver Failover_PartnerFailover_Partner
ActiveX Data Objects (ADO)ActiveX Data Objects (ADO) Failover PartnerFailover Partner

サーバー インスタンスを特定する最も簡単な方法は、そのインスタンスのシステム名を <server_name> [ \ <SQL_Server_instance_name> ] という形式で指定することです。The simplest way to identify the server instance is by its system name, <server_name>[\<SQL_Server_instance_name>].

また、 Failover Partner 属性に IP アドレスとポート番号を指定することもできます。Alternatively, the IP address and port number can be supplied in the Failover Partner attribute. これにより、最初の接続試行がデータベースへの最初の接続に失敗した場合、DNS と SQL Server Browser に依存しないでフェールオーバー パートナーへの接続を試行できます。If the initial connection attempt fails during the first connection to the database, the attempt to connect to the failover partner will be freed from relying on DNS and SQL Server Browser. 接続が確立されると、指定したフェールオーバー パートナー名が接続時のフェールオーバー パートナー名に上書きされるので、次にフェールオーバーが発生した場合、リダイレクトされた接続では DNS と SQL Server Browser が必要になります。Once a connection is established, the failover partner name will be overwritten with the failover partner name, so if a failover occurs, the redirected connections will require DNS and SQL Server Browser.

注意

イニシャル パートナー名のみを指定すると、アプリケーション開発者が操作を実行したり、再接続方法以外のコードを記述したりする必要はありません。When only the initial partner name is provided, application developers do not need to take any action or write any code except about how to reconnect.

注意

マネージド コード アプリケーションの開発者は ConnectionString オブジェクトの SqlConnection でフェールオーバー パートナー名を指定します。Managed code application developers supply the failover partner name in the ConnectionString of the SqlConnection object. この接続文字列の使用方法については、 MicrosoftMicrosoft .NET Framework SDK に含まれている ADO.NET マニュアルの「Database Mirroring Support in the .NET Framework Data Provider for SQL Server」を参照してください。For information on using this connection string, see "Database Mirroring Support in the .NET Framework Data Provider for SQL Server" in the ADO.NET documentation, which is part of the MicrosoftMicrosoft .NET Framework SDK.

接続文字列の例Example Connection String

たとえば、TCP/IP を使用して Partner_A または Partner_B の AdventureWorks データベースに明示的に接続するには、ODBC ドライバーを使用するクライアント アプリケーションで次の接続文字列を指定します。For example, to explicitly connect using TCP/IP to the AdventureWorks database on either Partner_A or Partner_B, a client application that uses the ODBC Driver could supply the following connection string:

"Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"  

また、クライアントはイニシャル パートナーの Partner_A を特定するために、IP アドレスとポート番号を指定できます。たとえば、IP アドレスが 250.65.43.21 でポート番号が 4734 の場合、接続文字列は次のようになります。Alternatively, the client could use the IP address and port number to identify the initial partner, Partner_A; for example, if the IP address is 250.65.43.21 and the port number is 4734, the connection string would be:

"Server=250.65.43.21,4734; Failover_Partner=Partner_B; Database=AdventureWorks; Network=dbmssocn"  

接続再試行アルゴリズム (TCP/IP 接続用)Connection Retry Algorithm (for TCP/IP Connections)

TCP/IP 接続では、両方のパートナー名がキャッシュ内に存在すると、データ アクセス プロバイダーは接続再試行アルゴリズムに従います。For a TCP/IP connection, when both partner names are in the cache, the data access provider adheres to a connection retry algorithm. これは、セッションに初めて接続する場合にも、確立した接続が切断された後に再接続する場合にも当てはまります。This is true both for making the initial connection to the session and for reconnecting after losing an established connection. 接続を開いた後の場合、ログイン前およびログイン時の手順を完了するのにさらに時間がかかります。Once a connection has been opened, completing the pre-login and login steps takes additional time.

注意

接続を開くときにかかる時間は、外部要因が原因で再試行時間を超える場合があります。外部要因には、速度の遅い DNS 参照、処理速度の遅いドメイン コントローラーや Kerberos キー配布センター (KDC)、SQL Server Browser への接続にかかる時間、ネットワークの混雑などがあります。The time spent in opening a connection can exceed the retry time because of external factors, such as slow DNS lookups, slow domain controller/Kerberos Key Distribution Center (KDC), time spent contacting SQL Server Browser, network congestion, and so forth. このような外部要因により、クライアントはミラー化されたデータベースに接続できなくなる場合があります。Such external factors can prevent a client from connecting to a mirrored database. また、接続を開くとき、割り当てられた再試行時間より長い時間がかかる場合もあります。Also, external factors can cause a connection to take longer to open than the allotted retry time. イニシャル パートナーへの接続試行時の DNS および SQL Server Browser のバイパスについては、このトピックの「 データベース ミラーリング セッションへの最初の接続」を参照してください。For information on bypassing DNS and SQL Server Browser for connection attempt to the initial partner, see Making the Initial Connection to a Database Mirroring Session, earlier in this topic.

接続試行が失敗したり、接続試行が成功する前に再試行時間がタイムアウトした場合、データ アクセス プロバイダーは他のパートナーを使用します。If a connection attempt fails or the retry time expires before it succeeds, the data access provider tries the other partner. この時点までに接続が開かれていない場合は、接続が開かれるかログイン期間がタイムアウトするまで、プロバイダーはイニシャル パートナー名とフェールオーバー パートナー名を交互に使用します。既定のログイン タイムアウト期間は 15 秒です。If a connection is not opened by this point, the provider alternately tries the initial and failover partner names, until a connection is opened or the login period times out. The default login time-out period is 15 seconds. ログイン タイムアウト期間は 5 秒以上にすることをお勧めします。We recommend that the login time-out period be at least 5 seconds. タイムアウト期間を 5 秒未満にすると、接続試行が成功しない場合があります。Specifying a smaller time-out period might prevent any of the connection attempts from succeeding.

再試行時間は、ログイン タイムアウト期間の比率で決まります。The retry time is a percentage of the login period. 接続試行の再試行時間は、連続する各ラウンドでラウンドごとに長くなります。The retry time for a connection attempt is larger in each successive round. 最初のラウンドでは、2 回の接続試行それぞれの再試行時間は、合計ログイン タイムアウト期間の 8% です。In the first round, the retry time for each of the two attempts is 8 percent of the total login period. その後に続く各ラウンドでは、再試行アルゴリズムによって、最大再試行時間が一定の比率で増加します。In each successive round, the retry algorithm increases the maximum retry time by the same amount. したがって、最初の 8 回の接続試行の再試行時間は次のようになります。Thus, the retry times for the first eight connection attempts is as follows:

8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%

再試行時間は、次の式を使用して計算されます。The retry time is calculated using the following formula:

RetryTime = PreviousRetryTime +( 0.08 * LoginTimeout )RetryTime = PreviousRetryTime +( 0.08 *LoginTimeout)

ここでは、 PreviousRetryTime の初期値は 0 です。Where PreviousRetryTime is initially 0.

たとえば、15 秒という既定のログイン タイムアウト期間を使用すると、 LoginTimeout = 15となります。For example, if using the default login time-out period of 15 seconds, LoginTimeout = 15. この場合、最初の 3 ラウンドに割り当てられる再試行時間は次のようになります。In this case, the retry times allotted in the first three rounds are as follows:

四捨五入Round RetryTime の計算RetryTime calculation 接続試行ごとの再試行時間Retry time per attempt
11 0 +( 0.08 * 15 )0 +( 0.08 * 15 ) 1.2 秒1.2 seconds
22 1.2 +( 0.08 * 15 )1.2 +( 0.08 * 15 ) 2.4 秒2.4 seconds
33 2.4 +( 0.08 * 15 )2.4 +( 0.08 * 15 ) 3.6 秒3.6 seconds
44 3.6 +( 0.08 * 15 )3.6 +( 0.08 * 15 ) 4.8 秒4.8 seconds

次の図では、連続する接続試行のそれぞれがタイムアウトする再試行時間を示しています。The following figure illustrates these retry times for successive connection attempts, each of which times out.

15 秒ログイン タイムアウトの最大再試行間隔Maximum retry delays for 15 second login timeout

既定のログイン タイムアウト期間に対して、接続試行の最初の 3 ラウンドに割り当てられた最大時間は 14.4 秒です。For the default login time-out period, the maximum time allotted to the first three rounds of connection attempts is 14.4 seconds. 各接続試行で割り当てられた時間をすべて使用してしまった場合、ログイン期間がタイムアウトするまでに 0.6 秒しか残っていません。その場合、4 ラウンド目は短縮されるので、最後は、イニシャル パートナー名を使用した簡単な接続試行しか行うことができません。If every attempt were to use all of its allotted time, only 0.6 seconds of time would remain before the login period times out. In that case, the fourth round would be curtailed, allowing only a final quick attempt to connect using the initial partner name. ただし、特に後半のラウンドでは、割り当てられた再試行時間が経過しないうちに接続試行が失敗する場合があります。However, a connection attempt may fail in less than its allotted retry time, particularly in later rounds. たとえば、ネットワーク エラーが発生すると、再試行時間がタイムアウトする前に、試行が終了する場合があります。For example, receiving a network error can cause an attempt to end before the retry time expires. 初期の接続試行がネットワーク エラーによって失敗すると、4 ラウンド目とおそらくは追加のラウンドで、使用できる時間が追加されることがあります。If earlier attempts fail due to a network error, additional time would be available for the fourth round and, perhaps, additional rounds.

接続試行に失敗するもう 1 つの原因として、サーバー インスタンスがそのデータベースをフェールオーバーしている場合に発生するような、非アクティブなサーバー インスタンスがあります。Another cause of a failed attempt is an inactive server instance, as occurs when a server instance is engaged in failing over its database. この場合、クライアントが短時間の連続的な接続試行によってパートナーに負荷をかけ過ぎないように、再試行間隔が指定されます。In this case, a retry delay is imposed to prevent clients from overloading the partners with a rapid succession of connection attempts.

注意

両方のパートナー名が使用できる場合、ログイン タイムアウト期間に制限がないと、クライアントは、イニシャル パートナー名とフェールオーバー パートナー名を交互に使いながら、無制限にサーバーへの再接続を試みます。When both partner names are available, if the login time-out period is infinite, the client attempts to reconnect to the servers indefinitely, alternating between the initial partner name and the failover partner name.

フェールオーバー中の再試行間隔Retry Delays During Failover

フェールオーバーしているパートナーにクライアントが接続を試みると、パートナーはすぐに非アクティブであることを応答します。If a client attempts to connect to a partner that is failing over, the partner immediately responds that it is inactive. この場合、接続試行の各ラウンドは、割り当てられた再試行時間よりかなり短くなります。In this case, each round of connection attempts are much briefer than the allotted retry time. つまり、接続試行の多くのラウンドは、ログイン期間がタイムアウトする前に発生する場合があります。フェールオーバー中に短時間で連続した接続試行を行ってパートナーに負荷がかかり過ぎるのを回避するために、データ アクセス プロバイダーは、各再試行サイクルの後に短い再試行間隔を追加します。This means that many rounds of connection attempts could happen before the login period times out. To avoid overloading the partners with a rapid series of connection attempts during a failover, the data access provider adds a brief retry delay after each retry cycle. 指定された再試行間隔の長さは、再試行間隔アルゴリズムによって決まります。The length of a given retry delay is determined by the retry-delay algorithm. 最初のラウンドの後の間隔は 100 ミリ秒です。After the first round, the delay is 100 milliseconds. それ以降の再試行間隔は 3 ラウンドごとに、200、400、800 と倍になっていきます。After each of the next three rounds, the retry delay doubles-to 200, 400, and 800. その後のすべてのラウンドでは、接続試行が成功するかタイムアウトするまで再試行間隔は 1 秒になります。For all later rounds, the retry delay is 1 second until the connection attempt succeeds or times out.

注意

サーバー インスタンスが停止すると、接続要求はすぐに失敗します。If the server instance is stopped, then the connection request fails immediately.

次の図では、手動フェールオーバー中の再試行間隔による接続試行への影響を示しています。ここでは、パートナーは役割を交換しています。The following figure illustrates how the retry delay affects connection attempts during a manual failover, in which the partners switch their roles. ログイン タイムアウト期間は 15 秒です。The login time-out period is 15 seconds.

再試行間隔アルゴリズムRetry-delay algorithm

データベース ミラーリング セッションへの再接続Reconnecting to a Database Mirroring Session

データベース ミラーリングのフェールオーバーなどの理由でデータベース ミラーリング セッションに対して確立された接続が失敗し、アプリケーションが最初のサーバーに再接続を試みると、データ アクセス プロバイダーは、クライアントのキャッシュに保存されたフェールオーバー パートナー名を使用して再接続を試みる場合があります。If an established connection to a database mirroring session fails for any reason, for example, due to a database mirroring failover, and the application attempts to reconnect to the initial server, the data access provider can attempt to reconnect using the failover partner name stored in the client's cache. ただし、再接続は自動的には行われず、Reconnecting is not automatic, however. アプリケーションではエラーを検出することになります。The application must become aware of the error. その後、アプリケーションは失敗した接続を閉じて、同じ接続文字列属性を使用して新しい接続を開く必要があります。Then, the application needs to close the failed connection and open a new connection using the same connection string attributes. この時点で、データ アクセス プロバイダーがフェールオーバー パートナーに接続をリダイレクトします。At this point, the data access provider redirects the connection to the failover partner. この名前で識別されるサーバー インスタンスが現在のプリンシパル サーバーの場合は、通常、接続試行は成功します。If the server instance identified by this name is currently the principal server, the connection attempt usually succeeds. トランザクションがコミットされたかロールバックされたかはっきりしない場合、アプリケーションでは、スタンドアロンのサーバー インスタンスに再接続するときと同じように、トランザクションの状態を確認する必要があります。If it is unclear whether a transaction was committed or rolled back, the application must check on the state of the transaction, in the same way as when reconnecting to a stand-alone server instance.

再接続は、接続文字列でフェールオーバー パートナー名を指定した最初の接続と同様に行われます。Reconnecting resembles an initial connection for which the connection string supplied a failover partner name. 最初の接続試行が失敗すると、クライアントがプリンシパル サーバーに接続するか、データ アクセス プロバイダーがタイムアウトするまで、イニシャル パートナー名とフェールオーバー パートナー名を交互に使用して接続が試行されます。If the first connection attempt fails, connection attempts alternate back and forth between the initial partner name and failover partner name until either the client connects to the principal server or the data access provider times out.

注意

SQL ServerSQL Server Native Client では、クライアントからプリンシパル サーバー インスタンスへの接続は確認しますが、接続したインスタンスが接続文字列のイニシャル パートナー名に指定されたサーバー インスタンスのパートナーかどうかは確認しません。Native Client verifies that it connects to a principal server instance but not whether this instance is the partner of server instance specified in the initial partner name of the connection string.

接続に TCP/IP を使用している場合は、接続再試行アルゴリズムによって、接続試行の各ラウンドに割り当てられる時間が決まります。If the connections use TCP/IP, the connection retry algorithm determines the amount of time allotted to the connection attempts in each round.

重要

クライアントとデータベース間の接続が切断された場合、データ アクセス プロバイダーでは再接続が試行されません。If the client gets disconnected from the database, the data access provider does not attempt to reconnect. クライアントから新規接続要求を実行する必要があります。The client must issue a new connection request. また、接続が切断されたためにアプリケーションがシャットダウンされると、キャッシュに保存されているパートナー名は失われます。Also, if an application shuts down on losing the connection, it will lose the cached partner names. プリンシパル サーバーが使用できなくなったために接続が切断されると、接続文字列でフェールオーバー パートナー名を指定する以外に、アプリケーションがミラー サーバーに再接続できる方法はありません。If the connection was lost because the principal server became unavailable, the only way that the application can reconnect to the mirror server is by supplying the failover partner name in its connection string.

クライアント アプリケーションでのリダイレクトの影響Impact of Redirection on a Client Application

フェールオーバー後、データ アクセス プロバイダーは、現在のプリンシパル サーバー インスタンスに接続をリダイレクトします。After a failover, the data access provider redirects the connection to the current principal server instance. ただし、リダイレクトはクライアント側では認識されません。However, the redirection is transparent to clients. リダイレクトされた接続は、クライアントにはイニシャル パートナー名で特定されたサーバー インスタンスへの接続のように見えます。To a client, a redirected connection appears to be a connection to the server instance identified by the initial partner name. イニシャル パートナーが現在ミラー サーバーの場合、クライアントはミラー サーバーに接続され、ミラー データベースを更新しているように見えます。When the initial partner is currently the mirror server, the client can appear to be connected to the mirror server and updating the mirror database. ただし、実際には、クライアントは現在のプリンシパル データベースであるフェールオーバー パートナーにリダイレクトされています。また、クライアントは、新しいプリンシパル データベースを更新しています。Actually, however, the client has been redirected to the failover partner, which is the current principal database, and the client is updating the new principal database.

クライアントがフェールオーバー パートナーにリダイレクトされた後、 Transact-SQLTransact-SQL USE ステートメントを使用して別のデータベースを使用すると、予期しない結果が発生する場合があります。After being redirected to the failover partner, a client can experience unexpected results when using a Transact-SQLTransact-SQL USE statement to use a different database. これは、現在のプリンシパル サーバー インスタンス (フェールオーバー パートナー) で元のプリンシパル サーバー (イニシャル パートナー) とは異なるデータベースを使用している場合に発生することがあります。This can happen if the current principal server instance (the failover partner) has a different set of databases than the original principal server (the initial partner).

古いフェールオーバー パートナー名の影響The Impact of a Stale Failover Partner Name

データベース管理者はフェールオーバー パートナーをいつでも変更できます。The database administrator can change the failover partner at any time. このため、クライアントが指定したフェールオーバー パートナー名が 古い場合があります。Therefore, a client-supplied failover partner name might be out of date, or stale. たとえば、別のサーバー インスタンス Partner_C で置き換えられる Partner_B というフェールオーバー パートナーを考えてみます。For example, consider a failover partner named Partner_B that is replaced by another server instance, Partner_C. クライアントがフェールオーバー パートナー名として Partner_B を指定した場合、それは古い名前です。Now, if a client supplies Partner_B as the failover partner name, that name is stale. クライアント指定のフェールオーバー パートナー名が古い場合、データ アクセス プロバイダーは、クライアントでフェールオーバー パートナー名が指定されていない場合と同じように動作します。When the client-supplied failover partner name is stale, the behavior of the data access provider equates to the case in which a failover partner name is not supplied by the client.

たとえば、クライアントによって 1 つの接続文字列が 4 回の接続試行に使用される場合を検討します。For example, consider situation in which a client uses one connection string for a series of four connection attempts. この接続文字列では、次のようにイニシャル パートナー名が Partner_A で、フェールオーバー パートナー名が Partner_B です。In the connection string, the initial partner name is Partner_A, and the failover partner name is Partner_B:

"Server=Partner_A; Failover Partner=Partner_B; Database=AdventureWorks"  

次の表は、4 つのパートナー構成と、それぞれの構成でこの接続文字列がクライアントの初回接続時に機能するかどうかを示しています。The following table shows four partner configurations and indicates for each whether this connection string works for connecting the client for the first time.

注意

アプリケーションでは、構成の変更を追跡し、その変更に応じて接続文字列を変更することができます。An application can track configuration changes and change its connection string accordingly. これには追加のコードが必要ですが、管理上の負担は軽減されます。This requires extra code but reduces the administrative burden.

構成Configuration プリンシパル サーバーPrincipal server ミラー サーバーMirror server Partner_A と Partner_B を指定して接続を試行するときの動作Behavior when attempting to connect specifying Partner_A and Partner_B
元のミラー化構成Original mirroring configuration. Db_1Partner_A Partner_BPartner_B Partner_A はイニシャル パートナー名としてキャッシュに保存されます。Partner_A is cached as the initial partner name. クライアントは、Partner_A への接続に成功します。The client succeeds in connecting to Partner_A. クライアントは、Partner_B というミラー サーバーの名前をダウンロードしてキャッシュに保存し、クライアント指定のフェールオーバー パートナー名を無視します。The client downloads the name of mirror server, Partner_B, and caches it, ignoring the client-supplied failover partner name.
Partner_A でハードウェア障害が発生し、フェールオーバーを実行 (クライアントの接続を切断)Partner_A experiences a hardware failure, and failover occurs (disconnecting clients). Partner_BPartner_B なしnone Partner_A はイニシャル パートナー名としてキャッシュに保存されていますが、クライアント指定のフェールオーバー パートナー名 Partner_B を使用して、クライアントは現在のプリンシパル サーバーに接続できます。The Partner_A is still cached as the initial partner name, but the client-supplied failover partner name, Partner_B, permits the client to connect to the current principal server.
データベース管理者がミラー化を停止し (クライアントの接続を切断)、Partner_A を Partner_C に置き換えて、ミラー化を再開The database administrator stops mirroring (disconnecting clients), replaces Partner_A with Partner_C, and restarts mirroring. Partner_BPartner_B Partner_CPartner_C クライアントは Partner_A への接続を試行して失敗します。その後、Partner_B (現在のプリンシパル サーバー) への接続を試行して成功します。The client attempts to connect to Partner_A and fails; then the client tries Partner_B (the current principal server) and succeeds. データ アクセス プロバイダーは現在のミラー サーバー名である Partner_C をダウンロードし、現在のフェールオーバー パートナー名としてキャッシュに保存します。The data access provider downloads the name of the current mirror server, Partner_C, and caches it as the current failover partner name.
サービスを手動で Partner_C にフェールオーバー (クライアントの接続を切断)Service is manually failed over to Partner_C (disconnecting clients). Partner_CPartner_C Partner_BPartner_B クライアントはまず Partner_A に接続してから Partner_B に接続しようとします。Client attempts to connect to Partner_A initially, and then to Partner_B. どちらの名前でも接続に失敗し、最終的には接続要求がタイムアウトになって失敗します。Both names fail, and eventually the connection request times out and fails.

参照See Also

データベース ミラーリング (SQL Server) Database Mirroring (SQL Server)
データベース ミラーリング中に発生する可能性のあるエラーPossible Failures During Database Mirroring