使用IMPLICIT_TRANSACTIONS的SQL Server 2008 BACKUP

时间:2010-12-08 10:13:10

标签: sql-server-2008 ssms

这不是解决方案本身的问题,我试图理解Management Studio中一个非常奇怪的行为。

我完全理解在事务下不能执行BACKUP和RESTORE数据库以及SET IMPLICIT_TRANSACTIONS ON的含义是什么。

所以我做了一个实验:

  • 打开Management Studio,转到选项/查询执行/ SQL Server / ANSI并勾选SET IMPLICIT_TRANSACTIONS
  • 重新打开Management Studio
  • 使用默认数据库为master
  • 的用户登录
  • 执行了BACKUP,这很好用
  • 将数据库更改为其他内容
  • 执行了BACKUP并且失败并显示消息

    Msg 3021,Level 16,State 0,Line 7 无法在事务中执行备份或还原操作。 Msg 3013,Level 16,State 1,Line 7 BACKUP DATABASE异常终止。

  • 更改回master不会消除错误消息

我的问题是 - 为什么它允许在连接后立即执行BACKUP并在更改数据库后失败?

1 个答案:

答案 0 :(得分:2)

BACKUP can not be in a transaction

  

在显式或隐式事务中不允许使用BACKUP语句。

当您从master更改数据库时,您将发出SET IMPLICIT_TRANSACTIONS ON中所述的命令之一(使用SQL Profiler查看)并创建事务。

根据经验(没有实际检查!)它将是一个用于Intellisense或对象资源管理器的SELECT或获取一些其他MetaData。我也猜测像Intellisense这样的东西不用于系统数据库(我把该死的东西关掉并使用第三方工具)所以最初不会发生这种情况

由于您仍处于交易中而发生后续错误