如何在自动提交模式下备份数据库关闭

How to backup database in autocommit mode off

我使用 ODBC 连接来备份数据库。我的代码是这样的:

UPDATE [ATIDGEN] SET [LASTID] = '25' WHERE [TABLEID] = 'ATLOGIN';
//success
::SQLEndTran(SQL_HANDLE_DBC, m_hdbc, SQL_COMMIT);
//success
BACKUP DATABASE [ArazDB2] TO DISK = 'D:\Amin88\Total\BKUP-13950621.BAK' WITH INIT,NOSKIP
//state 42000, Cannot perform a backup or restore operation within a transaction.

如果我删除上面的 UPDATE 命令,备份 returns SQL_SUCCESS_WITH_INFO 和 sql-server 日志报告如下: //BACKUP 未能完成命令 BACKUP DATABASE ArazDB2。检查备份应用程序日志以获取详细消息,但备份文件已创建!。 1- 更新后,为什么 sql-server 在交易中?我明确调用了 SQLEndTran。 2-没有更新,为什么sql-服务器日志报告备份失败,但是备份文件已经创建? 谁能帮帮我?

好像有生活交易

使用 sql 脚本关闭与数据库的所有现有连接:

   alter database mydb  set single_user with rollback immediate

备份结束时,运行脚本:

   ALTER DATABASE mydb  SET MULTI_USER 

更新

SQL 服务器在任何数据定义语言 (DDL) 语句前后发出隐式 COMMIT。

BACKUP 命令被视为 DDL,需要隐式提交。

由于数据库关闭了autocommit,备份前开启autocommit,备份后关闭。

conn.autocommit = true
BACKUP DATABASE [ArazDB2] TO DISK = 'D:\Amin88\Total\BKUP-13950621.BAK' WITH INIT,NOSKIP
conn.autocommit = false