我们的应用程序具有内置功能,可以更新它使用的数据库(从我们的服务器下载应用程序更新时触发。)
通常,更新包括表和数据转换,然后是一些现有存储过程和所有当前存储过程的创建。
所以我们从C#中做到以下几点:
使用相同的连接完成步骤2 -5。对于某些客户,它偶尔会在Step3或Step 4的中间出错。日志显示:
错误:数据库' MyDB'已经打开,一次只能有一个用户。
这很奇怪,因为当时我们已经处于单用户模式,因此没有其他用户能够连接到数据库,更不用说以某种方式将其置于单用户模式以进行自己的连接。
我们想知道某些内部SQL Server进程是否正在接管我们的单用户模式并阻止我们完成更新。
我们知道如果将AUTO_UPDATE_STATISTICS_ASYNC设置为ON,则可能会中断单用户模式,但我们已经验证它已关闭且客户端仍然出现这种情况。
CHECKPOINT操作可以中断吗?如果是这样,我们该怎么做,因为这是一个服务器范围的设置,所以我们不能修改它。