ORACLE Tip2008. 11. 19. 14:48


현재 돌고있는 SQL이 언제 끝나는지 예측할 수 있다.

v$session_longops view를 통해 알수 있는데 이 view가 보이지 않으면
DBMS_APPLICATION_INFO package의 SET_SESSION_LOGOPS procedure를 돌리면 된다.

Oracle 8.0 부터 제공되고 있는 v$session_longops 는 단일 long running operation에 대한 진행 상태를 operatoin별로 제공해 주는 view로 DSS, DW와 같은 long running job이 많은 system에서는 유용한 정보를 확인할 수 있는 table이다.

* 이 dynamic view에서 다루어지는 operation들에는 다음의 것들이 있다.
- Archiving
- Rman Backup and Restore
- Parallel Query
- Recovery ( Crash and Media )
- Full Table scans (10000 blocks 이상의 full table scan을 long operation으로 간주한다.)
- Sorting
- Analyze using DBMS_STATS Not seen yet
- Hash Cluster Creation
- Hash Joins Phase 2

* v$session_longops COLUMNS
- SID : Session identifier
- SERIAL# : Session serial number
- OPNAME : The operation name
- TARGET : The object on which the operation is carried out
- TARGET_DESC : Description of the target
- SOFAR : The units of work done so far
- TOTALWORK : The total units of work
- UNITS : The units of measurement
- START_TIME : The starting time of operation
- LAST_UPDATE_TIME : Time when statistics last updated
- ELAPSED_SECONDS : The number of elapsed seconds from the start of operations
- CONTEXT : Context
- MESSAGE : Statistics summary message

사용예 >
select *
from v$session_longops;

-- 특정 유저가 사용한 작업만을 보고자 할때.
select *
from v$session_longops
where (sid, serial#) in (select sid, serial# from v$session  where username = 'SCOTT');

-- 시작시간과 현재의 진행상태를 보고자 할때.
select sid, serial#, opname, to_char(start_time,'HH24:MI:SS') as START_TIME, (sofar/totalwork)*100 as percent_complete
from v$session_longops

Posted by 항아리고미