今天我试图通过已经存在的数据库恢复数据库,我只需右键单击SSMS中的数据库 - >任务 - >脱机,以便我可以恢复数据库。
出现一个小弹出窗口并显示Query Executing.....
一段时间,然后发出错误Database is in use cannot take it offline
。我从中收集了一些与该数据库的活动连接,因此我尝试执行以下查询
USE master
GO
ALTER DATABASE My_DatabaseName
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
此时,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.
此后我无法通过SSMS连接到数据库。当我尝试使用SSMS将其脱机时,它抛出一个错误说:
Database is in Transition. Try later .....
此时我根本无法触摸数据库我尝试过的任何内容返回相同的错误消息Database is in Transition
。
我上了谷歌读了一些问题,人们遇到了类似的问题,他们建议关闭SSMS并再次打开它,所以我和 由于它只是一个开发服务器,我刚刚使用SSMS删除了数据库并在新数据库上恢复。
我的问题是什么可能导致这个?以及如何避免这种情况在将来发生,如果我将来在同样的情况下结束是否有任何其他方法来修复它,然后删除整个数据库???
谢谢
答案 0 :(得分:5)
检查一下。这将帮助您释放锁定。效果很好! 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;
然后
对于每个进程编号
kill <processnumber>
答案 1 :(得分:2)
查看这篇文章。
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年数据库脱机时遇到了很糟糕的时间。我最终禁用了用户帐户,因此我不会再登录了。