【问题标题】:SQL Server 2008 BACKUP with IMPLICIT_TRANSACTIONS ON开启 IMPLICIT_TRANSACTIONS 的 SQL Server 2008 备份
【发布时间】:2010-12-08 21:34:26
【问题描述】:

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

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

于是我做了一个实验:

  • 打开 Management Studio,转到 Options / Query Execution / SQL Server / ANSI 并勾选 SET IMPLICIT_TRANSACTIONS
  • 重新打开 Management Studio
  • 使用默认数据库为 master 的用户登录
  • 执行了 BACKUP,效果很好
  • 将数据库更改为其他内容
  • 执行了 BACKUP,但失败并显示一条消息

    消息 3021,第 16 级,状态 0,第 7 行 无法在事务中执行备份或恢复操作。 消息 3013,第 16 层,状态 1,第 7 行 BACKUP DATABASE 异常终止。

  • 改回master并不能消除错误信息

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

【问题讨论】:

    标签: sql-server-2008 ssms


    【解决方案1】:

    BACKUP can not be in a transaction

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

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

    根据经验(没有实际检查!)它将是 Intellisense 或对象资源管理器的 SELECT 或获取其他一些元数据。我还猜想 Intellisense 之类的东西不用于系统数据库(我关闭了该死的东西并使用了 3rd 方工具)所以它最初不会发生

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

    【讨论】:

    • 是的,我注意到在分析器中有很多选择来描述表,这表明事务将开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多