오라플에서 에러가 발생했을 때, 어떤 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