Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何删除数据库,错误5030数据库可以';不能上锁_Sql Server - Fatal编程技术网

Sql server 如何删除数据库,错误5030数据库可以';不能上锁

Sql server 如何删除数据库,错误5030数据库可以';不能上锁,sql-server,Sql Server,我正在尝试删除SQL Server 2005中的现有数据库。我的第一次尝试产生了以下错误: 5030:无法以独占方式访问数据库 锁定以执行该操作 我已经终止了所有访问数据库的进程。我还删除了它以前参与的复制订阅 除了SQL Server进程和复制之外,还有什么东西可以锁定它呢 更新:我重新启动了服务器,并修复了它。我试图避免这种情况,因为这是一个生产服务器,但是嘿,你能做什么呢?我不想这么说,但一个快速的解决方案是重新启动系统,确保sql server服务没有启动,然后你应该能够删除 此外,如果

我正在尝试删除SQL Server 2005中的现有数据库。我的第一次尝试产生了以下错误:

5030:无法以独占方式访问数据库 锁定以执行该操作

我已经终止了所有访问数据库的进程。我还删除了它以前参与的复制订阅

除了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