sys.dm_exec_sessions のCast(context_info as varchar(128))
を使用して、context_info列から情報を取得しようとしています以下の記事:
Dynamics AX 2012のSPIDからユーザーセッションを検索Amit R. Kulkarni
ただし、一部の行では、context_info列が空です。これがなぜなのか誰か知っていますか?
データベースはDynamics AXデータベースであり、使用しているクエリは次のとおりです。
select cast(context_info as varchar(128)) as ci,*
from sys.dm_exec_sessions
where program_name like '%Dynamics%'
これが出力です。いくつかの列を削除する必要がありましたが、これはほとんどの見た目です。表示されている場合、セッション63および87のContext_infoは空白です。
_CONTEXT_INFO
_はアプリケーションで設定する必要があり、Dynamics AXはセッションに含まれる接続の値を設定します。 _CONTEXT_INFO
_が空白の場合は、アプリケーションがプロパティを設定していないためです。
AXが特定のセッションにいくつかの接続を使用する場合、ETW
トレースの_CONTEXT_INFO
_の設定を次のように確認できます。
いくつかのテストを行ったところ、独自のODBC
connectionを作成したり、AX内からConnection()
クラスを使用したりしても、_CONTEXT_INFO
_が正しく設定されない状況を作成できませんでした。
一部のセッションでは_CONTEXT_INFO
_が空であるという状況があるため、セッションのコンテキスト情報を設定するように構成されていないオブジェクトサーバーがどこかにあるように見えます。
結果をよく見ると、両方の空の行が同じホストプロセスIDを持ち、そのプロセスIDがcontext_infoを返す行がないことがわかります。
sys.dm_exec_sessionsのドキュメント によると、_Host_process_id
_はクライアントアプリケーションのプロセスIDです。
セッションを開始したクライアントプログラムのプロセスID。内部セッションの場合、値はNULLです。 null可能です。
私が考えていることは、このサーバーに複数のAX環境があるか、リンクした記事に従って構成されていない複数のAOSインスタンスがあることです。
たとえば、SQL Serverに接続し、SQL Serverにクエリを実行するときに、1つのマシンにいくつかのインスタンスがあるセットアップがあります_sys.dm_exec_sessions
_ _CONTEXT_INFO
_は、構成していないインスタンスでは空白ですそれと、私が正しく構成したインスタンスでは空白になりません。
SQL Serverのセッションに表示されます。
ただし、私はインスタンスの1つだけを構成したので、コンテキスト情報クエリを見ると、この結果が得られます(空白がたくさんあります)。
私の結論は、このレジストリ構成が適切にアクティブ化されていないインスタンスがどこかにある可能性が高いということです。
ドキュメントの CONTEXT_INFO(Transact-SQL) から:
context_infoが設定されていない場合:
- SQL ServerではNULLを返します。
- [Azure]では、SQLデータベースは一意のセッション固有のGUIDを返します。