【问题标题】:Database is in Transition state数据库处于过渡状态
【发布时间】:2014-01-23 23:12:31
【问题描述】:

今天我试图在已经存在的数据库上恢复数据库,我只是在 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 删除了数据库并在新数据库上恢复。

我的问题是什么可能导致这种情况?以及如何避免这种情况在未来发生,如果我将来遇到同样的情况,除了删除整个数据库之外,还有其他方法可以解决它吗???

谢谢

【问题讨论】:

    标签: sql-server sql-server-2008 database-backups database-restore


    【解决方案1】:

    看看这个。这将帮助您释放锁。效果很好! 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>
    

    【讨论】:

    • 澄清一下,&lt;processnumber&gt;blocking_session_id 列中的数字!
    【解决方案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 数据库离线,这很糟糕。我最终禁用了用户帐户,因此我无法再登录。

    【讨论】:

    • 感谢您的回答和链接,它是 2008 R2 SP1 数据中心版。这就是确切的问题。它是一个客户端应用程序数据库,即使当时没有用户使用该应用程序,但无论我从活动监视器中杀死他们多少次连接,应用程序仍然有活动连接。
    • 非常有用的链接再次非常感谢您。我整天都在谷歌上搜索,除了close your SSMS 之外没有发现流血的东西 :)
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多