从SQL SERVER 2000 上迁移了一个数据库到SQL SERVER 2008 R2上,暂且用DataBaseName代替迁移的真实的数据库名(后面的资料也会将数据库真实的名字用DataBaseName代替),迁移过程中也没有啥问题,配置了YourDataBase,作业“YourSQLDba_FullBackups_And_Maintenance”每天凌晨12点整运行,结果第一天晚上YourDatabase将数据库DataBaseName置于紧急模式,检查错误日志情况如下:

错误现象:

YourSQLDba对数据库做一致性检查时,发现有错误,所以它将该数据库置于紧急模式,具体内容如下所

查看YourSQLDba的具体错误日志信息

单击Action字段,看到的内容如下(太多内容,部分省略)

错误日志具体内容
  1. <Exec>
  2. <ctx>yMaint.IntegrityTesting</ctx>
  3. <cmd>DBCC checkDb('DataBaseName')</cmd>
  4. <err>Error 2508, Severity 16, level 3 : The In-row data RSVD page count for object "bMaterialIn79", index ID 0, partition ID 4563097419776, alloc unit ID 4563097419776(type In-row data) is incorrect. Run DBCC UPDATEUSAGE.</err>
  5. <err>Error 2508, Severity 16, level 3 : The In-row data RSVD page count for object "bMaterialIn93", index ID 0, partition ID 70442742317056, alloc unit ID 70442742317056(type In-row data) is incorrect. Run DBCC UPDATEUSAGE.</err>
  6. <msg>DBCC results for 'LibraryMS'.</msg>
  7. <msg>Service Broker Msg 9675, State 1: Message Types analyzed: 14.</msg>
  8. <msg>Service Broker Msg 9676, State 1: Service Contracts analyzed: 6.</msg>
  9. <msg>Service Broker Msg 9667, State 1: Services analyzed: 3.</msg>
  10. <msg>Service Broker Msg 9668, State 1: Service Queues analyzed: 3.</msg>
  11. <msg>Service Broker Msg 9669, State 1: Conversation Endpoints analyzed: 0.</msg>
  12. <msg>Service Broker Msg 9674, State 1: Conversation Groups analyzed: 0.</msg>
  13. <msg>Service Broker Msg 9670, State 1: Remote Service Bindings analyzed: 0.</msg>
  14. <msg>Service Broker Msg 9605, State 1: Conversation Priorities analyzed: 0.</msg>
  15. <msg>DBCC results for 'sys.sysrscols'.</msg>
  16. <msg>There are 6701 rows in 63 pages for object "sys.sysrscols".</msg>
  17. <msg>DBCC results for 'sys.sysrowsets'.</msg>
  18. <msg>There are 819 rows in 12 pages for object "sys.sysrowsets".</msg>
  19. <msg>DBCC results for 'sys.sysallocunits'.</msg>
  20. <msg>There are 848 rows in 17 pages for object "sys.sysallocunits".</msg>
  21. .................................................................................
  22. .................................................................................
  23. <msg>DBCC results for 'bMaterialIn79'.</msg>
  24. <msg>There are 1346 rows in 18 pages for object "bMaterialIn79".</msg>
  25. <msg>CHECKDB found 0 allocation errors and 1 consistency errors in table 'bMaterialIn79'(object ID 69627341).</msg>
  26. ...............................................................................
  27. ...............................................................................
  28. <msg>DBCC results for 'bMaterialIn93'.</msg>
  29. <msg>There are 2162 rows in 23 pages for object "bMaterialIn93".</msg>
  30. <msg>CHECKDB found 0 allocation errors and 1 consistency errors in table 'bMaterialIn93'(object ID 1074870946).</msg>
  31. <msg>CHECKDB found 0 allocation errors and 2 consistency errors in database 'DataBaseName'.</msg>
  32. <msg>DBCC execution completed. If DBCC printed error messages, contact your system administrator.</msg>
  33. </Exec>

对数据库执行DBCC  CHECKDB('DataBaseName')得到的内容跟YourSQLDba的错误日志信息一致

