문서유형ㅣ장애해결
분야ㅣ마이그레이션
적용제품버전ㅣ6FS07
문서번호ㅣTMITS007
현상
참고발생 버전 : Tibero6 FS07 / Oracle 11g + SunOS / TableMigrator 262224
Source(Oracle)의 XML type이 존재하는 테이블을 TableMigrator를 통하여 이관 시, Source(Oracle) 측에 PGA 메모리가 점유되는 현상이 발생합니다.
시나리오
1. Source 에 생성
SQL > create table t322393( ROWCNT number , C1 number , C2 varchar2(100) , C3 char(10) , C4 date not null , C5 timestamp , C6 interval day to second , C7 interval year to month , C8 raw(16) , C9 nchar(15) , C10 nvarchar2(10) , C11 varchar(10) , C12 blob , c13 xmltype ) TABLESPACE ts322393 PCTFREE 10 PCTUSED 0 INITRANS 1 MAXTRANS 255 LOGGING NOCOMPRESS DISABLE ROW MOVEMENT NOPARALLEL;
2. Sample Data Insert
SQL > insert into t322393
( rowcnt
, C1
, C2
, C3
, C4
, C5
, C6
, C7
, C8
, C9
, C10
, C11
, C12
, c13
)
(
select
level
,level+1
,to_date(to_char(trunc(dbms_random.value(2000,2010)))||'0101','yyyymmdd')+trunc(dbms_random.value(1,365))
,to_date(to_char(trunc(dbms_random.value(2000,2100)))||'0101','yyyymmdd')+trunc(dbms_random.value(1,365))
,sysdate
,sysdate
,INTERVAL '30' MINUTE
, INTERVAL '01-02' YEAR TO MONTH
,SYS_GUID()
,'test'
,'test'
,'2000'
,lpad('A',4000,'A')
, '
이름
이름2
이름
이름2
'
from dual connect by level <= 200000);
SQL > commit;3. Target에서 TableMigrator를 통해 해당 테이블 이관
4. 아래 쿼리를 통해 Source(Oracle)에서 Memory 확인
SQL > select s.sid,s.pid, s.PROG_NAME, round(s.PGA_USED_MEM/1024/1024/1024, 2) ||' GB' PGA from v$session s where s.PROG_NAME= 'Table Migrator[1]';
원인
메모리 누수의 구체적인 과정은 아래와 같습니다.
- Table Migrator 사용 시, XMLTYPE 컬럼의 데이터를 getClobVal() 함수를 통해 조회하게 됩니다.
- 이 과정에서 Oracle 내부적으로 Temp LOB이 생성됩니다.
- 하지만 해당 Temp LOB에 대한 정리가 제대로 이루어지지 않아, 해당 세션이 종료될 때까지 PGA 사용량이 증가하게 됩니다.
따라서, 이러한 문제를 방지하기 위해서는 개선된 버전의 T-up 바이너리 사용이 필요합니다.
해결
개선된 패치가 적용된 T-up 바이너리를 사용하여 해결합니다. (개선 패치 : FS01_2404a_tup)
주의티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.