OS환경 : Oracle Linux 7.6, Windows Server 2012 (64bit)
DB 환경 : Oracle Database 12.1.0.2, SQL Server 2012
방법 : Oracle Linux 7.6 에 12c R1에서 Windows Server 2012 에 SQL Server 2012 로 db 링크
이기종 DB간 연동을 해야하는 경우가 있을 수 있음
오라클 타db로 연동을 하기위해선 Oracle Gateway라는 유료 소프트웨어를 이용하거나
무료로 연동을 하는 방법 두가지가 존재함
유료 소프트웨어를 사용하는 경우에 추후 문제가 발생할 경우 당연히 오라클의 지원을 받을 수 있지만
무료로 연동하는 경우에는 추후 문제가 발생하여도 오라클에서 지원을 받기 힘듦
이런 부분을 인지하고 사용해야함
MS ODBC를 사용하는 방법과 FreeTDS를 사용하는 방법 두가지를 설명함
Linux의 경우 MS ODBC를 사용하면 되지만 Unix의 경우 MS ODBC가 따로 없기 때문에 FreeTDS를 사용해야함
테스트 결과 MS ODBC를 사용하는 방법으로는 OS에서 tsql, isql 명령으로 접근하는것만 성공하고
db링크를 통해 연결하는 방법은 성공하지 못함 (MS ODBC)로 표시해둔 내용은 하지 않아도됨
db링크 연결은 FreeTDS를 사용하는 방법만 설명함
환경 정보
Oracle Linux 7.6 + Oracle Database 12.1.0.2 서버 호스트명, IP : oel7, 192.168.137.50
Windows Server 2012 + SQL Server 2012 서버 호스트명, IP : WIN-P5KNTBRVB79, 192.168.137.12
샘플 데이터 생성(Windows)
SQL Server Management Studio 실행
SQL Server 인증 선택 후 sa 계정으로 로그인
쿼리 입력 후 실행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SQL> BEGIN TRANSACTION GO CREATE TABLE dbo.table_1 ( cola int NULL ) GO INSERT INTO dbo.table_1 values (1) INSERT INTO dbo.table_1 values (1) GO COMMIT; |
메세지에 1개 행이 영향을 받음이 나오면 제대로 데이터가 들어간 것
왼쪽 개체 탐색기 - 새로고침 버튼 선택
해당 테이블 데이터 조회
정상적으로 cola 컬럼에 1, 1 데이터가 나오는것을 확인할 수 있음
1 2 | SQL> select * from table_1; |
OS 환경 설정(Windows)
odbc 데이터 원본(64비트) 실행
시스템 DSN - 추가
SQL Server 선택 - 마침
이름 지정 ms2012(odbc에서 연결지정할 이름)
서버 선택
해당 서버 선택
확인 후 다음
사용자가 입력한 로그인 ID 및 암호를 사용하는 SQL Server 인증 사용 선택
추가 구성 옵션의 기본 설정을 얻기 위해 SQL Server에 연결 선택 후 ID/PW 입력
기본 데이터베이스를 다음으로 변경에
필요한 데이터베이스 선택
마침
요약 확인 후 데이터 원본 테스트
성공 확인 후 확인 선택
확인
시스템 DSN에 [ms2012 64비트 SQL Server]이 생성된것을 확인가능
SQL Server 구성 관리자 실행
SQL Server 네트워크 구성 - MS2012에 대한 프로토콜 - TCP/IP 선택
프로토콜 확인
IP 주소 탭에서 IP1(현재 서버IP)에 사용, 활성 모두 예 확인
OS 환경 설정(Linux)
Linux에서 unixODBC 설치(공통)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | # yum install unixODBC* Loaded plugins: langpacks, ulninfo ol7_UEKR5 | 2.5 kB 00:00:00 ol7_latest | 2.7 kB 00:00:00 packages-microsoft-com-prod | 3.0 kB 00:00:00 (1/2): ol7_latest/x86_64/updateinfo | 2.9 MB 00:00:00 (2/2): ol7_latest/x86_64/primary_db | 34 MB 00:00:01 Resolving Dependencies --> Running transaction check ---> Package unixODBC.x86_64 0:2.3.1-14.0.1.el7 will be updated --> Processing Dependency: libesoobS.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libmimerS.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libnn.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libodbcdrvcfg1S.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libodbcdrvcfg2S.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libodbcminiS.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libodbcnnS.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libodbctxtS.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: liboplodbcS.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: liboraodbcS.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libsapdbS.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libtdsS.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: libtemplate.so.2()(64bit) for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 --> Processing Dependency: unixODBC(x86-64) = 2.3.1-14.0.1.el7 for package: unixODBC-devel-2.3.1-14.0.1.el7.x86_64 ---> Package unixODBC.x86_64 0:2.3.7-1.rh will be an update --> Running transaction check ---> Package unixODBC-devel.x86_64 0:2.3.1-14.0.1.el7 will be updated ---> Package unixODBC-devel.x86_64 0:2.3.7-1.rh will be an update --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================= Package Arch Version Repository Size ============================================================================================================================================================= Updating: unixODBC x86_64 2.3.7-1.rh packages-microsoft-com-prod 213 k Updating for dependencies: unixODBC-devel x86_64 2.3.7-1.rh packages-microsoft-com-prod 42 k Transaction Summary ============================================================================================================================================================= Upgrade 1 Package (+1 Dependent package) Total download size: 255 k Is this ok [y/d/N]: y Downloading packages: No Presto metadata available for packages-microsoft-com-prod (1/2): unixODBC-devel-2.3.7-1.rh.x86_64.rpm | 42 kB 00:00:00 (2/2): unixODBC-2.3.7-1.rh.x86_64.rpm | 213 kB 00:00:00 ------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 300 kB/s | 255 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Updating : unixODBC-2.3.7-1.rh.x86_64 1/4 warning: /etc/odbc.ini created as /etc/odbc.ini.rpmnew warning: /etc/odbcinst.ini created as /etc/odbcinst.ini.rpmnew Updating : unixODBC-devel-2.3.7-1.rh.x86_64 2/4 Cleanup : unixODBC-devel-2.3.1-14.0.1.el7.x86_64 3/4 Cleanup : unixODBC-2.3.1-14.0.1.el7.x86_64 4/4 Verifying : unixODBC-devel-2.3.7-1.rh.x86_64 1/4 Verifying : unixODBC-2.3.7-1.rh.x86_64 2/4 Verifying : unixODBC-devel-2.3.1-14.0.1.el7.x86_64 3/4 Verifying : unixODBC-2.3.1-14.0.1.el7.x86_64 4/4 Updated: unixODBC.x86_64 0:2.3.7-1.rh Dependency Updated: unixODBC-devel.x86_64 0:2.3.7-1.rh Complete! |
Linux에서 설치 확인(공통)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ODBC Manager Driver 정보 확인 # isql --version unixODBC 2.3.7 ODBC Manager 정보 확인 # odbcinst -j unixODBC 2.3.7 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /root/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8 |
Linux에서 Sql Server 용 ODBC 설치(MS ODBC)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | # curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 193 100 193 0 0 558 0 --:--:-- --:--:-- --:--:-- 559 # yum install msodbcsql17 -y Loaded plugins: langpacks, ulninfo packages-microsoft-com-prod | 3.0 kB 00:00:00 packages-microsoft-com-prod/primary_db | 288 kB 00:00:00 Resolving Dependencies --> Running transaction check ---> Package msodbcsql17.x86_64 0:17.5.2.1-1 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================= Package Arch Version Repository Size ============================================================================================================================================================= Installing: msodbcsql17 x86_64 17.5.2.1-1 packages-microsoft-com-prod 802 k Transaction Summary ============================================================================================================================================================= Install 1 Package Total download size: 802 k Installed size: 2.3 M Downloading packages: warning: /var/cache/yum/x86_64/7Server/packages-microsoft-com-prod/packages/msodbcsql17-17.5.2.1-1.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID be1229cf: NOKEY Public key for msodbcsql17-17.5.2.1-1.x86_64.rpm is not installed msodbcsql17-17.5.2.1-1.x86_64.rpm | 802 kB 00:00:00 Retrieving key from https://packages.microsoft.com/keys/microsoft.asc Importing GPG key 0xBE1229CF: Userid : "Microsoft (Release signing) <gpgsecurity@microsoft.com>" Fingerprint: bc52 8686 b50d 79e3 39d3 721c eb3e 94ad be12 29cf From : https://packages.microsoft.com/keys/microsoft.asc Running transaction check Running transaction test Transaction test succeeded Running transaction The license terms for this product can be downloaded from https://aka.ms/odbc17eula and found in /usr/share/doc/msodbcsql17/LICENSE.txt . By entering 'YES', you indicate that you accept the license terms. Do you accept the license terms? (Enter YES or NO) yes [YES 입력] Installing : msodbcsql17-17.5.2.1-1.x86_64 1/1 Verifying : msodbcsql17-17.5.2.1-1.x86_64 1/1 Installed: msodbcsql17.x86_64 0:17.5.2.1-1 Complete! |
Linux에서 mssql-tools 설치(MS ODBC)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | # yum install mssql-tools -y Loaded plugins: langpacks, ulninfo No package ACCEPT_EULA=Y available. Resolving Dependencies --> Running transaction check ---> Package mssql-tools.x86_64 0:17.5.2.1-1 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================= Package Arch Version Repository Size ============================================================================================================================================================= Installing: mssql-tools x86_64 17.5.2.1-1 packages-microsoft-com-prod 223 k Transaction Summary ============================================================================================================================================================= Install 1 Package Total download size: 223 k Installed size: 710 k Downloading packages: mssql-tools-17.5.2.1-1.x86_64.rpm | 223 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction The license terms for this product can be downloaded from http://go.microsoft.com/fwlink/?LinkId=746949 and found in /usr/share/doc/mssql-tools/LICENSE.txt . By entering 'YES', you indicate that you accept the license terms. Do you accept the license terms? (Enter YES or NO) yes Installing : mssql-tools-17.5.2.1-1.x86_64 1/1 Verifying : mssql-tools-17.5.2.1-1.x86_64 1/1 Installed: mssql-tools.x86_64 0:17.5.2.1-1 Complete! |
Linux에서 프로파일에 적용(MS ODBC)
1 2 3 | # echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile # echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc # . ./.bash_profile |
FreeTDS 다운로드
FreeTDS는 이기종간 연결을 위한 유닉스와 리눅스용 라이브러리의 집합임
http://www.freetds.org/index.html 공식홈페이지 접속
오른쪽에 있는 Stable Release (1.2.3)을 눌려서 파일 다운로드 후 서버에 업로드
FreeTDS 설치
1 2 3 4 5 | # tar -xvf freetds-1.2.3.tar.gz # cd freetds-1.2.3/ # ./configure -prefix=/usr/local/freetds -enable-msdblib -with-gnu-ld # make # make install |
make 시 warning: ~~ 이 발생해도 무시하고 make install 진행
freetds.conf 파일 설정
아래 내용 최하단에 추가
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 |
freetds tsql 정상 동작 확인
예시
1 | # /usr/local/freetds/bin/tsql -S <freetds.conf에서 정한이름> -U 계정 -P '패스워드' |
실사용
1 2 3 4 5 6 7 8 9 10 11 | # /usr/local/freetds/bin/tsql -S ms2012 -U sa -P 'dnls1!' locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1> select * from table_1; 2> go cola 1 1 (2 rows affected) 1> quit |
1, 2, 3, 4.... 계속숫자가 올라가지 않고 1> 에서 멈춰서 텍스트를 입력할 수 있으면 정상
테이블 조회도 정상적으로 가능함
[MS ODBC 드라이버 사용 시]
odbcinst.ini 파일 확인(MS ODBC)
1 2 3 4 5 | # cat /etc/odbcinst.ini [ODBC Driver 17 for SQL Server] Description=Microsoft ODBC Driver 17 for SQL Server Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.2.1 UsageCount=1 |
이 파일에 나와있는 [ODBC Driver 17 for SQL Server] 를 아래 odbc.ini의 Driver = 부분에 정확하게 입력해줘야함
odbc.ini 파일 설정(MS ODBC)
1 2 3 4 5 6 | # vi /etc/odbc.ini [ms2012] Description = ms2012 CONNECTION Driver = ODBC Driver 17 for SQL Server Servername = ms2012 Database = master |
isql 정상 동작 확인(MS ODBC)
예시
1 | # /usr/bin/isql -v <odbc.ini_파일에_설정한_이름(ms2012)> <mssql접속계정> <'패스워드'> |
실사용(MS ODBC)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # /usr/bin/isql -v ms2012 sa 'dnls1!' +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from table_1; +------------+ | cola | +------------+ | 1 | | 1 | +------------+ SQLRowCount returns 0 2 rows fetched |
쿼리 입력된다면 정상
[FreeTDS ODBC 드라이버 사용 시 (unix 의 경우 MS ODBC가 없기 때문에 FreeTDS를 사용해야함]
odbcinst.ini 파일 확인
1 2 3 4 5 | # cat /etc/odbcinst.ini [FreeTDS] Description=FreeTDS 8.0 Driver=/usr/local/freetds/lib/libtdsodbc.so FileUsage=1 |
이 파일에 나와있는 [FreeTDS] 를 아래 odbc.ini의 Driver = 부분에 정확하게 입력해줘야함
odbc.ini 파일 설정
1 2 3 4 5 6 | # vi /etc/odbc.ini [ms2012] Description = ms2012 CONNECTION Driver = FreeTDS Servername = ms2012 Database = master |
isql 정상 동작 확인
예시
1 | # /usr/bin/isql -v <odbc.ini_파일에_설정한_이름(ms2012)> <mssql접속계정> <'패스워드'> |
실사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # /usr/bin/isql -v ms2012 sa 'dnls1!' +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from table_1; +------------+ | cola | +------------+ | 1 | | 1 | +------------+ SQLRowCount returns 0 2 rows fetched |
쿼리 입력된다면 정상
오라클 환경설정
아래 작업부터는 oracle 계정으로 접속 후 작업
$ORACLE_HOME/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 = off HS_FDS_SHAREABLE_NAME = /usr/local/freetds/lib/libtdsodbc.so HS_LANGUAGE = AMERICAN_AMERICA.KO16MSWIN949 set ODBCINI=/etc/odbc.ini |
리스너 파일 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ vi $ORACLE_HOME/network/admin/listener.ora LISTENER = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=oel7)(PORT=1521)) #host=현재 oracle db서버 hostname ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME = /app/oracle/product/121/db_1) (SID_NAME = oracle12) ) (SID_DESC = (ORACLE_HOME = /app/oracle/product/121/db_1) (SID_NAME = ms2012) (PROGRAM = dg4odbc) ) ) |
11번째 줄 : 기존 인스턴스 부분은 수정필요 없음
15번째 줄 : 위에서 설정한 ODBC 인스턴스명
tnsnames.ora 파일 설정
1 2 3 4 5 6 7 | $ vi $ORACLE_HOME/network/admin/tnsnames.ora ms2012_tns = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA =(SID = ms2012)) (HS = OK) ) |
tnsping 체크
1 2 3 4 5 6 7 8 9 10 11 12 | $ tnsping ms2012_tns TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 19-JUL-2020 19:13:32 Copyright (c) 1997, 2014, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA =(SID = ms2012)) (HS = OK)) OK (0 msec) |
정상적으로 OK 가 나옴
DB Link 생성
1 2 3 | SQL> create database link msserver connect to "sa" identified by "dnls1!" using 'ms2012_tns'; Database link created. |
ms 유저이름 및 패스워드는 쌍따옴표 "", 연결할 tns는 따옴표 ''로 입력
쿼리 조회 테스트
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/에 로그가 발생함
정상 접속
1 2 3 4 5 6 | SQL> select * from "table_1"@msserver; cola ---------- 1 1 |
정상 접속 시 DEBUG 로그
테스트를 위해 freetds.conf에 있는 tds version을 8.0에서 7.4로 변경
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 |
리스너 재기동
1 2 | $ lsnrctl stop $ lsnrctl start |
비정상 접속
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 로 접속 불가 원인을 파악해볼 수 있음
참조 :
https://closed0402.tistory.com/29
https://closed0402.tistory.com/31
'ORACLE > Migration' 카테고리의 다른 글
오라클 10g R2 에서 오라클 11g R2 수동 업그레이드 마이그레이션 방법 (0) | 2024.08.05 |
---|---|
오라클 11g R2 에서 오라클 19c datapump schemas 옵션 이관시 주의사항 (2) | 2022.02.23 |
오라클 9i 에서 오라클 19c로 정통 export, import 마이그레이션 (1) | 2021.11.24 |
오라클 11g R2 에서 오라클 19c Datapump 마이그레이션 방법 (3) | 2021.06.09 |
Windows Server 2012 에 SQL Server 2012에서 Oracle Linux 7.6 에 12c R1 db 링크 (0) | 2020.07.20 |