在SQL Server数据库中被踢出单用户模式。为什么?

时间:2014-04-09 13:04:56

标签: sql sql-server

我们的应用程序具有内置功能,可以更新它使用的数据库(从我们的服务器下载应用程序更新时触发。)

通常,更新包括表和数据转换,然后是一些现有存储过程和所有当前存储过程的创建。

所以我们从C#中做到以下几点:

  1. 创建连接
  2. 将数据库设置为单用户模式
  3. 运行升级脚本以升级表并转换数据
  4. 运行升级脚本以删除现有存储过程并添加新存储过程
  5. 将数据库设置为多用户模式
  6. 关闭连接
  7. 使用相同的连接完成步骤2 -5。对于某些客户,它偶尔会在Step3或Step 4的中间出错。日志显​​示:

    错误:数据库' MyDB'已经打开,一次只能有一个用户。

    这很奇怪,因为当时我们已经处于单用户模式,因此没有其他用户能够连接到数据库,更不用说以某种方式将其置于单用户模式以进行自己的连接。

    我们想知道某些内部SQL Server进程是否正在接管我们的单用户模式并阻止我们完成更新。

    我们知道如果将AUTO_UPDATE_STATISTICS_ASYNC设置为ON,则可能会中断单用户模式,但我们已经验证它已关闭且客户端仍然出现这种情况。

    CHECKPOINT操作可以中断吗?如果是这样,我们该怎么做,因为这是一个服务器范围的设置,所以我们不能修改它。

0 个答案:

没有答案