我有一个 SQL Server 2014 数据库,日志文件填满了磁盘。由于它是一个测试数据库,我们决定只删除整个数据库。我们将它脱机,但当我们尝试删除它时,我们收到一条消息,说它正在使用中,因此无法删除。
离线怎么能用呢?我怎样才能让它掉下来?(最好不要上网。)
我有一个 SQL Server 2014 数据库,日志文件填满了磁盘。由于它是一个测试数据库,我们决定只删除整个数据库。我们将它脱机,但当我们尝试删除它时,我们收到一条消息,说它正在使用中,因此无法删除。
离线怎么能用呢?我怎样才能让它掉下来?(最好不要上网。)
问题在于将数据库设置为 OFFLINE 的人也将其设置为 SINGLE_USER,并且他的会话仍然打开并“使用”数据库,即使它处于 OFFLINE 状态。当他关闭该会话时,我们能够删除数据库。
感谢评论中的每个人的帮助。
您看到的问题实际上是因为另一个 spid 在 dbcat(数据库目录)上持有“SHARED_TRANSACTION_WORKSPACE”锁。在您的情况下,您可以通过运行 this
SELECT DB_NAME(resource_database_id) AS DbcatName, * FROM sys.dm_tran_locks;
或 this看到该锁EXEC sp_lock NULL;
。以下是我学到的一些东西(在 Sql2019 中仍然如此):
根据我的经验,如果 dbcat 在 spid 使它脱机时处于单用户模式,则它在该 dbcat 上的共享锁不会被释放,直到它要么
所以这是我现在遵循的模式: