2012-09-12 3 views
0

freetds를 사용하는 pymssql을 사용하여 SQL Server에 연결하는 개발자가 있습니다. 그의 스크립트는 MySQL DB의 값을 기반으로 SQL 삽입 쿼리를 동적으로 생성합니다.pymssql 롤백에서 SQL로 트랜잭션이 발생합니다.

문은 올바르게 구문 분석되고 SQL 프로파일 러에서 해당 명령문을 볼 때 적절한 begin transaction/commit를가집니다. 유일한 '사용자 오류 메시지'는 '변경된 데이터베이스 컨텍스트 ...'이며 SQL에서 USE를 실행할 때마다 나타납니다. 배치가 완료되면 트랜잭션 로그 이벤트 '롤백'이 발생하고 삽입 된 모든 레코드가 제거됩니다.

'db 컨텍스트 변경'이 영향을받지 않기 때문에 XACT_ABORT_OFF를 사용하고 있지 않습니다.

누구나 아이디어 나 경험이 있습니까? 감사!

[편집] : 프로파일 러에서 복사 된 코드는 SSMS에서 동일한 사용자를 사용하여 정상적으로 작동하며 트리거가 없습니다.

[2 편집] : SQL 프로파일 내부 내가 eventsubtype에서 '롤백'와 'TRANSACTIONLOG'항목을 참조는, 그러나 TM이되지 않습니다 : 롤백 트란

+1

테이블에 롤백을 일으키는 트리거가 있는지 확인 했습니까? 프로파일 러에서 SSMS의 쿼리를 직접 실행하고 어떤 일이 일어 났는지 보셨습니까? – HLGEM

+0

정답 : 테이블에 트리거가 없으며 SSMS에 코드를 붙여 넣으면 동일한 사용자 이름을 사용하여 장애없이 작동합니다. 의견을 보내 주셔서 감사합니다! –

답변

0

그래서 자동 커밋 설정을 많이 검색하고 트리플을 확인한 후 2 개의 변수가 매우 긴밀하게 이름 지정되었으며 잘못된 커밋을하고 있다고 생각했습니다. mysql과 pymysql 모듈이 있지만이 경우에는 pymssql을 사용하고 있지만 대신 pymysql에서 입력했습니다. 댓글을 준 모든 분들께 감사드립니다.

2

아마도 연결이 커밋되거나 종료되지 않는 바르게. freetds 문서를보고 올바른 사용 패턴을 사용하고 있는지 확인하십시오. 또한 연결에서 자동 커밋 모드를 활성화 할 수 있는지 여부를 확인할 수도 있습니다.

+0

자동 커밋, 그게 내가 찾고 있던거야. 고마워, 나는 지금 그것에 대해 살펴보고 모두에게 알린다. 누군가 다른 아이디어가 있다면 알려주세요. 감사! –