数据库处于Transition状态

M.A*_*Ali 3 sql-server database-restore database-backups sql-server-2008

今天我试图通过已经存在的数据库恢复数据库,我只需右键单击SSMS中的数据库 - >任务 - >脱机,这样我就可以恢复数据库了.

一个小的弹出窗口出现并显示Query Executing.....了一段时间然后抛出一个错误说Database is in use cannot take it offline.我从中收集了一些与该数据库的活动连接,因此我尝试执行以下查询

USE master
GO
ALTER DATABASE My_DatabaseName
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
Run Code Online (Sandbox Code Playgroud)

此时SSMS再次出现Query Executing.....一段时间,然后抛出以下错误:

Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'My_DatabaseName'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Run Code Online (Sandbox Code Playgroud)

在此之后,我无法通过SSMS连接到数据库.当我尝试使用SSMS脱机时,它抛出一个错误说:

Database is in Transition. Try later .....
Run Code Online (Sandbox Code Playgroud)

在这一点上,我根本无法触摸数据库我尝试过的任何东西返回相同的错误消息Database is in Transition.

我上google阅读了一些问题,其中人们遇到了类似的问题,他们建议关闭SSMS并再次打开它,所以我和我因为它只是一个开发服务器我只是使用SSMS删除数据库并在新数据库上恢复.

我的问题是什么可能导致这个?以及如何避免这种情况在将来发生,如果我将来在同样的情况下结束是否有任何其他方法来修复它,然后删除整个数据库???

谢谢

小智 7

看一下这个.这将帮助您释放锁定.效果很好!https://dba.stackexchange.com/questions/57432/database-is-in-transition-error

用这个

select
    l.resource_type,
    l.request_mode,
    l.request_status,
    l.request_session_id,
    r.command,
    r.status,
    r.blocking_session_id,
    r.wait_type,
    r.wait_time,
    r.wait_resource,
    request_sql_text = st.text,
    s.program_name,
    most_recent_sql_text = stc.text
from sys.dm_tran_locks l
left join sys.dm_exec_requests r
on l.request_session_id = r.session_id
left join sys.dm_exec_sessions s
on l.request_session_id = s.session_id
left join sys.dm_exec_connections c
on s.session_id = c.session_id
outer apply sys.dm_exec_sql_text(r.sql_handle) st
outer apply sys.dm_exec_sql_text(c.most_recent_sql_handle) stc
where l.resource_database_id = db_id('<YourDatabase>')
order by request_session_id;
Run Code Online (Sandbox Code Playgroud)

然后
为每个进程编号

kill <processnumber>
Run Code Online (Sandbox Code Playgroud)


CRA*_*DBA 5

看看这篇文章。

http://oostdam.info/index.php/sectie-blog/289-sql-error-952-8ways-to-solve-it

我大部分时间都在使用 TSQL,所以我还没有遇到这个问题。

SQL Server 数据库是什么版本,补丁级别是什么?

下次,执行 usp_who2 以查看正在运行的线程。

http://craftydba.com/wp-content/uploads/2011/09/usp-who2.txt

由于输出在表中,因此您可以按数据库进行搜索。

在尝试 ALTER 语句之前杀死所有使用数据库的线程。

大约 6 个月前的一个晚上,由于应用程序不断地访问它,我让 2000 个数据库脱机。我最终禁用了用户帐户,所以我不会再登录了。