oracle 実行されているSQLを確認

Oracleデータベースで現在実行されているSQLクエリを確認するには、いくつかの方法があります。代表的な方法としては、動的ビュー(動的パフォーマンスビュー)を使用することです。これらのビューにはデータベースのパフォーマンスやアクティビティに関する情報が含まれています。

以下、一般的な手順とSQLクエリをいくつか紹介します。

1. V$SESSIONビューの使用

V$SESSIONビューは、現在データベースに接続しているセッションについての情報を提供します。これとV$SQLビューを結合することで、実行中のSQLを確認できます。

SELECT s.sid,
       s.serial#,
       s.username,
       s.status,
       q.sql_text
FROM   v$session s
JOIN   v$sql q
ON     s.sql_address = q.address
WHERE  s.status = 'ACTIVE';

2. V$SQL_MONITORビューの使用

V$SQL_MONITORビューは、SQLモニタリングの情報を提供します。長時間実行されるSQLステートメントの情報を確認するのに便利です。

SELECT sql_id,
       sql_text,
       status,
       elapsed_time,
       executions,
       sql_exec_id
FROM   v$sql_monitor;

3. DBA_HIST_ACTIVE_SESS_HISTORYビューの使用

過去のセッションアクティビティを確認したい場合は、DBA_HIST_ACTIVE_SESS_HISTORYビューを使用します。これはOracleの自動ワークロードリポジトリ(AWR)に基づいており、セッションのヒストリカルデータを提供します。

SELECT sample_time,
       session_id,
       session_serial#,
       sql_id,
       sql_plan_hash_value,
       sql_exec_id,
       event,
       wait_time,
       current_obj#,
       current_file#,
       current_block#
FROM   dba_hist_active_sess_history
ORDER BY sample_time DESC;

4. V$ACTIVE_SESSION_HISTORY の使用

V$ACTIVE_SESSION_HISTORY(ASH)ビューは、アクティブなセッションに関する最近の情報を提供します。ASHは短い時間間隔でセッションのスナップショットをキャプチャします。

SELECT sample_time,
       session_id,
       sql_id,
       sql_child_number,
       sql_plan_hash_value,
       event,
       blocking_session,
       blocking_session_status
FROM   v$active_session_history
WHERE  sample_time > SYSDATE - INTERVAL '5' MINUTE; -- 過去5分間のデータを取得

5. OEM (Oracle Enterprise Manager) の使用

Oracle Enterprise ManagerやCloud Controlを使用している場合は、GUIベースのインタフェースからも実行中のSQLを確認することができます。パフォーマンスページの「アクティブなセッション」などを参照してください。

6. DBMS_MONITORパッケージの使用

SPM (SQL Performance Monitor)を有効にすることで特定のセッションやSQL IDのパフォーマンスをモニタリングしやすくすることもできます。

上記のいずれかの方法を用いることで、Oracleデータベース上で現在実行されているSQLクエリを確認することができます。データベースの運用方針や具体的な要件に応じて、適切な方法を選択してください。

コメント

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