개요
Tibero 환경에서 DBLINK를 통해 CLOB 및 BLOB 데이터를 조회하려고 할 때 발생하는 문제와 이를 우회하는 방법에 대해 안내 합니다.
INSERT ~ SELECT * FROM 테이블@DBLINK 구문을 사용하여 로컬DB로 LOB데이터를 가져온 후 조회 수행합니다. 예제는 2대의 서버( TIBERO1, TIBERO2 ) 및 DBLINK 를 이용하여 테스트를 수행합니다,
참고
테스트는 아래와 같은 환경에서 진행하였습니다.
[tibero@T1:/]$ tbboot -v
Tibero 6 (DB 6.0 FS06_CS_1703)Linux stopbugs 2.6.9-89.ELsmp #1 SMP Mon Jun 22 12:31:33 EDT 2009 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
SQL
복사
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;
SQL
복사
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!
SQL
복사
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
SQL
복사
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.
SQL
복사
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;
SQL
복사
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!
SQL
복사