문서유형ㅣ기술정보
분야ㅣ유틸리티
문서번호ㅣTUTTI012
개요
Tibero 환경에서 DBLINK를 통해 CLOB 및 BLOB 데이터를 조회하려고 할 때 발생하는 문제와 이를 우회하는 방법에 대해 안내 합니다.
INSERT ~ SELECT * FROM 테이블@DBLINK 구문을 사용하여 로컬DB로 LOB데이터를 가져온 후 조회 수행합니다. 예제는 2대의 서버( TIBERO1, TIBERO2 ) 및 DBLINK 를 이용하여 테스트를 수행합니다.
참고
테스트는 아래와 같은 환경에서 진행하였습니다.
[tibero@T1:/]$ tbboot -v
- Tibero 7 (DB 7.2.3)
Linux bistro-build-centos_8.4 5.15.0-134-generic #145~20.04.1-Ubuntu SMP Mon Feb 17 13:27:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux version (little-endian)
Patch files (none)
방법
1. (TIBERO1) 테스트 테이블 생성
conn sys/tibero@tibero_v drop table tibero.bb1; create table tibero.bb1(c1 number, c2 clob, c3 blob); desc tibero.bb1; COLUMN_NAME TYPE CONSTRAINT ------------ ------- -------------------------- C1 NUMBER C2 CLOB C3 BLOB
2. (TIBERO1) 테스트 테이블에 데이터 입력
insert into tibero.bb1 values(1,null,null);
insert into tibero.bb1 values(2,empty_clob(),empty_blob());
insert into tibero.bb1 values(3,'test_record_3','48656C6C6F'||UTL_RAW.CAST_TO_RAW(' World!'));
commit;
3. (TIBERO1) 테스트 테이블에 데이터 조회
LOB 데이터 조회되지 않음을 확인합니다.
SQL> col c3 for a20 SQL> col c2 for a20 SQL> select c1,c2,utl_raw.cast_to_varchar2(dbms_lob.substr(c3,20,1)) c3 from tibero.bb1; C1 C2 C3 ---------- -------------------- -------------------- 1 2 3 test_record_3 Hello World!
4. (TIBERO2) DBLINK 생성
TIBERO 2 서버의 tbdsn.tbr 파일에 TIBERO 1 서버접속정보를 'tibero_v' 라는 이름으로 추가 후 다음과 같이 수행합니다.
conn sys/tibero; Connected to Tibero. drop public database link p_remote; create public database link p_remote connect to tibero identified by 'tmax' using 'tibero_v'; SQL> select owner, db_link, host from dba_db_links; OWNER DB_LINK HOST ---------- --------------- ---------- PUBLIC P_REMOTE tibero_v
5. (TIBERO 2) DBLINK 를 이용하여 LOB 데이터 조회
TBR-26020 에러가 발생하는 것을 확인할 수 있습니다.
select c1,c2,utl_raw.cast_to_varchar2(dbms_lob.substr(c3,20,1)) c3 from bb1@p_remote; TBR-26020: Cannot read a LOB object in a remote server.
6. (TIBERO 2) 테이블 생성 및 데이터 입력
원격지DB의 LOB 데이터를 로컬 DB로 가져옵니다.
drop table tibero.bb1; create table tibero.bb1 as select * from bb1@p_remote where 1=2; insert into tibero.bb1 select * from bb1@p_remote; commit;
7. (TIBERO 2) LOB 데이터 조회
로컬 DB에서 LOB 데이터 조회를 수행합니다.
SQL> col c2 for a20 SQL> col c3 for a20 SQL> select c1,c2,utl_raw.cast_to_varchar2(dbms_lob.substr(c3,20,1)) c3 from tibero.bb1; C1 C2 C3 ---------- -------------------- -------------------- 1 2 3 test_record_3 Hello World!