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

关键词:数据库状态

一个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状态。

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

转自:https://www.cnblogs.com/lyhabc/archive/2012/09/15/2687076.html

(2.13)备份与还原--sql server数据库主要状态和切换路径的更多相关文章

  1. 备份和还原SQL Server及压缩Access数据库

    功能说明:备份和恢复SQL Server数据库 * 作者: 刘功勋; * 版本:V0.1(C#2.0);时间:2007-1-1 * 当使用SQL Server时,请引用 COM组件中的,SQLDMO. ...

  2. (2.1)备份与还原--sql server文件的概念及操作

    概述:sql server是以文件形式存储数据与日志 1.数据文件 sql server数据文件分为2类 (1)主数据库文件 主数据库文件包含数据库的启动信息.系统对象,并指向数据库的其他文件(从数据 ...

  3. 如何快速备份还原Sql Server 数据库

    备份数据库 选择你要备份的数据库,鼠标右键单击,选择任务-备份 弹出备份数据库窗口,选择添加 弹出选择备份目标窗口,点击浏览,选择存放备份数据库的目录,输入文件名,后缀名输入.bak,点击确定,确定, ...

  4. [Windows Server 2003] 还原SQL Server数据库

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:SQL Ser ...

  5. 【随记】还原SQL Server数据库步骤

    情景:在一台机器上备份数据库,然后在另一台机器上还原数据库,可能会出现错误提示:System.Data.SqlClient.SqlError: 备份集中的数据库备份与现有的 'XXX' 数据库不同. ...

  6. sql server数据库可疑状态解决方法

    前段时间客户数据服务器断电,开机后发现数据库状态标记为可疑,可能是断电引起的数据库日志文件损坏,修复方法如下: 只有mdf文件,重建日志: --注:example为测试用数据库,相应的Example_ ...

  7. 用dos命令备份和恢复sql server 数据库

    这里是批处理命令-----备份的 delete d:\restore\cw_ft.bak delete d:\restore\cw_sd.bak sqlcmd -i "bak.sql&quo ...

  8. SQL SERVER数据库升级手册

    背景 最近接手很多项目都跟数据库升级有关.感触还是颇深,写个心得,供大家参考,如果有疑问欢迎留言.     为什么升级?   你可能会因为各种各样的原因选择升级.我认为原因主要是3个方面 1.旧版本使 ...

  9. 数据库开发基础 SQL Server 数据库的备份、还原与分离、附加

    认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是 一.在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点 二. ...

随机推荐

  1. groupBox和panel

    private void Form1_Load(object sender, EventArgs e) { groupBox1.Text = "信息表"; panel1.Borde ...

  2. am335x gpio控制

    1.执行下面的命令,可以显示目前驱动已经申请到的IO状态 : $ mount -t debugfs debugfs /sys/kernel/debug  $ cat /sys/kernel/debug ...

  3. ubuntu -- mf210v拨号流程

      1 脚本建立 Root权限进入Ubuntu,在 /etc/ppp/ 下面建立两个目录,如果有就不需要建立了.直接把脚本放进去或者建立新文件即可. cd /etc/ppp mkdir peers c ...

  4. 在 Java 8 中获取日期

    前言 前面一篇文章写了<SimpleDateFormat 如何安全的使用?>, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Jav ...

  5. 错题0920-java

    1.java如何接受request域中的参数? A:request.getRequestURL() B:request. getAttribute() C:request.getParameter() ...

  6. ResultSet是结果集对象

    ResultSet是结果集对象 DriverManager管理一组驱动程序 PreparedStatement预编译的,用来发送和执行SQL语句的

  7. Nucleus PLUS的启动、执行线程和中断处理

    nucleus系统是实时嵌入式操作系统,具有实时.任务抢先.多任务内核,当中95%的代码由C语言写成,极易移植.开放的源代码使得配置和裁剪方便,再加上体积小(所有二进制映像可仅20K).响应高速等特性 ...

  8. laravel 添加 404 页面

    1)使用 laravel 抛出 404 头很简单 abort(404); 还可以添加描述 abort(404, '404 File Not Fund'); 2)如果想自定义 404 页面模版,直接添加 ...

  9. 链接href的多重使用

    1. 拨打电话 在电话号码前面可以加上 + (加号)表示国际号码. <a href="tel:10086">10086</a> 使用wtai协议进行拨打电话 ...

  10. Spring学习笔记 7.1 Spring MVC起步

    7.1.1 跟踪Spring MVC的请求请求首先到达DispatcherServlet(DispatcherServlet是Spring MVC中的前端控制器):DispatcherServlet的 ...