프린트 하기

OS환경 : Oracle Linux 7.6, Windows Server 2012 (64bit)


DB 환경 : Oracle Database 12.1.0.2, SQL Server 2012


에러 : ORA-28500: connection from ORACLE to a non-Oracle system returned this message:

FreeTDS 설정 후 이기종 db간 db 링크시 발생하는 에러메세지

ORACLE to MSSQL

1
2
3
4
5
6
SQL> select * from "table_1"@msserver;
select * from "table_1"@msserver
              *
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
ORA-02063: preceding line from MSSERVER



해결 방법 : FreeTDS 설정파일에서 tds version 변경

tds version 확인

1
2
3
4
5
6
# vi /usr/local/freetds/etc/freetds.conf
[ms2012]
host = 192.168.137.12 # MsSQL Server IP Address
port = 1433 # MsSQL Server Port
tds version = 7.4
client charset = UTF-8

7.4로 되어있음



tds version을 8.0으로 변경

1
2
3
4
5
6
# vi /usr/local/freetds/etc/freetds.conf
[ms2012]
host = 192.168.137.12 # MsSQL Server IP Address
port = 1433 # MsSQL Server Port
tds version = 8.0
client charset = UTF-8



리스너 재기동

1
2
$ lsnrctl stop
$ lsnrctl start



db 링크 조회

1
2
3
4
5
6
SQL> select * from "table_1"@msserver;
 
      cola
----------
     1
     1

정상 조회됨




접속 불가시 DEBUG 기능 활용 

hs/admin/init 파일 수정

1
2
3
4
5
6
$ vi $ORACLE_HOME/hs/admin/initms2012.ora
HS_FDS_CONNECT_INFO = ms2012
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_SHAREABLE_NAME = /usr/local/freetds/lib/libtdsodbc.so
HS_LANGUAGE = AMERICAN_AMERICA.KO16MSWIN949
set ODBCINI=/etc/odbc.ini

trace level을 debug로 설정 시 db링크로 접속 시도할 때마다

$ORACLE_HOME/hs/log/에 로그가 발생함



tds version 이 7.4일때 비정상 접속

1
2
3
4
5
6
SQL> select * from "table_1"@msserver;
select * from "table_1"@msserver
              *
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
ORA-02063: preceding line from MSSERVER

ORA 메세지 발생



비정상 접속 시 DEBUG 로그

DEBUG 로 접속 불가 원인을 파악해볼 수 있음



원인 : 잘못된 tds version

SQL Server 2000 이상의 경우 tds version 8.0을 사용해야한다고함



참조 : https://positivemh.tistory.com/626