1. ORACLE DATABASE 연결된 서버 설정하기(7버전 이하)

EXEC SP_ADDLINKEDSERVER
    @SERVER         = 'devsvr.parklab.net'                      -- 명명할 이름(맘대로)
,   @SRVPRODUCT     = 'Microsoft OLE DB Provider for Oracle'    -- 맘대로(여기에서는 OLE DB 공급자)
,   @PROVIDER       = 'MSDAORA'                                 -- provider_name
,   @DATASRC        = 'devsvr.parklab.net'                      -- SQL*Net 별칭 이름(연결할 ORACLE DB)
                                                                -- 로컬일 경우 호스트 헤드네임 만으로도 가능하나
                                                                -- 원격일 때는 전체경로를 적어 줘야 된다.

-- @PROVIDER = 'MSDAORA'           : @DATASRC = SQL*Net 별칭(Sql Server Configuration Manger에 설정된 Client 별칭)
-- @PROVIDER = 'OraOLEDB.Oracle'   : @DATASRC = oracle client의 tnsnames.ora파일에 지정된 별칭

EXEC SP_ADDLINKEDSRVLOGIN 
    @RMTSRVNAME     = 'devsvr.parklab.net'
,   @USESELF        = 'FALSE'
,   @LOCALLOGIN     = NULL
,   @RMTUSER        = 'SCOTT'
,   @RMTPASSWORD    = 'TIGER'


SELECT * FROM [devsvr.parklab.net]..SCOTT.EMP                           -- 대문자로 접근한다.

SELECT *
FROM OPENQUERY(EMRO, 'SELECT * FROM ESAATTH') 


EXEC SP_DROPLINKEDSRVLOGIN
    @RMTSRVNAME     = 'devsvr.parklab.net'
,   @LOCALLOGIN     = NULL

EXEC SP_DROPSERVER
    @SERVER         = 'devsvr.parklab.net'
,   @DROPLOGINS     = 'droplogins'

 

2. ORACLE DATABASE 연결된 서버 설정하기(8버전 이상)

-- 연결된 서버 등록(HR ORACLE)
EXEC SP_ADDLINKEDSERVER
    @SERVER         = 'LSNKHR'                                  -- 명명할 이름(맘대로)
,   @SRVPRODUCT     = 'Microsoft OLE DB Provider for Oracle'    -- 맘대로(여기에서는 OLE DB 공급자)
,   @PROVIDER       = 'OraOLEDB.Oracle'                         -- provider_name
,   @DATASRC        = 'LSNKHR'                                  -- tnsnames.ora파일에 지정된 별칭

                                                                        
EXEC SP_ADDLINKEDSRVLOGIN 
    @RMTSRVNAME     = 'LSNKHR'
,   @USESELF        = 'FALSE'
,   @LOCALLOGIN     = NULL
,   @RMTUSER        = 'ehr_ln'
,   @RMTPASSWORD    = 'ehr_ln'


SELECT * FROM [LSNKHR]..EHR_LN.V_SRM_ORG                        -- 대문자로 접근한다.
SELECT * FROM [LSNKHR]..EHR_LN.V_SRM_EMP

EXEC SP_DROPLINKEDSRVLOGIN
    @RMTSRVNAME     = 'LSNKHR'
,   @LOCALLOGIN     = NULL

EXEC SP_DROPSERVER
    @SERVER         = 'LSNKHR'
,   @DROPLOGINS     = 'droplogins'

 

3. 오라클 DB가 NLS_LANG가 UTF8로 되어 있으면 한글이 깨져서 나오는 경우 있다.

MSSQL서버의 레지스트리에

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\오라클Home\

"NLS_LANG"="AMERICAN_AMERICA.WE8DEC" 추가 한다.

MSSQL서버가 아닌 Management Studio를 실행한 PC에 설정할 필요는 없다.

 

4. 연결된 오라클 DB조회시 ? 와 같은 쓰레기 데이터로 인해 조회결과가 중단될 경우 아래 처리를 한다.

-- 설정
DBCC TRACEON(-1, 7307)
DBCC TRACESTATUS()

-- 해제
DBCC TRACEOFF(7307, -1)
DBCC TRACESTATUS()