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()