错误:“无法在事务内进行备份或恢复操作。”在使用pyodbc和freetds备份MSSQL数据库时出现
我现在在用pyodbc和freetds从Linux主机备份MSSQL数据库时遇到了一些问题。我的环境版本如下:
Python 2.7.6,pyodbc 3.0.7,freetds 0.91-2,Centos 6.5
我运行的代码如下(名字和密码等信息已去掉):
import pyodbc
conn = pyodbc.connect('DRIVER=FreeTDS;SERVER=<servername>;PORT=<port>;DATABASE=<database>;UID=<user>;PWD=<password>;TDS_Version=8.0;Autocommit=True;')
sql = "exec dbo.backupStashDB"
cursor=conn.cursor().execute(sql)
while cursor.nextset():
pass
conn.close()
我收到的错误信息是:
exec dbo.backupnameDB
Traceback (most recent call last):
File "soph_stash_db_bkp.py", line 6, in <module>
conn.execute(sql)
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server]Cannot perform a backup or restore operation within a transaction. (3021) (SQLExecDirectW)')
无论是手动运行命令还是通过存储过程运行这段代码,我都得到了相同的错误信息。
我在网上查了一下,发现有人提到添加'Autocommit=True'可以解决这个问题,但这似乎没有任何效果。
有没有人能分享一些有用的见解呢?
提前感谢,Mike
1 个回答
4
autocommit
应该作为一个关键字参数传递给 pyodbc.connect 函数,而不是放在 ODBC 连接字符串里。可以查看以下部分:
"有些关键字是 pyodbc 使用的,并不会传递给 odbc 驱动程序..."
请将你的代码修改为以下内容:
...
conn = pyodbc.connect('DRIVER=FreeTDS;SERVER=<servername>;PORT=<port>;DATABASE=<database>;UID=<user>;PWD=<password>;TDS_Version=8.0;',
autocommit=True)
...