DCC CHECKDB
  1. DBCC results for 'DataBaseName'.
  2. Service Broker Msg 9675, State 1: Message Types analyzed: 14.
  3. Service Broker Msg 9676, State 1: Service Contracts analyzed: 6.
  4. Service Broker Msg 9667, State 1: Services analyzed: 3.
  5. Service Broker Msg 9668, State 1: Service Queues analyzed: 3.
  6. Service Broker Msg 9669, State 1: Conversation Endpoints analyzed: 0.
  7. Service Broker Msg 9674, State 1: Conversation Groups analyzed: 0.
  8. Service Broker Msg 9670, State 1: Remote Service Bindings analyzed: 0.
  9. Service Broker Msg 9605, State 1: Conversation Priorities analyzed: 0.
  10. DBCC results for 'sys.sysrscols'.
  11. There are 6701 rows in 63 pages for object "sys.sysrscols".
  12. DBCC results for 'sys.sysrowsets'.
  13. There are 819 rows in 12 pages for object "sys.sysrowsets".
  14. ...................................................................
  15. ..................................................................
  16. DBCC results for 'bMaterialIn79'.
  17. Msg 2508, Level 16, State 3, Line 1
  18. The In-row data RSVD page count for object "bMaterialIn79", index ID 0, partition ID 4563097419776, alloc unit ID 4563097419776(type In-row data) is incorrect. Run DBCC UPDATEUSAGE.
  19. There are 1346 rows in 18 pages for object "bMaterialIn79".
  20. CHECKDB found 0 allocation errors and 1 consistency errors in table 'bMaterialIn79'(object ID 69627341).
  21. .....................................................................
  22. .....................................................................
  23. The In-row data RSVD page count for object "bMaterialIn93", index ID 0, partition ID 70442742317056, alloc unit ID 70442742317056(type In-row data) is incorrect. Run DBCC UPDATEUSAGE.
  24. There are 2162 rows in 23 pages for object "bMaterialIn93".
  25. CHECKDB found 0 allocation errors and 1 consistency errors in table 'bMaterialIn93'(object ID 1074870946).
  26. DBCC results for 'bMaterialApply40'.
  27. ....................................................................
  28. ....................................................................
  29. CHECKDB found 0 allocation errors and 2 consistency errors in database 'DataBaseName'.
  30. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

分析原因:

这些错误提示数据页在保留空间中不正确的值,在SQL 2000中,这些错误也有可能是数据条目或者数据页的数目跟索引或表中记录的不一致所导致的。CheckDB 不会修复类似错误,在SQL 2005 中CheckDB只会给出一个警告信息。这不是什么严重的错误,按照提示运行DBCC UPDATEUSAGE行了,这通常发生在SQL 2000升级为2005/2008后,在SQL 2005/2008中一般不会遇到。刚好我这个数据库DataBaseName是从SQL 2000升级到SQL 2008,其实这确实不是一个什么严重错误,但是YourSQLDba意识到了“严重性”将数据库出于紧急模式,不能让系统或用户继续操作该数据库了,那么接下来用DBCC UPDATEUSAGE 解决该问题。

Code Snippet
  1. DBCC UPDATEUSAGE(LibraryMS,"dbo.bMaterialIn79");
  2. GO
  3. DBCC UPDATEUSAGE: Usage counts updated for table 'bMaterialIn79'(index 'bMaterialIn79', partition 1):
  4. USED pages(In-row Data): changed from (21) to (19) pages.
  5. RSVD pages(In-row Data): changed from (-107) to (73) pages.
  6. DBCC UPDATEUSAGE: Usage counts updated for table 'bMaterialIn79'(index 'PK_bMaterialIn79', partition 1):
  7. RSVD pages(In-row Data): changed from (8) to (17) pages.
  8. DBCC execution completed. If DBCC printed error messages, contact your system administrator.
  9. DBCC UPDATEUSAGE(LibraryMS,"dbo.bMaterialIn93");
  10. GO
  11. DBCC UPDATEUSAGE: Usage counts updated for table 'bMaterialIn93'(index 'bMaterialIn93', partition 1):
  12. USED pages(In-row Data): changed from (38) to (24) pages.
  13. RSVD pages(In-row Data): changed from (-18) to (49) pages.
  14. DBCC UPDATEUSAGE: Usage counts updated for table 'bMaterialIn93'(index 'PK_bMaterialIn93', partition 1):
  15. RSVD pages(In-row Data): changed from (16) to (17) pages.
  16. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

关于DBCC UPDATEUSAGE的MSDN解释如下:

-----------------------------------------------------------------------------------------------------------------------

备注

DBCC UPDATEUSAGE 将针对表或索引中的每个分区更正行、已用页、保留页、叶级页和数据页的计数。如果系统表中没有错误,则 DBCC UPDATEUSAGE 不返回数据。如果发现错误,并对其进行更正,同时没有使用 WITH NO_INFOMSGS,DBCC UPDATEUSAGE 将返回系统表中更新的行和列。

使用 DBCC UPDATEUSAGE 同步空间使用计数器。因为 DBCC UPDATEUSAGE 在大型表或大型数据库中运行可能会需要一些时间,所以通常只在怀疑 sp_spaceused 返回的值不正确时使用。sp_spaceused 在返回表或索引的空间信息之前接受可选参数以运行 DBCC UPDATEUSAGE。

升级数据库

在 SQL Server 的早期版本中,用于表和索引行计数以及页计数的值可能不正确。根据 SQL Server 2005 之前的版本创建的数据库可能包含错误的计数。因此,我们建议在升级之后运行 DBCC UPDATEUSAGE,以便更正所有的无效计数。

DBCC CHECKDB 已得到增强,可以检测页计数或行计数变为负值的情况。检测到上述问题后,DBCC CHECKDB 的输出会包含一个警告和一个建议,建议运行 DBCC UPDATEUSAGE 解决该问题。

