관리 메뉴

I LOVE EJ

MS-SQL <--> ORACLE 인터페이싱 (링크드 서버) 본문

Data Base/MsSql 2000

MS-SQL <--> ORACLE 인터페이싱 (링크드 서버)

BeOne 2008. 12. 23. 16:31
링크드 서버 등록
--@Server='서버명 (IP 또는 호스트네임)'
--@srvproduct='오라클서버명'
--@provider='서비스공급자 (오라클 : MSDAORA)'
--@datasrc='TNS 명'
declare @sql varchar(1000)
set @sql = ' exec sp_addlinkedserver
@Server=''192.168.1.4'',
@srvproduct=''ORACLE2'',
@provider=''MSDAORA'',
@datasrc=''OCS'''

exec(@sql)

링크드 서버 login 매칭
exec sp_addlinkedsrvlogin
@rmtsrvname='192.168.1.4',
@useself=false,
@locallogin=null,
@rmtuser='system',
@rmtpassword='asdf123'



TNS (LISTENER) 설정

-- 시작 (프로그램)--> Oracle - OraHome92 --> Configuration and Migration Tools
   --> Net Configuration Assistant

-- (리스너 구성)
-- 리스너구성 --> 추가 --> 리스너명 입력 --> TCP --> 표준포트번호(1521)사용
   --> 다른 리스너를 구성하시겠습니까(아니오) --> 완료

-- (로컬네트 서비스 이름구성)
-- 로컬네트 서비스 이름구성 --> 추가 --> Oracle8i 이상 데이타베이스 또는 서비스
   --> 서비스이름입력 (일반적으로 DB명)
-- TCP --> 호스트이름 또는 IP 입력(포트번호 기본) --> 접속테스트수행(로그인매칭) --> 완료


링크드 서버로의 쿼리
select * from openquery([192.168.1.4], 'select * from all_users')
select * from openquery(IRON, 'select * from dba_role_privs')

MS-SQL (tb_physician2) 에 테이블 복사 ---> ORACLE 4자처리 : 대소문자 구분주의 (속도저하)
insert into tb_physician2
select * from [192.168.1.4]..SYSTEM.TB_PHYSICIAN

ORACLE 에 MS-SQL 소속 테이블 복사
insert into [192.168.1.4]..SYSTEM.TB_PHYSICIAN
select * from tb_physician2

MS-SQL (tb_physician2) 에 테이블 복사 ---> openquery 이용
   (속도향상됨 : where 절을 이용할 경우 더욱 향상됨)

insert into tb_physician2
select * from openquery([192.168.1.4], 'select * from tb_physician')

ORACLE -  INSERT
insert openquery([192.168.1.4], 'select * from tb_physician')
values ('OG', '산부인과', 'OG03', '김수찬', '20040901', '29991231', 'Y')

ORACLE - UPDATE
update openquery(IRON, 'select drcd from tb_physician where drcd=''OG01'' ')
set drcd='OG02'

ORACLE - DELETE
delete openquery([192.168.1.4], 'select * from tb_physician')

------------------------------------------------------------------------------------------

LINKED SERVER로 이기종 연결 후 저장프로시저 생성오류가 날 경우

CREATE PROC 구문전에 아래 구문을 먼저 적는다.

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON

GO

CREATE PROC SP_XXX_XXXX
AS
......
......
......

위 구문이 없이 프로시저를 생성하려 하면 다음과 같은 에러메세지가 뜬다.

------------------------------------------------------------------------------------------
오류 7405: 유형이 다른 쿼리를 사용하려면 연결에 대해  ANSI_NULLS 및 ANSI_WARNINGS 옵션을
설정해야 합니다. 이렇게 하면 일관된 방식으로 쿼리를 사용할 수 있습니다. 이 옵션을 설정한 다음
쿼리를 다시 실행하십시오
-------------------------------------------------------------------------------------------


오라클과 MS-SQL 연결 또는 SQL-PLUS 에서 한글이 깨지는 경우

ORACLE 과 NT 서버의 Characterset 을 일치시킨다.

1. NT : regedit --> hkey_local_machine --> software --> oracle --> nls_lang 에서 확인

2. ORACLE : props$ 테이블의 필드를 확인 NLS 관련 세필드의 조합
    - AMERICAN_AMERICA.US7ASCII 형식
    - KOREAN_KOREA.KO16KSC5601 형식

3. 확인 되었으면 두 서버의 Characterset 을 일치시키면 됨
    - NT 의 regedit 에서 찾기를 눌러 ORACLE 소속 NLS_LANG 문자열값을 바꿔준다.
    - 다음찾기를 눌러 계속 바꿔준다 (총 3개)