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. Centsos7修改密码

    CentOS 7.0 进入单用户模式修改Root密码 时间:2017-05-02 01:10来源:blog.csdn.net  作者:海哥_大大的Java 举报   点击:506次 一.启动时,随便按 ...

  2. Servlet开发-----基础及MVC设计模式

    一.Servlet介绍   Servlet本身只是普通的Java类,只有当容器为他创建了ServletConfig和ServletContext时才成为了一个Servlet:   Servlet简单的 ...

  3. 003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理

    本博客的内容全部来自于传智播客,特在此说明. 业务要求如下:在jsp页面(jFactoryCreate.jsp)上输入数据时,转到后台,并输入到数据库. jFactoryCreate.jsp页面:

  4. 程序生成word与PDF文档的方法(python)

    程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用free ...

  5. SpringCloud架构设计

    最近一直在针对SpringCloud框架做项目,从中踩了不少的坑,也渐渐梳理出了一些内容,由于SpringCloud作为一个全家桶,其中东西太多,所以这时候就要有所取舍,这里就想把自己比较常用组件及架 ...

  6. 【BZOJ】1671: [Usaco2005 Dec]Knights of Ni 骑士(bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1671 从骑士bfs一次,然后从人bfs一次即可. #include <cstdio> # ...

  7. 单引號转义符q’的使用

    当字符串包括单引號时,能够使用转义符q'对单引號进行转义. q'后面的字符能够是:     !     [ ]     { }     ( )     < > 前提是这些字符不会出如今兴许 ...

  8. hdu 1147:Pick-up sticks(基本题,判断两线段相交)

    Pick-up sticks Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  9. Unity中对SQL数据库的操作

    在Unity中,我们有时候需要连接数据库来达到数据的读取与储存.而在.NET平台下,ADO.NET为我们提供了公开数据访问服务的类.客户端应用程序可以使用ADO.NET来连接到数据源,并查询,添加,删 ...

  10. Python爬虫(六)

    源码: import requests import re from my_mysql import MysqlConnect # 获取问答信息 def get_contents(page,heade ...