現在トランザクションを保持しているセッションだけでなく、そのセッションが実行しているSQLも特定したい場合、V$SQLビューを利用してそれを特定することができます。具体的には、V$TRANSACTION、V$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

コメント