DB/Oracle

[Oracle] Oracle 11g에서 MS-SQL DB Link 생성하기

usingsystem 2023. 1. 3. 15:21
728x90

네이버든 구글이든 Oracle에서 MS-SQL DB Link 생성하기는 Oracle 10g를 기준으로 작성된게 거의 대부분 입니다.

간단히 될줄 알았던게 다음과 같은 에러를 발생 시키더군여..

 



*********************************************************************
Link  : "SRCMSSQL"
Error : ORA-28545: 에이전트에 접속할 때 Net8에 의해 진단된 오류
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: 2 lines가 선행됨 (SRCMSSQL로 부터)
*********************************************************************


 

 

10g랑 11g랑 설정에 크게 다른점은 없습니다.

딱 한군데 다른 포인트가 있는데 우선 처음부터 끝까지 설명하도록 하겠습니다.

 

1. ODBC 생성

 

제어판 > 관리도구 > 데이터 원본(ODBC) 를 실행후 시스템 DSN탭을 누르고 '추가' 버튼을 클릭합니다.

 

MS-SQL과 연결하기 때문에 SQL Server를 선택후 '마침' 클릭

 

이름에 쓰이는 항목이 실제로 Oracle을 세팅할때 연결되는 이름임으로 설정하고 기억해 두셔야 합니다.

서버는 Oracle과 MS-SQL이 같은 서버에 있어서 localhost라고 정의했습니다.

 

계정고 암호를 입력합니다.

 

DB Link가 접속했을때 어떤 DataBase와 연결할지 선택한후 다음을 클릭한다.

 

마침 클릭

 

데이터 원본 테스크 클릭

 

위와 같이 나오면 ODBC생성을 끝

 

2. Oracle에 TNSName과 Listener설정

 

#ORACLE_HOME#/NETWORK/ADMIN/tnsnames.ora



SRCMSSQL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA = (SID = SRCMSSQL)
    )
    (HS=OK)
  )






아까 위에서 ODBC를 생성할때 이름이 빨간부분으로 표시된 내용입니다.

사실 모두다 똑같이 맞출 필요는 없는데 실수를 범하지 않기 위해 우선 통일합니다.

 

#ORACLE_HOME#/NETWORK/ADMIN/listener.ora



SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = SRCMSSQL)
      (ORACLE_HOME = C:\app\catchbug\product\11.2.0\dbhome_1)
      (PROGRAM = dg4odbc)
    )
  )
)





 

위에 적어놓은 에러가 발생해서 이 글을 보시는 분들은 저기 dg4odbc를 유심히 보십시요.

 

10g에서는 hsodbc 였지만 11g는 dg4odbc 로 변경 되었다는 글을 보았습니다.

물론 영어로 써진 말이라 다 이해는 못했지만 서비스 체인지 정도 써있는거 보면 tool이 변경된듯 합니다.

반영하려는 Oracle버전이 10g라면 hsodbc 로 작성하시고, 11g면 dg4odbc 로 작성하시면 됩니다.

 

#ORACLE_HOME#/hs/admin/initSRCMSSQL.ora 생성



# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
 
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = SRCMSSQL
HS_FDS_TRACE_LEVEL = 1
HS_DB_DOMAIN = SRCMSSQL
HS_DB_NAME = SRCMSSQL
 
 
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>





 

여기까지 세팅이 끝났으면 리스터를 재기동 해줍니다.

 



C:\Windows\system32>lsnrctl stop
 
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 03-6 -2011 13:2
4:04
 
Copyright (c) 1991, 2010, Oracle.  All rights reserved.
 
(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))에 연결되었습니다
명령이 성공적으로 수행되었습니다
 
C:\Windows\system32>lsnrctl start
 
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 03-6 -2011 13:2
4:07
 
Copyright (c) 1991, 2010, Oracle.  All rights reserved.
 
시작 tnslsnr: 잠시만 기다리세요...
 
TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
시스템 매개변수 파일은 C:\app\catchbug\product\11.2.0\dbhome_1\network\admin\li
stener.ora 입니다
c:\app\catchbug\diag\tnslsnr\Hyper2-DB\listener\alert\log.xml ()로 로그 메시
지를 기록했습니다
리스닝이: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Hyper2-DB)(PORT=1521)))
 
(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))에 연결되었습니다
리스너의 상태
------------------------
별칭                     LISTENER
버전                     TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produc
tion
시작 날짜                 03-6 -2011 13:24:11
업타임                   0  0 시간. 0 . 3 
트레이스 수준            off
보안                     ON: Local OS Authentication
SNMP                     OFF리스너 매개변수 파일   C:\app\catchbug\product\11.2
.0\dbhome_1\network\admin\listener.ora
리스너 로그 파일         c:\app\catchbug\diag\tnslsnr\Hyper2-DB\listener\alert\
log.xml
끝점 요약 청취 중...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Hyper2-DB)(PORT=1521)))
서비스 요약...
"SRCMSSQL" 서비스는 1개의 인스턴스를 가집니다.
  "SRCMSSQL" 인스턴스(UNKNOWN 상태)는 이 서비스에 대해 1 처리기를 가집니다.
명령이 성공적으로 수행되었습니다





 

이제 마지막입니다.

DB Link를 생성해서 잘 되는지 테스트합니다.



CREATE PUBLIC DATABASE LINK SRCMSSQL
CONNECT TO SA
IDENTIFIED BY <PWD>
USING 'SRCMSSQL';






DB Link까지 생성 완료 되었다면, 이제 select 쿼리를 실행해서 결과가 나오는지 확인합니다.



SELECT *
FROM 테이블명@SRCMSSQL





 

출처 - https://m.blog.naver.com/catchbug/20129778270

 

728x90