'linked server'에 해당되는 글 6

  1. 2010.01.28 SQL Server 연결된 서버 설정
  2. 2010.01.27 SQL Server 연결된 서버 설정 - 오라클
  3. 2010.01.17 [DBNETLIB][ConnectionOpen (Invalid Instance()).]잘못된 연결입니다. 1
  4. 2009.12.29 DTC 확인 쿼리
  5. 2009.12.02 서버 'xxxerp'이(가) RPC에 대해 구성되지 않았습니다.
  6. 2009.07.09 지정한 트랜잭션 코디네이터에 새 트랜잭션을 기록할 수 없습니다.

SQL Server 연결된 서버 설정

여러가지 방법으로 가능함.

1.
연결된 서버명 : IP 주소
공급자 : Microsoft OLE DB Provider for SQL Server

2.
연결된 서버명 : HOST명
공급자 : Microsoft OLE DB Provider for SQL Server

3.
공급자 : SQL Native Client
제품 이름 : 호스트명? 연결된 서버명과 동일
데이터 원본 : IP 주소

4.
공급자 : Microsoft OLE DB Provider for SQL Server
데이터 원본 : IP 주소
카탈로그 : 데이터베이스명

5. SQL Server 2005 에서 MySQL 연결
공급자 : Microsoft OLE DB Provider for ODBC Drivers
제품 이름 : MySQL ODBC 5.1 Driver
데이터 원본 : ODBC 등록한 이름

SQL Server 연결된 서버 설정 - 오라클

SQL Server 2005 Express와 Oracle 10g Express간의 연결된 서버 설정

- 공급자를 Microsoft OLE DB Provider for Oracle 로 지정
제품 이름 : Oracle
데이터 원본 : 10.20.30.40:1521

- 공급자를 Oracle Provider for OLE DB 로 지정
연결이 안됨.
TNS로 설정하거나 추가로 필요한 모듈을 설치해야 된다고 함.(해보지는 않았음)
[todo] 129에 받아둔 거 설치해서 해보자.

L사 SQL Server 2005 와 다른 주소의 오라클 연결
공급자를 Microsoft OLE DB Provider for Oracle 로 지정
제품 이름 : Oracle
데이터 원본 : ERP_DEV (tnsnames.ora에 설정된 이름임)

* 대소문자 주의할 것.

[DBNETLIB][ConnectionOpen (Invalid Instance()).]잘못된 연결입니다.

ERP에서 우리 시스템의 데이터베이스에 연결된 서버로 붙이려고 하는데 한참동안 쿼리가 실행되더니 접속이 되지 않는다.

암호도 바꿔보고
권한도 아예 db_owner로 줬는데도 그러네.

그런데 쿼리를 실행한 결과를 보니 요상한 에러 메세지가 나왔다.
[DBNETLIB][ConnectionOpen (Invalid Instance()).]잘못된 연결입니다.
처음부터 에러메세지를 확인했어야 한다.
쿼리가 너무 오래 걸린다고 에러메세지도 확인하지 않고 부산을 떨었다.

검색해보면 포트번호를 추가하라고 되어 있는데 어디서 해야 하나?
데이터 원본에 아이피를 넣었는데 그 뒤에 ,를 넣고 1433 포트번호를 추가했다.
된다.

헉.
오늘의 교훈 : 에러 메세지부터 확인하라.

DTC 확인 쿼리

어디선가 본 DTC 통신 확인 쿼리
되는 경우 1?

서버 'xxxerp'이(가) RPC에 대해 구성되지 않았습니다.

원격 프로시저가 호출되지 않는 경우 RPC 설정을 바꾼다.


True 로 변경한다.
RPC, RPC 내보내기 모두 해야 함.[각주:1]
  1. 2010-01-14 추가 : 되는듯. 2010-01-17 추가 : 함. [본문으로]

지정한 트랜잭션 코디네이터에 새 트랜잭션을 기록할 수 없습니다.

- 갑자기 아래와 같은 에러가 발생함.
메시지 7391, 수준 16, 상태 1, 줄 1
OLE/DB 공급자 'SQLOLEDB'이(가) 분산 트랜잭션을 시작할 수 없으므로 작업을 수행할 수 없습니다.
OLE DB 오류 추적 [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].
[OLE/DB provider returned message: 지정한 트랜잭션 코디네이터에 새 트랜잭션을 기록할 수 없습니다. ]

- 사례1
원격지에 있는 SQL Server에 Linked Server를 통해서 연결한뒤 데이터를 가져올때 발생
원격지 DB에 있는 뷰에서 다른 원격지의 테이블을 참조하는데 권한이 없어서 발생한 거 같다.

- 사례2
새로운 서버가 들어온 뒤 이런 에러가 발생함.
각 서버(원격지 서버, 현재 접속한 서버)의 hosts파일에 호스트명을 등록했다.
2012-04-16 서버 IP변경후 발생함. 원격지 서버의 hosts파일에 해당 서버의 IP를 변경함.

- 사례3
MSDTC 보안 설정을 한다.(네트워크 DTC 액세스, 트랜잭션 관리자 통신 인/아웃바운드 허용(둘중 하나 또는 둘다), 인증 필요 없음)

Windows 2000

Windows 2008

- 참고
분산 트랜잭션이 작동하지 않을 때
MS-DTC Setting on Windows 2003
분산트랜잭션, MSDTS 문제 이렇게 해결해 보자.
분산 트랜잭션 설정

DTCPing.exe 활용하여 연결성 체크하기
DTCPing.exe
DTCTester 도구를 사용하는 방법

About RPC... (1)
About RPC... (2)
About RPC... (3)