[SSIS] SSIS パッケージの Connect Timeout の既定値 0 は、無制限ではない。

佐藤 靖典
SQL Developer Support Engineer

こんにちは。

今回の記事では、SSIS パッケージの接続マネージャーの Connect Timeout プロパティ (接続タイムアウト) の動作について紹介します。この動作は、製品の仕様上の動作ですが、混乱しやすい部分で質問をいただくことも多いため、詳しく説明します。

 

1. 概要

ほとんどの開発者は、.NET Framewrok データ プロバイダ、OLE DB プロバイダ、ODBC ドライバで設定できる接続タイムアウトを 0 に設定した場合、無制限を意味することをご存知だと思います。
しかしながら、SQL Server Integration Services (SSIS) パッケージの接続マネージャーの Connect Timeout の既定の表示 0 は、無制限を示しているものではなく、未設定を示しています。未設定の場合は、使用する OLE DB プロバイダや ODBC ドライバの接続タイムアウトの既定値が使用されます。
SQL Server ODBC Driver や OLE DB Provider for SQL Server、SQL Server Native Client の接続タイムアウトの既定値は 15 秒です。

 

2. 詳細

OLE DB 接続マネージャーなどを作成すると、既定で Connect Timeout プロパティは 0 と表示されます。(図 - 1)
この図の例では、SQL Server Native Client 11.0 を使用しているため、本プロバイダの既定値 15 秒が接続タイムアウト値となります。

図 - 1
image

既定値以外の Connect Timeout を使用する場合は、明示的に値を設定します。(図 - 2)

図 – 2
image

Connect Timeout 値を無制限の 0 と設定する場合は、既定の表示の 0 を別の値に変更後、0 を設定します。(図 – 3)
既定の状態 (図 - 1) との違いは、既定値から変更した場合の Connect Timeout 値は太字 (Bold) になっていることです。

図 - 3
image

また、既定値から変更した場合の PackageName.dtsx ファイルをメモ帳などで開くと、Connect Timeout プロパティの設定が追加されていることを確認できます。(図 - 4)

図 - 4

<DTS:ConnectionManager   DTS:ConnectionString="Data Source=HostName\InstanceName;Initial Catalog=testdb;Provider=SQLNCLI11.1;Integrated Security=SSPI;Connect Timeout=0; Auto Translate=False;" />

 

3. 補足

ADO.NET の接続マネージャー (.NET Framework Data Provider for SQL Server) を使用した場合は、.NET Framework Data Provider for SQL Server の Connect Timeout の既定値である 15 秒が初期値として表示されます。(図 - 5)

図 - 5
image

動作の詳細は Business Intelligence Development Studio (BIDS) / SQL Server Data Tools (SSDT) の内部動作であるために割愛しますが、簡単にお伝えしますと、BIDS や SSDT はプロバイダーの各プロパティを取得する動作となっています。.NET Framework Data Provider for SQL Server を使用した場合は、Connect Timeout を含むすべてのプロパティ値を取得しますが、OLE DB 接続マネージャーを使用した場合は、各 OLE DB プロバイダーの共通のプロパティのみ取得し、OLE DB プロバイダーによってはプロパティが存在しない Connect Timeout は取得せず、OLE DB 接続マネージャーの表示を 0 としています。