오라플에서 에러가 발생했을 때, 어떤 SQL문이 문제인가를 찾아낼 필요가 있습니다. 예를 들어, Alert.log 파일에 다음과 같은 에러 메시지가 기록되어 있습니다.
1 |
Fri Mar 05 09:47:53 2010 |
2 |
ORA-1652: unable to extend temp segment by 128 in tablespace VERY_SMALL_TBS |
어떤 SQL문이 범인인가를 알지 못하면, 해결하기가 쉽지 않습니다.
이런 경우에 시도해 볼 수 있는 것이 ErrorStack 덤프입니다. ErrorStack 덤프를 진단 이벤트와 함께 사용하면 에러를 일으키는 SQL 문장이 트레이스 파일에 기록되도록 할 수 있습니다.
간단한 예를 설명해 보겠습니다. 우선 작은 크기(10m)의 테이블스페이를 만듭니다.
1 |
UKJA@ukja1021> create tablespace very_small_tbs |
ORA-01652 에러가 발생하면, ErrorStack 덤프를 실행하도록 진단 이벤트를 겁니다.
1 |
UKJA@ukja1021> alter system set events '1652 trace name errorstack level 1, forever' ; |
10m보다 큰 테이블을 만들면 ORA-01652 에러가 발생합니다.
01 |
UKJA@ukja1021> create table tbig(c1) |
02 |
2 tablespace very_small_tbs |
04 |
4 select rpad( 'x' ,1000) from dual |
05 |
5 connect by level <= 10000 |
07 |
select rpad( 'x' ,1000) from dual |
10 |
ORA-01652: unable to extend temp segment by 128 in tablespace VERY_SMALL_TBS |
12 |
UKJA@ukja1021> alter system set events '1652 trace name context off' ; |
Alert.log 파일에는 다음과 에러 메시지가 남습니다.
1 |
Fri Mar 05 09:47:53 2010 |
2 |
ORA-1652: unable to extend temp segment by 128 in tablespace VERY_SMALL_TBS |
프로세스의 트레이스 파일에는 에러 발생시의 SQL문과 CallStack 트레이스가 기록되어 있습니다.
01 |
ORA-01652: unable to extend temp segment by 128 in tablespace VERY_SMALL_TBS |
02 |
Current SQL statement for this session: |
04 |
tablespace very_small_tbs |
06 |
select rpad( 'x' ,1000) from dual |
07 |
connect by level <= 10000 |
09 |
calling call entry argument values in hex |
10 |
location type point (? means dubious value) |
12 |
_ksedst+38 CALLrel _ksedst1+0 0 1 |
13 |
_ksedmp+898 CALLrel _ksedst+0 0 |
14 |
_ksddoa+2088 CALLreg 00000000 1 |
15 |
_ksdpcg+238 CALLrel _ksddoa+0 A9615C0 93C78C0 |
16 |
_ksdpec+230 CALLrel _ksdpcg+0 674 C04A478 1 |
17 |
__PGOSF89__ksfpec+1 CALLrel _ksdpec+0 674 |
19 |
_kgesev+88 CALLreg 00000000 A0C6760 674 |
20 |
_ksesec2+39 CALLrel _kgesev+0 A0C6760 93C0020 674 2 C04A4E4 |
21 |
_ktsxterr+316 CALLrel _ksesec2+0 674 0 80 0 1 E C04A55E |
22 |
_ktfbtgex1+969 CALLrel _ktsxterr+0 792DE5C 80 0 |
23 |
_ktsxs_add+1766 CALLrel _ktfbtgex1+0 C04AD8C 3D C04AA50 80 18 A 3 |
25 |
_ktsxssr_sadd+1409 CALLrel _ktsxs_add+0 C04B048 C04AD8C 80 A 3 0 18 1 |
26 |
C04B11C C04AE08 C04ADC0 0 |
28 |
_ktrsexec+372 CALL??? 00000000 C04B0D8 |
29 |
_ktelwbl+770 CALLrel _ktrsexec+0 C04B0D8 |
30 |
_kdblba+168 CALLrel _ktelwbl+0 792DE5C 1 |
31 |
_kdblGetBlockDba+58 CALLrel _kdblba+0 |
32 |
_kdblgb+26 CALLrel _kdblGetBlockDba+0 C04B3C8 792DD9C |
33 |
_kdblailb+2101 CALLrel _kdblgb+0 |
34 |
_kdblai+1560 CALLrel _kdblailb+0 C04B3C8 792DC9C 792DD9C 0 1 1 |
35 |
_klclil1r+187 CALLrel _kdblai+0 |
36 |
_qerltRop+514 CALLrel _klclil1r+0 792DBEC |
37 |
_qercbiFetch+935 CALLreg 00000000 34C4F034 7FFF |
38 |
_rwsfcd+95 CALL??? 00000000 34C4F384 1C72EB4 34C4F034 |
40 |
_qerltFetch+368 CALL??? 00000000 34C4F148 1C72EB4 34C4F034 |
42 |
_ctcdrv+7674 CALL??? 00000000 34C4F034 1D28394 C04CE30 1 |
43 |
_opiexe+12257 CALLrel _ctcdrv+0 34EE5F50 C04D548 C04D510 |
44 |
_opiosq0+6088 CALLrel _opiexe+0 4 0 C04D8C0 |
45 |
_kpooprx+232 CALLrel _opiosq0+0 3 E C04D9D8 A4 |
46 |
_kpoal8+775 CALLrel _kpooprx+0 C04F6F8 C04E224 6D 1 0 A4 |
47 |
_opiodr+1099 CALLreg 00000000 5E 17 C04F6F4 |
48 |
_ttcpip+1273 CALLreg 00000000 5E 17 C04F6F4 0 |
49 |
_opitsk+1017 CALL??? 00000000 |
50 |
_opiino+1087 CALLrel _opitsk+0 0 0 |
51 |
_opiodr+1099 CALLreg 00000000 3C 4 C04FC8C |
52 |
_opidrv+819 CALLrel _opiodr+0 3C 4 C04FC8C 0 |
53 |
_sou2o+45 CALLrel _opidrv+0 3C 4 C04FC8C |
54 |
_opimai_real+112 CALLrel _sou2o+0 C04FC80 3C 4 C04FC8C |
55 |
_opimai+92 CALLrel _opimai_real+0 2 C04FCB8 |
56 |
_OracleThreadStart@ CALLrel _opimai+0 |
58 |
7C80B710 CALLreg 00000000 |
ErrorStack 덤프는 그 레벨에 따라 다양한 유용한 정보를 제공해줍니다. 아래 아티클에서 상세한 정보를 얻을 수 있습니다.
출처 : http://ukja.tistory.com/307