bbb

現在トランザクションを保持しているセッションだけでなく、そのセッションが実行しているSQLも特定したい場合、V$SQLビューを利用してそれを特定することができます。具体的には、V$TRANSACTIONV$SESSION、およびV$SQLを結合して情報を取得します。

以下はそのためのSQLクエリの例です:

SELECT
    sess.sid,
    sess.serial#,
    sess.username,
    sess.program,
    txn.start_time,
    sql.sql_text
FROM
    v$transaction txn
JOIN
    v$session sess ON txn.ses_addr = sess.saddr
LEFT JOIN
    v$sql sql ON sess.sql_address = sql.address AND sess.sql_hash_value = sql.hash_value;

このクエリについての説明:

  • v$transaction: 現在のトランザクションに関する情報を提供します。
  • v$session: 現在のセッションに関する情報を提供します。
  • v$sql: SQL文に関する情報を提供します。
  • txn.ses_addr = sess.saddr: トランザクションとセッションの結合条件です。
  • sess.sql_address = sql.address AND sess.sql_hash_value = sql.hash_value: セッションとSQLの結合条件です。この結合により、特定のセッションがどのSQL文を実行しているかを特定できます。

このクエリを実行することで、現在トランザクションを保持しているセッションと、そのセッションが実行しているSQL文が取得できます。

もし特定の時間範囲や条件を追加したい場合は、クエリにWHERE句を追加することも可能です。例えば、特定のユーザーに関連したトランザクションだけを特定する場合:

SELECT
    sess.sid,
    sess.serial#,
    sess.username,
    sess.program,
    txn.start_time,
    sql.sql_text
FROM
    v$transaction txn
JOIN
    v$session sess ON txn.ses_addr = sess.saddr
LEFT JOIN
    v$sql sql ON sess.sql_address = sql.address AND sess.sql_hash_value = sql.hash_value
WHERE
    sess.username = 'YOUR_USERNAME';

このクエリにより、指定されたユーザーが関与するトランザクションとそのSQL文を取得することができます。ユーザー名の変数はYOUR_USERNAMEとして指定していますが、実際のユーザー名に置き換えてください。

`,


詳細なカラムを指定して追加することも可能です.Translate to Japanese

コメント

タイトルとURLをコピーしました