반응형

SQL서버에서 링크드 서버와의 분산 트랜잭션을 처리하기 위한 과정을 정리 합니다.

양쪽 서버에서 제대로 설정이 되어 있지 않은 경우 아래와 같은 오류가 발생 한다.

 

연결된 서버 "XXXX"의 OLE DB 공급자 "SQLNCLI10"이(가) 분산 트랜잭션을 시작할 수 없으므로 요청한 작업을 수행할 수 없습니다.

 

 

1. 만약 Windows서버가 2003이면 프로그램추가삭제 > Windows구성요소 추가/제거 에서 응용프로그램서버(Application Server)를 선택하고  '자세히' 버튼을 누른 후, 네트워크 DTC 액세스 사용(Enable network DTC access)을 설치한다.

 

 

시작메뉴 > 실행에서 regedit 를 입력하여 레지스트리 편집기에서
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSTDC 에서 TurnOffRpcSecurity 키의 값을 1로 해 준다.

 

서비스 에서 'Distributed Transaction Coordinator'를 다시 시작 한다.

 

2. 만약 Windows서버가 2008 이상 이면 다음과 같이 한다.

    ① 시작메뉴 > 실행에서 dcomcnfg를 입력한 다음 확인
    ② 구성 요소 서비스 > 컴퓨터 > 내 컴퓨터 > Distributed Transaction Coordinator > 로컬 DTC 선택
    ③ 로컬 DTC를 마우스 오른쪽 단추로 클릭하고 속성 선택
    ④ 로컬 DTC 속성 창이 나타나면 보안 탭을 클릭 후 다음과 같이 설정

 

 

3. 만약 Windows 방화벽을 사용하고 있다면 Distributed Transaction Coordinator 를 예외로 두어야 한다.

 

4. SQL 상에서는 반드시  SET XACT_ABORT ON 으로 세팅을 하고 begin tran 대신 begin DISTRIBUTED tran 을 사용 해야 한다.

 

5. 만약 상대 DB가 Oracle 인 경우는 위과 같이 해도 안 될 수 있는데 , 이때는 레지스트리에서 다음과 같이 수정 해 준다.

 

레지스트리 경로는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI 이다.
기본적으로 OracleSqlLib와 OracleXaLib가 각각 SQLLib80.dll, xa80.dll로 되어 있는데 이를 설치된 Oracle의 버전에 따라
변경 해 준다.

 

(변경 전)

 

(예: Oracle 10인 경우)           

 

이 글이 도움이 되셨으면 댓글을 남겨 주세요!

 

반응형
반응형

아래와 같이 SQL서버에서 동적쿼리에 대한 파라미터를 쉽게 전달 할 수 있는 방법이 있다.


이것을 몰랐을 때는 일일이 문자열을 조합, 편집 하느라 매우 애를 먹었는데 간결하게 사용이 가능하다.


DECLARE
    @sql  nvarchar(max),
    @params  nvarchar(max)


SET @Sql = 'select * from InvoiceMaster
            where companyseq = @p_companyseq and invoicedate like @p_invoicedate + ''%'''
 

SET @params = '@p_companyseq int, 
            @p_invoicedate nchar(8)'
 

EXECUTE sp_executesql @sql, 
                      @params, 
                      @p_companyseq = 1,
                      @p_invoicedate = '20140707'


반응형
반응형

RANK() 함수는 순위를 매기는 함수이다.

구문은 다음과 같다.


RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )


테스트를 위해서 테이블을 생성하고 데이터를 넣는다.

create table rank_test 
(aid int,
 aname varchar(100),
 amount int)

insert into rank_test
select 1, 'aaaa', 20
union all
select 2, 'bbbb', 10
union all
select 3, 'bbbb', 10
union all
select 4, 'bbbb', 30
union all
select 5, 'cccc', 60
union all
select 6, 'cccc', 50
union all
select 7, 'dddd', 40

PARTITION BY 구문 없이 사용하면 ORDER BY 에 지정된 컬럼의 순위를 매긴다. 이때 동점의 순위는 동일하게 부여되며 그 만큼 다음 순위는 건너 띄게 된다.

select rank() over (order by amount) r, aname, amount
from rank_test


PARTITION BY 구문이 포함될 경우 PARTITION BY 에 지정된 컬럼에 대하여 그룹핑을 해서 해당 그룹 내에서 순위를 부여 하게 된다.

select rank() over (partition by aname order by amount) r, aname, amount
from rank_test


반응형
반응형

Windows 7 64bit 에 MySQL 32bit ODBC 설치 후 제어판에서 ODBC 데이터 원본관리자를 실행한 후

새 데이터 원본 만들기를 해봐도 설치된 드라이버가 보이지 않는다.



물론 64 bit ODBC 드라이버를 설치하면 나타나는데, 이를 사용하는 응용 프로그램에서 호환성 문제로 

32 bit만을 지원하는 경우 문제가 된다.


이때는 C:\Windows\SysWOW64\odbcad32.exe 를 실행 시키면 32bit ODBC를 이용해 데이터소스를 만들 수 있다.




반응형

+ Recent posts