从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. 【JavaScript】又一神器框架:linq.js

    引言 前几天针对一个js数组交集的问题请教了下同事,他第一反应就是循环,这也是常规思路,因为我个人更倾向于js些,我便开玩笑,不知道js能不能像linq那样实现这些操作呢?果断百度了一把,果然有现成框 ...

  2. 会务准备期间材料准备工作具体实施总结 ----(vim技巧应用, python信息提取与整合, microsoft word格式调整批量化)

    会务准备期间材料准备工作具体实施总结(vim, python, microsoft word) span.kw { color: #007020; font-weight: bold; } code ...

  3. Extjs4.0以上版本 Ext.Ajax.request请求的返回问题

    Ext.Ajax.request({ url: posturl, method: 'POST', params: { ClassName: 'XXXX', FuncName: 'XXXX', para ...

  4. HTML特殊符号汇总

    较常用的飘黄处理了 ´ ´ © © > > µ µ ® ® & & ° ° ¡ ¡   » » ¦ ¦ ÷ ÷ ¿ ¿ ¬ ¬ § § • • ½ ½ « « ¶ ¶ ¨ ...

  5. Redis Cluster原理

    Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写. ...

  6. 【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去

    适用于:.net2.0+ Winform项目 ------------------201508261813更新(源码有更新.Demo未更新)------------------ 重新绘制调整大小手柄( ...

  7. jQuery弹出深色系层菜单

    低调奢华jQuery弹出层菜单,使用新版的jQuery库,兼容多种浏览器.Demo展示: http://hovertree.com/texiao/layer/3/ 本特效可以作为网站的引导页,使用jQ ...

  8. SQL Server中的GUID

    GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值. GUID ...

  9. Unity3D 5.x 简单实例 - 脚本编写

    1,Vector3 类型变量存储向量坐标值 Vector3.forward Vector3(0,0,1) Vector3.up Vector3(0,1,0) Vector3.right Vector3 ...

  10. C标准头文件<stdio.h>

    是很多人学C语言接触的第一个头文件,顾名思义,stdio就是"标准输入输出",其中声明了一组关于输入输出的类型,宏和函数,其中就包括了打印著名的"hello,world! ...