SQL Server クライアント コンピューターが SQL Server のインスタンスに接続しようとすると、クライアントによってプロトコルが変更される可能性があります

この記事では、クライアント コンピューターが SQL Server のインスタンスに接続しようとしたときに、クライアントがプロトコルを変更する可能性があるSQL Serverについて説明します。

元の製品バージョン: SQL Server
元の KB 番号: 328383

概要

Microsoft Data Access Components (MDAC) バージョン 2.6 以降のクライアント コンピューターでは、複数のプロトコルまたはプロセス間通信 (IPC) メカニズムを試して、SQL Serverへの接続を確立できます。

詳細

MDAC バージョン 2.6 以降の Dbnetlib.dll、クライアント側ネットワーク ライブラリが強化されました。 MDAC バージョン 2.6 以降では、複数のプロトコルが使用可能で、最初のプロトコルとの接続試行が失敗した場合、クライアント アプリケーションは直ちに他のプロトコルの 1 つを使用しようとします。

既定では、クライアントには使用可能なプロトコルとして TCP と名前付きパイプがあります。 SQL Server クライアント ユーティリティを使用して、プロトコルの順序を操作できます。 クライアント アプリケーションは、クライアント コンピューターで指定された順序でプロトコルを使用します。 プロトコルの順序は、 ProtocolOrder の値の下の次のレジストリ キーの場所に格納されます。

HKLM\Software\Microsoft\MSSQLServer\Client\SuperSocketNetLib

SQL Server 2005 を使用している場合、プロトコルの順序は、次のレジストリ サブキーの ProtocolOrder レジストリ エントリに格納されます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI<version>

たとえば、クライアント コンピューターで TCP パイプと名前付きパイプの両方を使用できる場合、順序は次のようになります。

  • TCP
  • 名前付きパイプ

クライアント コンピューターがサーバーへの TCP 接続を試行し、接続試行で 0 以外のリターン コードが返されると、クライアントはリスト内の次のプロトコル (名前付きパイプ) を使用して、透過的に接続を試行します。 このシナリオでは、クライアントは TCP 接続を確立できません。ただし、クライアントは名前付きパイプ接続を正常に行います。

注:

クライアントは、最初のプロトコルが失敗したことを示すエラーを受け取りません。

クライアント アプリケーションが 2 番目のプロトコルを使用し、エラーも返す場合は、クライアントにエラーが返されます。

次のいずれかの方法を使用してエイリアスを作成する場合、クライアント アプリケーションはエイリアス情報を使用してサーバーへの接続を確立し、追加のプロトコルは使用しません。

  • SQL Server クライアント ネットワーク ユーティリティを使用する
  • SQL Server 構成マネージャーを使用する
  • ODBC データ ソース名 (DSN) を作成する場合

クライアント アプリケーションが接続試行ごとに使用するプロトコルを制御し、クライアントが複数のプロトコルを試すことを許可しない場合は、次のいずれかの操作を実行できます。

  • SQL クライアント ネットワーク ユーティリティまたはSQL Server 構成マネージャーを使用して、必要なプロトコルを指定してエイリアスを作成します。

  • 接続文字列でプロトコルを指定します。 例:

    DSN=DSNName;SERVER=servername;DATABASE=YourDataBaseName;Network=DBMSSOCN;Address=IP_Address,1433;UID=YourUID;PWD=YourPassword;
    

    この例では、ネットワーク プロトコルを として DBMSSOCN指定します。これは、TCP/IP プロトコルを使用することを意味します。 接続文字列内でプロトコルを指定した場合、Dbnetlib は指定されたプロトコルのみを使用し、他のプロトコルは試しません。 同様に、名前付きパイプ プロトコルのみを有効にするには、次のような接続文字列を使用します。

    DSN=DSNName;SERVER=servername;DATABASE=YourDataBaseName;Network=DBNMPNTW;Address=\\.\pipe\sql\query;UID=YourUID;PWD=YourPassword;
    
  • クライアント ネットワーク ユーティリティを使用して、他のプロトコルを削除します。

参照

SQL Serverへの接続エラーの解決