2009-10-02 9 views
0

트랜잭션 (격리 수준 스냅 샷) 내에서 현재 실행중인 장기 실행 저장 프로 시저 (약 30 분)가 있습니다.
다른 프로세스가 데이터에 액세스하지 못하도록 레코드를 잠그지 않도록 트랜잭션을 스냅 샷으로 설정했습니다.SQL Server 2005 트랜잭션

내가하려는 것은 상태 테이블에 쓰고 읽는 것입니다.하지만 우리는 트랜잭션에 있지만 상태 테이블에 쓰고 싶습니다. 트랜잭션. 필자는 다른 프로세스가 저장된 proc에 의해이 테이블에 대한 모든 업데이트를 읽을 수 있도록이 작업이 필요하며이 저장된 proc은 다른 프로세스가 작성한 삽입을 읽을 수도 있습니다.

트랜잭션 내에서 실행되는 전체 저장된 proc를 사용하는 것은 권장되지 않지만 다른 이유로이 작업이 완료되었으며 그 접근 방식을 고수해야합니다.

내 질문은 트랜잭션 내에서 쿼리를 실행하거나 실제로 트랜잭션에 참여하지 않은 저장된 proc을 호출 할 수 있습니까?

답변

0

아니요. 유일한 기회는 별도의 세션을 여는 것입니다. 다른 연결에서 다시 연결하는 CLR 프로 시저를 사용하십시오 (은 내부 컨텍스트 연결에서이 아님).

스냅 샷 격리는 읽기 전용입니다. 쓰기의 경우 스냅 숏 격리를 사용해야하거나 데이터베이스에 READ_COMMITTED_SNAPSHOT ON의 트랜잭션이 있어야합니다. 쓰기 대 쓰기 충돌에는 해결책이 없습니다.

0

장기 실행 쿼리와 트랜잭션의 데이터를 읽어야하는 쿼리 모두에서 "트랜잭션 격리 읽기가 실행되지 않음"을 설정하면 더티 데이터를 읽을 수 있어야합니다.

필자는 격리 수준 스냅 샷에서 어떻게 작동하는지 모르겠다. 익숙하지 않기 때문에.

0

나는 이론을 테스트해야 하겠지만 Remus가 아마 확인을 할 수있을 것이라고 생각한다. 트랜잭션 외부의 부수적 인 방법으로 조정을하고 싶다면 msdb.dbo.sp_start_job 'yourjob name 원하는 갱신 명령문을 수행하는 작업을 구성하면 작동합니다.

제대로 작동하지 않을 수도 있습니다. 에이전트 작업은 다른 계정에서 실행되며 연결/트랜잭션 외부에 있어야합니다.

CLR 스토어드 프로 시저를 작성하는 것보다 쉽습니다. 해킹입니다. 감사합니다.

A.이

(그것을 테스트 - 해킹 일)

0

SP가 무엇입니까? 30 분 동안 지속되는 하나의 트랜잭션은 연속적입니다. 대부분의 경우 실적이 좋지 않은 코드를 사용했을 가능성이 높습니다 (커서를 사용하지 않았거나 상관 기반 하위 쿼리 또는 행 기반 행 기반 세트 기반 처리 중 하나를 수행하지 않았습니까?) sp 자체는 많은 잠금 장치를 야기합니다.