web-dev-qa-db-ja.com

SQLServerで使用されている通信プロトコルをすばやく確認する方法

VSTS 2008 + C#+ ADO.Net + SQL Server 2008を使用しています。別のリモートマシンから接続する場合、通常、TCP/IPプロトコルがADO.NetクライアントによってSQLServer 2008に接続するために使用されます。ローカルに接続する場合(ADO.Netクライアントおよび同じマシン上のSQLServer)、通常は共有メモリまたは名前付きパイプが使用されます。

私の質問は、一般的なルールに加えて、特定の接続で使用されている通信プロトコルを正確に(たとえば、SQL Serverの組み込みコマンド/ツール/ストアドプロシージャから)確認する方法です。

よろしくお願いします、ジョージ

1
George2

問題のプロセスのSPIDがある場合(アクティビティモニター、sp_whoまたはsp_who2などを使用して)、サーバーで次のクエリを実行できます。

SELECT * 
FROM sys.dm_exec_connections 
WHERE session_id = (SPID);

(SPID)をクライアントプロセスの実際のSPIDに置き換えます。 net_transport列を見ると、そのプロセスがSQLServerとの通信に使用しているプロトコルがわかります。興味があるのがプロトコルだけの場合は、SELECT net_transportの代わりにSELECT *を使用してください。

また、client_net_addressなどの他の列でクエリをフィルタリングすることもできます。client_net_addressは、TCP接続の場合、クライアントマシンのIPアドレスになります。このクエリはADO.NETインターフェイス経由で送信できます。SQL SMOにも何かがあるかもしれません。

これが sys.dm_exec_connections のMSDNリファレンスページです。現在のセッション以外のものを表示するには、サーバーに対するVIEW SERVERSTATE権限が必要になることに注意してください。

次の構文を使用して、接続文字列のserverディレクティブでトランスポートプロトコルを指定することもできます。

server=[protocol]:servername

例:

server=tcp:mysqlinstance1 (for TCP/IP)
server=np:mysqlinstance1 (for named pipes)
server=np:\\mysqlinstance1\pipe\pipename (for a specific pipe)
5
squillman

補足として:TCP/IPまたは名前付きパイプはトランスポート層プロトコルであり、表形式のデータストリームはSQL Serverの通信(アプリケーション層)プロトコルです。

http://en.wikipedia.org/wiki/Tabular_Data_Stream

1
joeqwerty