SQL Server db에서 연결된 서버 인 db2 데이터베이스를 업데이트하려고 할 때이 오류가 발생합니다.
ERROR : root :( '42000', '[42000] [Microsoft] [ODBC SQL Server Driver] [SQL Server] 연결된 서버 "iSeries"에 대한 OLE DB 공급자 "IBMDA400"이 지원하지 않기 때문에 요청한 작업을 수행 할 수 없습니다. 필수 트랜잭션 인터페이스. (7390) (SQLExecDirectW) ')
pyodbc를 통해 SQL 서버에 연결 중이며 문제없이 SQL 스크립트를 실행할 수 있습니다. 다음은 오류가 발생한 SQL입니다.
sql3 = " exec ('UPDATE SVCEN2DEV.SRVMAST SET SVRMVD = ? WHERE svtype != ''*DCS-'' AND svcid = ? and svacct = ? ') AT [iSeries]"
db.execute(sql3, (row[2],srvid,row[0]))
db.commit()
그리고 여기에 pyodbc를 사용하는 연결 문자열이 있습니다.
conn = pyodbc.connect("DRIVER={SQL Server};SERVER="+ Config_Main.dbServer +";DATABASE="+ Config_Main.encludeName +";UID="+ Config_Main.encludeUser +";PWD=" + Config_Main.encludePass)
db = conn.cursor()
또한이 쿼리는 SSMS에서 잘 실행됩니다. 나는 또한 openquery 메서드를 시도했지만 운이 없었습니다. 어떤 아이디어?
Python의 DB API 2.0 은 기본적으로 연결이 자동 커밋 "off"로 열리도록 지정합니다. 이로 인해 모든 데이터베이스 작업이 Python 코드에서 명시 적으로 커밋 (또는 롤백)되어야하는 트랜잭션에서 수행됩니다.
pyodbc 연결 autocommit = False
(기본값)이 SQL Server에 UPDATE를 보내면 해당 UPDATE는 SQL Server에서 관리하는 로컬 트랜잭션에 포함됩니다. SQL Server는 대상 테이블이 연결된 서버에 있음을 확인하면 트랜잭션을 MSDTC에서 관리하는 분산 트랜잭션으로 승격 시키려고합니다 . 연결된 서버를 관리하는 데 사용되는 연결 기술이 분산 트랜잭션을 지원하지 않으면 작업이 실패합니다.
이 문제는 pyodbc 연결에 자동 커밋이 활성화되어 있는지 확인하여 피할 수 있습니다.
cnxn = pyodbc.connect(conn_str, autocommit=True)
또는
cnxn = pyodbc.connect(conn_str)
cnxn.autocommit = True
암시 적 트랜잭션에 래핑되지 않고 각 SQL 문을 개별적으로 보냅니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다