MS-SQL이랑 Oracle로 이것 저것 해보다가 질문이 몇가지 생겨서
써봅니다.
당연히 둘을 연동하는 얘기인데
일단 Oracle에서 MS-SQL을 보려면 GateWay라는 게 필요하다는건
알았는데 어떻게 설치해서
어떻게 사용하는건지 자료를 찾기가 힘들더군요...^^;;;
설명을 해주실 수 있으면 좋고 관련 자료가 있으면 알려주시면
감사하겠습니다.
그래서 MS-SQL에서 Oracle로 연결된 서버를 이용해서 이것 저것
해보았습니다.
우선 MSDAORA 로 연결해서 질의를 만들어 보았습니다.
select * from oracle1..test.testtable
insert into oracle1..test.testtable values(1, 'test')
같은 질의 들이 잘 되더군요.
그런데 문제는 begin tran, rollback, commit 등을 사용하여 만든
질의에 대해서는
서버: 메시지 7391, 수준 16, 상태 1, 줄 3
OLE/DB 공급자 'MSDAORA'이(가) 분산 트랜잭션을 시작할 수 없으므로
작업을 수행할 수 없습니다.
OLE DB 오류 추적 [OLE/DB Provider 'MSDAORA'
ITransactionJoin::JoinTransaction returned 0x8004d01b].
라는 메시지가 나왔습니다. 분산 트랜잭션이 안된다는 걸 보면
Oracle에서 MSDTC인가 하는 것과 비슷한 것이 있어서
그걸 설치 해야 한다거나 아니면 MSDAORA로는 분산 트랜잭션이
안된다거나 하는 걸꺼라고
추측하고 있는데 어떤 것인지 모르겠군요.
그런게 아니면 분산 트랜잭션을 수행하려면 어떻게 해야 하는지 알려
주시면 감사하겠습니다.
다음으로 OraOLEDB.Oracle로 연결된 서버를 만들어서 질의를
해보았습니다.
위와 같인 그냥 select를 수행해보았는데
서버: 메시지 7356, 수준 16, 상태 1, 줄 1
OLE DB 공급자 'OraOLEDB.Oracle.1'이(가) 열에 대해 일관성 없는
메타데이터를 제공했습니다. 런타임 시 메타데이
터 정보가 변경되었습니다.
OLE DB 오류 추적 [Non-interface error: Column 'NAME' (compile-time
ordinal 2) of object test.testtable' was
reported to have a DBTYPE of 129 at compile time and 130 at run
time].
같은 메시지가 출력되었습니다.
그래서
select * from openquery(oracle, 'select * from
"TEST"."TABLE"')
와 같이 질의를 던졌더니.
서버: 메시지 7320, 수준 16, 상태 2, 줄 1
OLE DB 공급자 'OraOLEDB.Oracle.1'에 대해 쿼리를 실행할 수
없습니다.
OLE DB 오류 추적 [OLE/DB Provider 'OraOLEDB.Oracle.1'
ICommandText::Execute returned 0x80040155].
라는 메시지가 나오는 군요.
insert, transaction은 어떻게 해야 하는지도 몰라서 해보지도
못했구염..;;;
프로바이더가 이상하게 설치 되었거나 하지는 않았을거 같은게
C++에서
dbSource.Open(_T("OraOLEDB.Oracle.1"), _T("svr"), _T("id"),
_T("pass"));
같은 식으로 접속해서 위의 select를 하니 잘 되는군요...;;;
그래서 이것 저것 적었는데 알고 싶은 걸 정리하면
gateway의 설치 방법 및 사용법
ms-sql의 연결된 서버 MSDAORA 사용시 분산 트랜잭션 사용법
ms-sql의 연결된 서버 OraOLEDB.Oracle.1 사용시 질의 방법 및 분산
트랜잭션 사용법
정도 되겠습니다.
즐거운 하루 되세요
|