------------------------------------------------------------------------------------------------------------------------

YourSQLDba将数据库置于紧急模式的原因浅析的更多相关文章

  1. SQLSERVER数据库置疑、可疑、脱机、单用户、紧急模式等的修复

    数据库出现置疑.可疑.脱机.单用户.紧急模式主要是因为数据库的日志文件除了问题,2000和2008修复方式不一样,2008的修复脚本在2000中不适用,主要是不被2000识别. 假设数据库名为:eis ...

  2. SQL Server 数据库单用户模式处理

    在还原数据库bak备份文件时,由于某种原因(具体何种原因在此不进行分析)导致数据库还原后处于单用户模式,如下图: 单个用户模式导致,数据库无法打开,只能通过脚本去查询数据库内的表,然后进行查询数据,极 ...

  3. 数据库精华知识点总结(1)—数据库的三层模式和二级映像,E-R(实体联系图)图,关系模型

    Data base: 长期存储在计算机内,有组织的,可共享的大量数据集合.基本特征:永久存储,可共享,有一定的物理和逻辑结构. Data base manage system(DBMS):用户和os之 ...

  4. oracle数据库的归档模式

    1:开发环境和测试环境中,数据库的日志模式和自动归档模式一般都是不设置的,这样有利于系统应用的调整,也免的生成大量的归档日志文件将磁盘空间大量的消耗. 2:生产环境时,将其设置为日志模式并自动归档就相 ...

  5. 修改oracle数据库为归档模式

    参考博客:http://blog.csdn.net/codesaint/article/details/1901030 Oracle分为非归档模式(NOARCHIVELOG)  和归档模式(ARCHI ...

  6. 救援模式(Rescue Mode)、单用户模式(Single-User Mode)、紧急模式(Emergency Mode)的区别与联系

    前天聚餐的时候一航和启飞学长讲到RUCTF中更改root密码要进入单用户模式,我插了一句"有的系统显示的是救援模式",说完后心里一直很虚...(技术上的事还是想好再说)今天查了一下 ...

  7. SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式

    SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...

  8. Oracle数据库LOGGING&NOLOGGING模式概述

    1.日志记录模式(LOGGING .FORCE LOGGING .NOLOGGING) 1.1三者的含义 LOGGING:当创建一个数据库对象时将记录日志信息到联机重做日志文件.LOGGING实际上是 ...

  9. 进入CentOS7紧急模式恢复root密码

    第一步.重启CentOS7,在以下界面选择要编辑的内核(一般第一个),按e进入编辑界面 第二步.在编辑界面找到如下一行,将ro改为rw init=/sysroot/bin/sh.改完后<Ctrl ...

随机推荐

  1. 输入URL到展现页面的全过程

    最近在看一本关于网络协议的书<图解HTTP> 当我们在浏览器的地址栏输入 http://www.pwstrick.com ,然后回车,回车这一瞬间到看到页面到底发生了什么呢? 1.  域名 ...

  2. DotNet隐藏敏感信息操作方法

    在项目中,有时候一些信息不便完全显示,只需要显示部分信息.现在提供一些隐藏敏感信息的操作方法,主要为对信息的截取操作: 1.指定左右字符数量,中间的*的个数和实际长度有关: /// <summa ...

  3. [emacs] 使用ggtags浏览代码

    [emacs] 使用ggtags浏览代码 // */ // ]]>   [emacs] 使用ggtags浏览代码 Table of Contents 1 相关的连接 2 global简介 2.1 ...

  4. 10.Struts2连接数据库

    链接数据库的两种方式: 1.在Action中连接数据库 2.使用工具类连接数据库 1.在Action中连接数据库 源码文档目录如图所示: 1.建立数据库 数据库建立语句: create databas ...

  5. [Java IO]04_系统标准IO

    System表示系统类,它有3个与 Java IO 有关的常量. System.out——系统标准输出 System.in——系统标准输入 System.err——错误信息输出 System.out ...

  6. CSS垂直居中和水平居中

    前言 CSS居中一直是一个比较敏感的话题,为了以后开发的方便,楼主觉得确实需要总结一下了,总的来说,居中问题分为垂直居中和水平居中,实际上水平居中是很简单的,但垂直居中的方式和方法就千奇百怪了. 内联 ...

  7. Js apply方法详解

    我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家 ...

  8. SqlServer 分页查询

    1.not in方法 select top 10 from books where id not in (select top 30 id from books)   2.row_number()函数 ...

  9. .NET编码解码(HtmlEncode与HtmlEncode)

    编码代码: System.Web.HttpUtility.HtmlEncode("<a href=\"http://hovertree.com/\">何问起& ...

  10. C# 发送Http请求 - WebClient类

    WebClient位于System.Net命名空间下,通过这个类可以方便的创建Http请求并获取返回内容. 一.用法1 - DownloadData string uri = "http:/ ...