多个查询传入的离线和在线执行问题

Offline and online execution problem with multiples queries incoming

我有一个 SQL 服务器服务和多个 Windows 服务在同一台服务器上做一些后台工作。

其中一个(我称之为 "A")有一个例程执行 "single_user/offline" 和 "online/multi_user" 到活动数据库以在午夜执行一些备份操作。另一个在该数据库上执行多个查询(我称之为 "B")。

问题如下:

1.- Windows 服务 "A" 执行 SET ONLINE.

2.- Windows 服务 "B" 执行随机 SELECT.

3.- Windows 服务 "A" 尝试执行 SET MULTI_USER。由于 Windows 服务 "B".

建立了一个活动连接,因此此执行被放弃

我已经尝试在 SqlCommand 的相同 CommandText 上执行 SET ONLINESET MULTI_USER,但这并不拒绝来自 Windows 服务 "B" 的传入查询,破坏我的进程并保持数据库锁定(因为 SINGLE_USER)。

如何在 Windows 服务 "A" 上同时发出 ONLINEMULTI_USER 命令来使 Windows 服务 "B" 被取消或等待过程结束? (Windows服务"B"被取消不是问题)

可能 sp_dettach_dbsp_attach_db 有用吗?

听起来服务 A 在将数据库置于单用户模式后正在关闭它的连接。这释放了服务 B 成为单个用户,此时服务 A 不能再更改模式,直到它可以重新获取单个连接,只要服务 B 或任何其他客户端,它就无法做到这一点就此而言,有它。

我能想到一些你可以在这里做的事情:

  1. 完成离线操作后,开始轮询,直到服务 A 可以再次成为单个用户
  2. 从服务 B 中找到连接的 SPID 并将其终止。

有关详细信息,请参阅此 link 上有关单用户模式的限制和限制部分。

感谢大家,但我重新分析了我从一开始就遇到的问题,并得出结论认为 "SET SINGLE_USER" 操作是不必要的,因为该过程不需要在该模式下进行操作,所以最后操作 "SET OFFLINE" 和 "SET ONLINE" 可以防止中间连接问题。