현상
DBLink로 Long타입 Insert Into 구문 수행시 SIGSEGV 가 발생합니다.
SQL> INSERT INTO [REMOTE LONG TABLE 1] SELECT * FROM [REMOTE LONG TABLE 2]
SQL
복사
위 예시의 1,2번 dblink가 Oracle, Tibero 상관 없이 현상이 발생합니다.
원인
Remote to Remote는 Long 타입에서 고려되지 않았기 때문에 SIGSEGV 가 발생합니다.
해결
패치를 적용해 해결합니다. (적용패치: FS07PS_337669a)
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
-- 패치 후 테스트 시나리오
#tibero to tibero dblink 생성
create database link tlink01 connect to tibero identified by 'tmax' using 'tibero';
create database link tlink02 connect to tibero identified by 'tmax' using 'tibero';
#tibero to oracle dblink 생성
create database link olink01 connect to lkh identified by 'tibero' using 'gw_orcl19';
create database link olink02 connect to lkh identified by 'tibero' using 'gw_orcl19';
[오라클과 티베로 둘 다 수행]
create table t1_long (c1 varchar2(10), c2 long);
create table t2_long (c1 varchar2(10), c2 long);
insert into t2_long values('a', 'a');
insert into t1_long values('a', 'a');
create table t1_clob (c1 varchar2(10), c2 clob);
create table t2_clob (c1 varchar2(10), c2 clob);
insert into t2_clob values('a', 'a');
insert into t1_clob values('a', 'a');
commit;
# Insert test
1. Tibero to Tibero (Remote to Remote)
insert into t1_long@tlink01 select * from t2_long@tlink02;
2. Oracle to Oracle (Remote to Remote)
insert into t1_long@olink01 select * from t2_long@tlink01;
3. cross-database remote to remote
insert into t1_long@tlink01 select * from t2_long@olink01;
insert into t1_long@olink01 select * from t2_long@tlink01;
# Update test
1. Tibero to Tibero (Remote to Remote)
update t1_long@tlink01 t1 set (c1, c2) = (select c1, c2 from t2_long@tlink02);
2. Oracle to Oracle (Remote to Remote)
update t1_long@olink01 t1 set (c1, c2) = (select c1, c2 from t2_long);
3. Cross-Database Remote to Remote
update t1_long@tlink01 t1 set (c1, c2) = (select c1, c2 from t2_long@olink01);
update t1_long@olink01 t1 set (c1, c2) = (select c1, c2 from t2_long@tlink01);
--모두 Signal 없이 정상수행되어 1 row inserted. 출력 되어야합니다.
SQL
복사
참고
패치 미 적용 시, Long type 대신 Lob 사용으로 개선할 수 있습니다.