ArcGIS Server(ArcSDE)からOracleデータベースに送信されたSQLクエリをトレースする方法は?


12

ArcGIS Server(ArcSDE)からOracleデータベースに送信されたすべてのSQLクエリを含むログファイルを生成したいと思います。そうする方法はありますか?WindowsでOracle 11gとArcGIS Server 10.0を使用しています。ArcSDEは直接接続で使用されます。


3
Oracleのトレースと監査を使用できます。この質問を見てください:stackoverflow.com/questions/7914354/oracle-sql-query-logging
Devdatta Tengshe

Toad Questを使用して、リアルタイムの追跡ログを作成できます。

回答:


13

実際には、ArcSDE接続をトレースする方法がいくつかあります。クライアントアプリケーションとArcSDEクライアント間の呼び出しはSDEトレースファイルに記録され、ArcSDEクライアントとサーバー間のSDE Interceptファイルに記録され、ArcSDEサーバーは特定のイベントをサービスまたは直接接続ログに記録し、データベース呼び出しがログインしますDBMSログファイル。

-------------------------------------------------------------
|                                                           |
|  Client (ArcObject, ArcCatalog, ArcGIS Server, ArcIMS...) |
|                                                           |
-------------------------------------------------------------
      |
      |
     \|/
------------------ --------> SDE Trace
|                |  
|  ArcSDE Client |
|                |  
------------------ --------> SDE Intercept
      |
      |
     \|/
------------------- --------> SDE Intercept
|                 | 
|  ArcSDE Server  | --------> ArcSDE Service Logfile, or direct connect log
|                 |  
------------------- 
      |
      |
     \|/
------------------
|                |  
|  DBMS          | -----------> DBMS logfiles or trace
|                |  
------------------      

ArcSDEトレースファイルは、ArcSDEクライアントに対して行われたすべての呼び出しを記録します。通常、これらのファイルは大きく、ノイズが多くなります。dbinitヘルプのSDETraceLocとSDETraceModeを見てください。これらの値は、アプリケーションを起動する前に環境変数として設定することもできます。これは、アプリケーションおよび直接接続で機能します。

通常、ArcSDE Interceptファイルの方が役立ちます。それらは、どの通話にどの時間が費やされているかを示します。ただし、SDEはストリームの概念に基づいて機能します。特定のコマンド(挿入、更新、削除など)は、ストリームに情報を設定してから、コマンドを実行します。通常、ストリーム番号は、インターセプトファイル内のコマンドの後の最初の整数です。多くのストリームがある場合、これは混乱を招く可能性があります(最大26個のストリームを見てきました)。詳細については、dbinitヘルプの SDEInterceptおよびSDEInterceptLoc またはSDE Interceptファイルに関するこのKB記事を参照してください。

%SDE_HOME%\ etcフォルダー内のArcSDEサービスログファイル、または%SDE_HOME%\ etcまたは%TEMP%フォルダー内の直接接続ログファイルには、サービスまたは接続で行われていることに関する一般情報が含まれています。ログに記録される情報の量は、SDEVerbose変数を使用して増やすことができます(dbinit help)。

DBMSのログファイルとトレースは非常に便利です。しかし、彼らはあなたに絵の一部を与えるだけです。また、一部のデータベース(Oracleなど)では、実際にはDBMSトレースにすべてのタイプのエラーが含まれていません。SQLトレースを有効にするには多くの方法があります。上記のDevdattaのコメントは詳細情報へのリンクです。

その他のリンク: 掘り下げ– ArcSDEデータ使用時のジオプロセシングエラーのトラブルシューティング


この図のトレースとインターセプトの場所は正しくありません(トレースはArcSDEクライアントとArcSDEサーバー間のAPI内にあり、インターセプトはサーバーとRDBMS間にあります)。ArcGIS Serverの出力などのアプリケーションログは、クライアントアプリケーションとArcSDE APIの間に位置します。
ビンス

@Vince、ここには混乱があると思います。私のポイントをよりよく説明するために、図を更新しました。Traceは、SDEクライアント(SDE APIを介して)に発行されますが、必ずしもSDEサーバー(SE_coordref_free、SE_shape_get_binary_sizeなど)に発行されないコマンドをリストします。インターセプトには、SDEサーバーへのラウンドトリップをトリガーするコマンドが含まれますが、必ずしもDBMSではありません(QueryWithInfo、StreamSetStateなど)。SDEとDBMS間のロギングは、DBMSと接続タイプ(OCI、OleDB、ODBC)に依存しています。
トラビス

確かに、ASCIIはこれを図式化する最良の方法ではありませんが、2つの「ArcSDEクライアント」に「ArcSDEクライアントAPI」と「ArcSDEサーバー」のマークが付けられていれば役立ちます。SDETRACEは、クライアントアプリとAPIの間のインターフェイスでキャプチャされます(どちらの方向でもAPIを通過するときにパラメーターをエコーし​​ます)。SDEINTERCEPTはgsrvr DLLのSES関数インターフェイスの両側に存在し(アプリケーションサーバーまたはDirect Connectのいずれかによって明示される)、APIから受信したメッセージとDBMSへの呼び出しの両方を含むと信じています(上位クライアントでインターセプトを移動します)下の底まで)。
ビンス

そう、2つのSDEクライアントはコピーペーストエラーでした。実行時には、実際にはAPIはありません...クライアント(スレッドとメモリ)とサーバー(スレッドとメモリ)だけです。しかし、SDETRACEがパラメーターを超えるとエコーすることに同意します。デフォルトでは、SDEINTERCEPTはDBMSと直接関係のあることをログに記録しません(SQLなど)。SQLロギングを有効にする他のパラメーターがあった可能性がありますが、それらは各DBMSに個別に実装されます。そして、私は彼らが何であるかを知りません。
トラビス

私は一般的にインターセプトの出力を見ていませんが、トレースとインターセプトの両方を有効にして単純な一連のAPIコール( 'sdelist -o layers')を実行しましたが、2つのインターセプトファイルを生成するようです(SQLの対話なし覚えている)、それで私たちはこれに同意できるように見える:)
ヴィンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.