TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2016-07-03 |
제목 | TRANSACTION ROLLBACK을 하는 문장을 찾는 방법과 ROLLBACK 시간 예상하기 | ||
---|---|---|---|
(10G) TRANSACTION ROLLBACK을 하는 문장을 찾는 방법과 ROLLBACK 시간 예상하기
==================================================================== PURPOSE ------- 이 문서는 Transaction Rollback을 모니터하는데 이용한다. Rollback을 하는데 얼마나 많은 시간이 남았는지 , rollback을 하는 문장은 무엇인지 확인할수 있다. Explanation ----------- Oracle Database 10g에서는 transaction rollback이 수행될때 , 진행중인 transaction이 $SESSION_LONGOPS view에 event가 기록되어진다. 이 view는 10g 이전 데이타베이스에도 존재하였지만, transaction을 rollback을 하는것은 기록하지 못했었다. Rollback의 경우에 , 6초보다 길어지는 경우에 이 view에 기록되어진다. $SESSION_LONGOPS view는 모든 진행중인 작업에 대해 보여주는데, "Transaction Rollback" 이라고 기록되어진 OPNAME 컬럼을 통해 확인할수 있다. 다음은 각 컬럼에 대해 살펴보도록 한다. TIME_REMAINING : 예상된 남겨진 시간을 보여준다. (초단위) ELAPSED_SECONDS : 이제까지 수행한 시간을 보여준다. (초단위) TOTALWORK : 수행하는 작업의 전체 양을 보여준다. SOFAR : 이제까지 수행한 작업의 양을 보여준다. UNITS : 작업한 양의 단위를 보여준다. LAST_UPDATE_TIME : view의 내용이 현재것인지를 판단하게 한다. Example ------- < Terminal 1 > sqlplus scott/tiger SQL> create table emp10 as select * from emp where 1=2; Table created. SQL> begin for i in 1..100000 loop insert into emp10 select * from emp; end loop; end; / SQl>Commit; SQL>update emp10 set sal=1000; SQL>Rollback; < Terminal 2 > sqlplus system/manager Terminal 1 에서 실행중인 Rollback에 대한 자세한 정보를 얻기 위해 다음의 query을 수행한다. SQL> select OPNAME,TARGET,SOFAR,TOTALWORK,UNITS,START_TIME,TIME_REMAINING, ELAPSED_SECONDS from v$session_longops where username='SCOTT'; OPNAME ---------------------------------------------------------------- TARGET SOFAR ---------------------------------------------------------------- ---------- TOTALWORK UNITS START_TIME TIME_REMAINING ---------- -------------------------------- ------------ -------------- ELAPSED_SECONDS --------------- Transaction Rollback 978 23438 Blocks 24-NOV-04 207 9 참고 : 위의 query 결과를 보면, 지금까지 978 block이 rollback 되었고 전체 작업양은 23438 block임을 알수 있다. 이 작업은 9초간 수행되었고 남아 있는 예상 시간은 207 초이다. 계속 query하면 작업이 진행됨에 따라 SOFAR column의 값은 늘어나고, TIME_REMAINING column의 값은 둘어드는 것을 관찰할수 있다.(TIME_REMAINING column의 값은 예상시간이기 때문에 조금 늘었다 줄었다 할때도 있다.) SQL> / OPNAME ---------------------------------------------------------------- TARGET SOFAR ---------------------------------------------------------------- ---------- TOTALWORK UNITS START_TIME TIME_REMAINING ---------- -------------------------------- ------------ -------------- ELAPSED_SECONDS --------------- Transaction Rollback 10162 23438 Blocks 24-NOV-04 183 140 참고 : 새로운 SQL_ID column은 V$SQL view와 대응하여 rollback하고 있는 문장을 찾는데 사용된다. SQL> select OPNAME,SQL_ID ,TOTALWORK,UNITS,START_TIME,TIME_REMAINING, ELAPSED_SECONDS from v$session_longops where username='SCOTT'; OPNAME SQL_ID ---------------------------------------------------------------- ------------- TOTALWORK UNITS START_TIME TIME_REMAINING ---------- -------------------------------- ------------ -------------- ELAPSED_SECONDS --------------- Transaction Rollback 18grqd4nfgv98 23438 Blocks 24-NOV-04 119 226 SQL> SELECT SQL_TEXT FROM V$SQL WHERE SQL_ID ='18grqd4nfgv98'; SQL_TEXT --------------------------------------------------------------------- rollback |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |