我真的不在乎我对这个测试数据库的处理方式......它适用于沙箱测试(附加到生产服务器实例)!我试图做的就是杀死所有连接,删除并创建test_db,如果没有要求太多......并使用一些测试数据进行恢复。
我已尝试USE [MASTER] RESTORE DATABASE test_DB WITH RECOVERY GO
,但收到此错误:
Msg 3101,Level 16,State 1,Line 1 由于数据库正在使用,因此无法获得独占访问权限。 Msg 3013,Level 16,State 1,Line 1 RESTORE DATABASE异常终止。
另外,尝试过
USE [master] ALTER DATABASE test_DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
,并收到错误:
Msg 5061,Level 16,State 1,Line 1 ALTER DATABASE失败,因为无法将锁定放在数据库' test_DB'上。稍后再试。
消息5069,16级,1号,1号线 ALTER DATABASE语句失败。
也做了
select min(spid) from master..sysprocesses where dbid = db_id('test_DB')
,但我的结果集已返回NULL
以下是我的代码:
--- Kill Connections
USE [master]
DECLARE @cmdKill VARCHAR(50)
DECLARE killCursor CURSOR FOR
SELECT 'KILL ' + Convert(VARCHAR(5), p.spid)
FROM master.dbo.sysprocesses AS p
WHERE p.dbid = db_id('test_DB')
OPEN killCursor
FETCH killCursor INTO @cmdKill
WHILE 0 = @@fetch_status
BEGIN
EXECUTE (@cmdKill)
FETCH killCursor INTO @cmdKill
END
CLOSE killCursor
DEALLOCATE killCursor
--Drop and Create
USE [master]
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'test_DB')
DROP DATABASE [test_DB]
GO
USE [master]
GO
CREATE DATABASE [test_DB] ON PRIMARY
( NAME = N'test_db_Data', FILENAME = N'\\some_place\d$\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test_DB.mdf' , SIZE = 125635136KB , MAXSIZE = UNLIMITED, FILEGROWTH = 20%)
LOG ON
( NAME = N'test_db_Log', FILENAME = N'E:\SQLLogs\test_DB.ldf' , SIZE = 1064320KB , MAXSIZE = UNLIMITED, FILEGROWTH = 20%)
GO
ALTER DATABASE [test_db] SET ....
答案 0 :(得分:0)
如果仍有打开的数据库,则无法使数据库脱机。
另外,请确保您的连接未使用该数据库(USE master
),然后使用WITH ROLLBACK IMMEDIATE
的{{1}}选项将其停用。
答案 1 :(得分:-1)
你知道谁有联系吗?
SELECT
DB_NAME(dbid) as 'DBName'
, loginame as 'Login'
, COUNT(dbid) as 'Connections'
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid
, loginame