首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server Kill命令

SQL Server Kill命令
EN

Stack Overflow用户
提问于 2011-06-23 16:49:33
回答 4查看 2.2K关注 0票数 4

我有一个SQL脚本,它备份一个数据库,然后在另一个数据库上恢复它。我遇到的问题是,正在被覆盖的数据库被用户锁定为打开状态,因此作业失败。我可以手动杀死附加的用户,它运行良好,但我需要这个进程自动运行每晚。有可以让我每晚定时执行的kill命令吗?或者,在还原选项中是否有什么东西可以执行相同的操作?

有什么想法吗?

谢谢

EN

回答 4

Stack Overflow用户

发布于 2011-06-23 16:54:02

如果客户端重新连接,KILL并不总是有效的

我会考虑让数据库离线(或者只使用dbo ),然后再进行恢复。因此将阻止进一步的重新连接。

代码语言:javascript
复制
ALTER DATABASE TargetDB SET OFFLINE WITH ROLLBACK IMMEDIATE 

代码语言:javascript
复制
ALTER DATABASE TargetDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE 
票数 6
EN

Stack Overflow用户

发布于 2011-06-23 16:59:24

同意@gbn的观点,您也可以使用以下代码来获得数据库恢复成功

代码语言:javascript
复制
USE master 
GO

ALTER DATABASE YourDatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

ALTER DATABASE YourDatabaseName SET OFFLINE WITH ROLLBACK IMMEDIATE 
GO

但是,您可以使用以下脚本终止与所选数据库的连接。

代码语言:javascript
复制
    -- Create the sql to kill the active database connections  
DECLARE @execSql VARCHAR(4000),
    @databaseName VARCHAR(100)  
    -- Set the database name for which to kill the connections  
SET @databaseName = '[yourdatabase]'  

SET @execSql = ''   
SELECT  @execSql = @execSql + 'kill ' + CONVERT(CHAR(10), spid) + ' '
FROM    master.dbo.sysprocesses
WHERE   DB_NAME(dbid) = @databaseName
        AND DBID <> 0
        AND spid <> @@spid  
EXEC ( @execSql
    )  
票数 1
EN

Stack Overflow用户

发布于 2011-06-23 17:01:40

代码语言:javascript
复制
DECLARE @pid AS INTEGER

DECLARE mycursor CURSOR FOR
select spid 
from sys.sysprocesses
WHERE dbid = DB_ID('yourdatabasename')

OPEN mycursor 
FETCH NEXT FROM mycursor INTO @pid

WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE ('KILL '+@pid)
FETCH NEXT FROM mycursor INTO @pid
END

CLOSE mycursor
DEALLOCATE mycursor
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6451512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档