DB1과 DB2 등 2 개의 데이터베이스가 있습니다.
DB1에는 DB2의 데이터에 액세스하는 모든 저장 프로시 듀어가 들어 있습니다.
DB1은 동의어를 사용하여 DB2의 테이블에 액세스합니다.
(우리의 상황에서는 동의어 사용이 필요합니다.)SQL Server : Express Edition의 동의어에 대한 스냅 샷 트랜잭션 문제
이것은 SQL Server 2005 Developer Edition의 모든 상황에서 완벽하게 작동합니다. DB1에서 다음 코드를 실행
1 SQL Server를 다시 시작
2 :
set transaction isolation level snapshot
begin transaction
declare @sQuery varchar(max)
set @sQuery = 'Select * from synToSomeTableInDB2'
exec (@sQuery)
commit transaction
이 다음에 발생합니다 우리는 다음 작업을 수행 할 때
는 그러나 Express Edition을, 우리는 예외가 오류 :
Snapshot isolation transaction failed in database '...' because the database was not recovered when the current transaction was started. Retry the transaction after the database has recovered.
EXEC를 사용하지 않거나 Developer Edition에서 실행할 때 동일한 선택 쿼리가 정상적으로 통과됩니다.
일단 DB2에 연결되면 SQL Server Express Edition에서도 코드가 잘 실행되므로 1 단계에서 서버를 다시 시작하는 것이 중요합니다.
누구에게 아이디어가 있습니까? 일부 동적 쿼리에 EXEC를 사용할 수 있어야합니다. 우리는 이미 MSDN을 확인하고 Google을 검색했습니다 ... 도움을 주시면 대단히 감사하겠습니다.
--- 편집 : 3 월 10 일 09
아래의 Ed Harper와 논의한대로이 문제에 대한 버그 신고를 제출했습니다.
https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=422150
재시작은 이전에 DB2에 연결하지 않았는지 확인하기 위해서만 필요합니다. 이전에 DB2에 연결되지 않은 한, 경과 된 시간에 관계없이 오류가 발생합니다. – Marc
서버 로그를 확인했습니다 : 오류가 없습니다. "복구가 완료되었습니다"및 "DB1/DB2 시작 중"이라고 표시됩니다. 괜찮을 것 같습니다. – Marc
Express에서 버그와 같은 소리가납니다. 데이터베이스 서비스를 다시 시작한 후에 실패한 트랜잭션을 실행하여 해결할 수 있습니까? –