Sql server 如何删除数据库,错误5030数据库可以';不能上锁
我正在尝试删除SQL Server 2005中的现有数据库。我的第一次尝试产生了以下错误: 5030:无法以独占方式访问数据库 锁定以执行该操作 我已经终止了所有访问数据库的进程。我还删除了它以前参与的复制订阅 除了SQL Server进程和复制之外,还有什么东西可以锁定它呢Sql server 如何删除数据库,错误5030数据库可以';不能上锁,sql-server,Sql Server,我正在尝试删除SQL Server 2005中的现有数据库。我的第一次尝试产生了以下错误: 5030:无法以独占方式访问数据库 锁定以执行该操作 我已经终止了所有访问数据库的进程。我还删除了它以前参与的复制订阅 除了SQL Server进程和复制之外,还有什么东西可以锁定它呢 更新:我重新启动了服务器,并修复了它。我试图避免这种情况,因为这是一个生产服务器,但是嘿,你能做什么呢?我不想这么说,但一个快速的解决方案是重新启动系统,确保sql server服务没有启动,然后你应该能够删除 此外,如果
更新:我重新启动了服务器,并修复了它。我试图避免这种情况,因为这是一个生产服务器,但是嘿,你能做什么呢?我不想这么说,但一个快速的解决方案是重新启动系统,确保sql server服务没有启动,然后你应该能够删除
此外,如果您的数据库连接到web ap,IIS是否停止?其他人不应使用该数据库,包括您自己。在management studio中,转到management->Activity Monitor(右键单击)->查看进程。这将为您提供运行的所有内容的完整列表,您可以按数据库对列表进行排序,以查看仍然连接的内容,还可以终止任何连接。很容易以孤立连接结束,这将阻止您获得所需的独占访问。您不知道是否有人让事务处于未完成回滚状态(或未完成)?也可以检查锁列表。一个生产服务器,其中有如此多的连接使用数据库,但您想删除它吗?:) 尽管如此,如何将所有人从数据库中剔除:
USE [dbname];
ALTER DATABASE [dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
USE [master];
DROP DATABASE [dbname];
然后删除数据库:
USE [dbname];
ALTER DATABASE [dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
USE [master];
DROP DATABASE [dbname];
在
使用[master]之间仍然有一个很小的机会窗口
和删除数据库…
,其他一些连接可以获取数据库上的1个允许的锁,但通常不值得解决此问题。此错误通常发生在数据库处于多用户模式时,其中用户访问数据库或某些对象引用数据库。
首先,应将数据库设置为单用户模式:
ALTER DATABASE dbName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
现在我们将尝试删除数据库
delete DATABASE ...
最后将数据库设置为多用户模式
ALTER DATABASE dbName
SET MULTI_USER WITH ROLLBACK IMMEDIATE
为什么要将已删除的DB转换为多用户模式
ALTER DATABASE dbName SET MULTI_USER WITH ROLLBACK IMMEDIATE
要避免此错误,请在主数据库中使用下面的T-SQL脚本。确保为运行ALTER database命令的每个数据库运行此命令(并修改@dbname) “无法以独占方式锁定数据库以执行 操作“ 如果Windows已建立到数据库的JDBC连接,则此“连接杀手”脚本将起作用。但是这个脚本无法消除Linux服务(例如JBoss)的JDBC连接。因此,如果不手动停止JBoss,仍然会出现该错误。我没有尝试过其他协议,但如果您在构建新系统时发现更多信息,请发表评论
USE master;
DECLARE @dbname sysname
Set @dbname = 'DATABASE_NAME_HERE-PROD'
Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
Execute ('Kill ' + @spid)
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname) and spid > @spid
End
是的,我都做了。没有进程访问它,它仍然无法锁定它。是否需要将数据库设置为单用户模式?即使如此,如果您在活动监视器中看不到它,我倾向于同意Sql Server重新启动将解决此问题。没有任何东西像IIS一样访问此数据库,当我查看进程列表时,我根本看不到任何使用它的东西。关于重新启动服务器,您可能是对的。这是一个带有其他数据库的生产系统,所以我不喜欢这样做,但我可能不得不这样做。我认为这是一个生产箱,所以我不想建议重新启动,但这是关闭所有活动连接的可靠方法。如果你能把所有运行在盒子上的进程都贴出来,你可能会跳出来成为罪魁祸首,没有人是。我只是想把它删除。目前列表中没有任何内容。但是你知道,这个数据库上有很多事务锁,不久前我手动将它们全部杀死。它可能仍然处于某种回滚状态。也许我只是需要等待。嗯……你如何将
ALTER DATABASE[dbname]设置为立即回滚的单用户?@Mike C:如果你放弃它,那么就没有必要进行反转,是吗?如果您在更一般的上下文中询问,并且您不想放弃,作为OP,那么您将发出alterdatabase[dbname]SET MULTI_USER谢谢,这就是我需要的。我没有把它扔了。