반응형

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인 경우)           

 

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

 

반응형
반응형

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


반응형
반응형

SQL서버에서 기존의 PK를 다른 컬럼 구성으로 변경 하려면 다음과 같이 한다.

-- 기존 PK명 확인

sp_help 테이블명

--기존 PK 삭제

ALTER TABLE 테이블명

DROP CONSTRAINT 기존_PK명

--새로운 PK 정의

ALTER TABLE 테이블명

ADD CONSTRAINT 새_PK명 PRIMARY KEY [NONCLUSTERED](컬럼1, 컬럼2, ...)

 

좀 더 자세한 내용을 원하시면 다음 포스팅을 참고 하세요.

[SQL서버] PK(Primary Key) 변경 하기(상세)

 

반응형
반응형

특정 문자열에서 최초로 시작되는 한글부분 이하 전체를 가져 오는 방법 입니다.





반응형

+ Recent posts