我写过一些代码来升级SQL Server数据库。在我升级数据库,我获得通过的排它锁:尝试之前的测试专用锁
ALTER DATABASE Test SET SINGLE_USER WITH NO_WAIT
不过,我想测试数据库,看看是否独占锁是可能之前,我运行上面的代码。测试不一定是100%完美,我想避免尝试获得排他锁时发生超时的可能性。
为此,我写了下面的代码:
SELECT
*
FROM
sys.db_tran_locks
WHERE
resource_database_id = DB_ID('Test') AND
request_session_id <> @@SPID
我假设,如果有1个或多个返回行,则数据库必须是在使用中。这是真的?还是不是那么简单?
UPDATE以@ GBN的意见考虑在内,我已经决定要强制使用下面的语句现有连接的回滚:
ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE
运行此代码之前,我给用户一个机会退出。但是,我希望用户能够看到数据库的活动连接列表 - 因此他们可以做出明智的决定。这导致我回到这个问题上。
在这种情况下,我想要做的是确定我是否可以将数据库减少到一个连接。有没有办法查询当前的连接集? – Mitkins 2009-04-13 22:51:47