下記にV$SESSION_LONGOPSを検索するサンプルコードを提示します(シェル化しています)。watchコマンドで連続的に実行するとさらにいいと思います。
#!/bin/bash # 「V$SESSION_LONGOPS」を参照できるユーザを指定 USER_ID=scott PASSWORD=tigger INSTANCE_NAME=oracle # 「EOT」の前の「\」は変数展開をしない設定 sqlplus -s ${USER_ID}/${PASSWORD}@${INSTANCE_NAME} <<\EOT SET LINESIZE 1000 SET PAGESIZE 1000 SET FEED OFF ALTER SESSION SET NLS_DATE_FORMAT = "YYYY/MM/DD HH24:MI:SS"; ALTER SESSION SET NLS_TIMESTAMP_FORMAT = "YYYY/MM/DD HH24:MI:SSXFF"; COLUMN SID FORMAT 999999 COLUMN SERIAL# FORMAT 9999999 COLUMN MESSAGE FORMAT A100 SELECT SID, SERIAL#, START_TIME, round((SOFAR / TOTALWORK * 100), 2) "PROGRESS(%)", TIME_REMAINING, ELAPSED_SECONDS, MESSAGE FROM V$SESSION_LONGOPS WHERE -- まず終了していないものを表示 TIME_REMAINING != 0 OR -- 終了から1時間以内のものも表示 (終了時刻 > 1時間前) (START_TIME + ELAPSED_SECONDS / 86400) > (sysdate - 1 / 24) -- 終わっていないもの:残り時間が長い順 -- 終わっているもの :開始時刻の順 order by TIME_REMAINING desc, START_TIME desc, 1, 2 ; EOT exit |
DBに関するCode Tips >