当前位置:网站首页 / 数据库 / 正文

SQLSERVER数据库主要状态和切换路径

时间:2016年06月14日 | 作者 : aaronyang | 分类 : 数据库 | 浏览: 1151次 | 评论 0

一个SQLSERVER数据库会处于很多种状态,例如 ONLINE 、RESTORING 、RECOVERING 、RECOVERY_PENDING  、SUSPECT、EMERGENCY 、OFFLINE等等。


只有在ONLINE的状态下,数据库才能被正常访问。


下图主要反映了数据库的主要状态之间的切换路径



 


下面说一下这些状态:


 RECOVERING:


SQLSERVER正做数据库修改的时候,是先写日志,然后再修改内存中的数据页。至于硬盘上的数据页内容,将在检查点或者是SQLSERVER做LAZY WRITE的时候


完成。所以在大部分时间,都会有一些硬盘上的数据不是最新的版本。如果数据库在这种时间点被关闭,下次SQLSERVER重新打开数据库的时候,为了维护数据库


的一致性,SQLSERVER必须做两件事情:


1、重做redo


2、回滚和撤销 undo/rollback


在上次数据库被关闭的时候,可能有一些修改已经在数据页上完成,但是事务本身没有提交。对于这些做到一半的事务,SQLSERVER一律回滚,以保证数据库事务的


一致性。所以磁盘里被改过的数据还要再改过来。


 


做这两件事情的过程,叫做数据库恢复。只有经过恢复的数据库,才能保证是一个“一致的”数据库,才能被安全地访问。


从图中可以看出,下面的动作会让SQLSERVER决定对数据库做恢复


 (1)CREATE:创建新数据库


 (2)ALTER ONLINE:让数据库上线


 (3)RESTORE WITH RECOVERY:以RECOVERY方式恢复一个数据库


 (4)DATABASE STARTUP:启动数据库,


 恢复如果能够正常完成,那么数据库将进入ONLINE状态。


 


如果恢复动作因为有些资源不能访问而失败,例如某个数据文件或者日志文件打不开等等,数据库会进入RECOVERY PENDING状态。


如果恢复因为数据文件或者日志文件里的内容损坏而失败,例如SQLSERVER要做重做,但是日志文件里相应的日志信息读不出来;


或者要做撤销,去修改数据文件里的页面,却发现页面里的数据不是想象中的那样,那么数据库会进入一个很有名的状态:可疑(SUSPECT)。


 


ONLINE:


这种状态下,数据库可以被普通用户访问,可以被查询和修改。只有一种方法能够使数据库进入ONLINE状态,那就是成功地恢复。


SQLSERVER通过这种机制保证数据库的一致性。


一个ONLINE的数据库在管理员发出"ALTER OFFLINE"命令后,可以进入OFFLINE状态。在管理员发出“RESTORE”命令后,可以进入RESTORING状态


 


RECOVERY PENDING:


如果数据库在做恢复的时候不能正常打开所有的数据库文件,数据库会进入RECOVERY PENDING状态。在这个状态下管理员有两种选择,


要不用ALTER ONLINE命令使SQLSERVER做一次上线,要不就只能放弃当前数据库,还原备份。


 


SUSPECT:


当数据库做恢复的时候由于数据文件或者日志文件里的损坏而失败,数据库会进入SUSPECT状态。在这个状态下管理员只有3种选择。


(1)再做一次ALTER ONLINE ,让SQLSERVER再做一次恢复


(2)放弃当前数据库,还原备份


(3)将数据库状态设置为EMERGENCY,继续尝试修复数据库


 


EMERGENCY:


紧急模式。这个状态下,SQLSERVER对没有完成恢复的数据库开放一个只读窗口,供管理员在没有备份的情况下尽可能地挽救数据。


 


RESTORING:


数据库正在做恢复。在任何状态下,管理员都能去恢复数据库。在WITH RECOVERY的模式下,恢复数据库的最后一步,数据库进入RECOVERING状态。


恢复做完后,数据库才能在线。


 


OFFLINE:


数据库离线状态。这时候数据库也不能被访问。管理员可以使用ALTER ONLINE命令,让数据库开始恢复,从而进入ONLINE状态。


 


从上面可以看出,恢复是数据库进入在线状态的关键步骤。如果这一步失败,数据库就没有办法被使用!!


推荐您阅读更多有关于“MSSQL,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

合肥科大智能常年招聘.NET,Java,Web前端,有想找想换工作的私聊我AY唯一QQ:875556003和AY交流

抖音号:wpfui,可以看到我的很多作品效果

AYUI8社区版Github地址:前往获取

作者:杨洋(AaronYang简称AY,安徽六安人)目前是个人,还没公司AY唯一QQ:875556003和AY交流

高中学历,2015年1月17日开始,兴趣学习研究WPF,目前工作繁忙,不接任何活

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费.AY主要靠卖技术服务挣钱

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表