문서유형ㅣ장애해결
분야ㅣ인터페이스/연동
적용제품버전ㅣ7FS02PS
문서번호ㅣTIITS017
현상
Oracle에서 DBLink를 사용하여 Tibero에 있는 테이블을 조회할 경우 ORA-28500 에러가 발생합니다.
Oracle에서 DBLink(Oracle to Tibero)를 사용하여 테이블을 조회하는 경우 발생할 수 있는 ORA-28500 에러의 발생원인 및 해결 방안에 대해 안내합니다.
참고
ORA-28500: connection from ORACLE to a non-Oracle system returned this message
현상발생 환경
- Oracle 19c (19.0.0 / Linux)
- Tibero7.2.4 (build seq 303667 / Linux)
[oracle@localhost]$ sqlplus tibero/tibero
SQL> select * from t1@tblink;
select * from t1@tblink
*
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
ORA-02063: preceding line from TBLINK
원인
Oracle to Tibero DBLink 설정이 올바르게 구성되지 않아 ORA-28500 에러가 발생합니다.
해결
1.설정 파일 확인
- tnsnames.ora
- tnsnames.ora의 Alias가 DBLink를 생성할 때의 using 'Alias' 와 같은지 확인합니다.
- IP, PORT 등의 구성 내용과 철자가 맞는지 확인합니다.
- 괄호의 개수와 위치가 맞는지 확인합니다.
[oracle@localhost ~]$ cd $ORACLE_HOME/network/admin
[oracle@localhost admin]$ cat tnsnames.ora
tibero_test =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Oracle Listener를 기동할 서버 IP)(PORT = 1621))
(CONNECT_DATA =(SID = tibero))
(HS = OK)
)
[oracle@localhost admin]$ sqlplus tibero/tibero
SQL> create database link tblink connect to tibero identified by "tmax" using 'tibero_test';
Database link created.
- listener.ora
- listener.ora의 SID_NAME과 tnsnames.ora의 SID가 같은지 확인합니다.
- IP, PORT 등의 구성 내용과 철자가 맞는지 확인합니다.
- 괄호의 개수와 위치가 맞는지 확인합니다.
- 확인이 완료되었으면 리스너를 재기동합니다.
[oracle@localhost ~]$ cd $ORACLE_HOME/network/admin
[oracle@localhost admin]$ cat listener.ora
LORACLE =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = tcp)(HOST = Oracle Listener를 기동할 서버 IP)(PORT = 1621))
)
SID_LIST_LORACLE =
(SID_LIST=
(SID_DESC=
(SID_NAME=tibero)
(ORACLE_HOME=/home/oracle/oracle_19c)
(PROGRAM=dg4odbc)
)
)
- init<SID>.ora
- init<SID>.ora의 파일명에서 <SID> 부분이 listener.ora의 SID_NAME과 같은지 확인합니다.
- init<SID>.ora의 HS_FDS_CONNECT_INFO가 tbdsn.tbr의 Alias와 같은지 확인합니다.
- init<SID>.ora의 HS_FDS_SHAREABLE_NAME의 경로와 권한을 확인합니다.
[oracle@localhost ~]$ cd $ORACLE_HOME/hs/admin
[oracle@localhost admin]$ cat inittibero.ora
# HS init parameters
HS_FDS_CONNECT_INFO=tibero
HS_FDS_TRACE_LEVEL=DEBUG
HS_FDS_SHAREABLE_NAME=/home/oracle/tibero7/client/lib/libtbodbc.so
HS_NLS_NCHAR=UCS2
# Environment variables required for the non-Oracle system
set TBCLI_WCHAR_TYPE=ucs2
- tbdsn.tbr
- IP, PORT 등의 구성 내용과 철자가 맞는지 확인합니다.
- 괄호의 개수와 위치가 맞는지 확인합니다.
- tbsql을 통해 Tibero에 접속이 가능한지 확인합니다.
[oracle@localhost ~]$ cd $TB_HOME/client/config
[oracle@localhost config]$ cat tbdsn.tbr
tibero=(
(INSTANCE=(HOST= Tibero 서버 IP)
(PORT=18629)
(DB_NAME=tibero_tar)
)
)
오라클 서버에서 tbsql로 Tibero 접속 가능 확인
[oracle@localhost ~]$ tbsql tibero/tmax@tibero
tbSQL 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.
Connected to Tibero using tibero.
SQL>
2. init<SID>.ora에 파라미터 추가
- Oracle to Tibero 환경에서 DB의 캐릭터셋이 각각 AL32UTF8(Oracle) / UTF8(Tibero) 인 경우 설정합니다.
- TBCLI_WCHAR_TYPE : 데이터베이스 클라이언트에서 사용하는 wide char 타입의 기본 설정을 지정합니다.
UCS2로 설정할 경우, wide char 타입을 2byte로 고정합니다.
HS_NLS_NCHAR=UCS2
set TBCLI_WCHAR_TYPE=UCS2
3. libtbodbc.so , dg4odbc 교체
- $TB_HOME/client/lib/libtbodbc.so 의 권한 확인 및 다른 버전의 libtbodbc.so 로 교체하여 시도합니다.
- $ORACLE_HOME/bin/dg4odbc 의 권한 확인 및 다른 버전의 dg4odbc를 따로 다운로드 받아 교체하여 시도합니다.
[oracle@localhost ~]$ ls -al $TB_HOME/client/lib/libtbodbc.so
-rwxr-xr-x 1 oracle oracle 45689072 11월 1 2024 /home/oracle/tibero7/client/lib/libtbodbc.so
[oracle@localhost ~]$ ls -al $ORACLE_HOME/bin/dg4odbc
-rwxr-x--x 1 oracle oracle 738168 6월 22 2023 /home/oracle/oracle_19c/bin/dg4odbc