热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SQLServer数据库Suspect解决案例

欢迎进入Windows社区论坛,与300万技术人员互动交流进入生产环境:SQLServer2008R2ActivePassiveNodes,WindowsServer2008R2SP1Cluster,vSphere5.x发生起始6am接到ApplicationTeam报告BiztalkMsgBoxDb进入suspect模式,不可以访问。

欢迎进入Windows社区论坛,与300万技术人员互动交流 >>进入 生产环境: SQL Server 2008 R2 Active/Passive Nodes,Windows Server 2008 R2 SP1 Cluster, vSphere 5.x 发生起始 6 am 接到Application Team报告 BiztalkMsgBoxDb进入suspect模式,不可以访问。

欢迎进入Windows社区论坛,与300万技术人员互动交流 >>进入

  生产环境:

  SQL Server 2008 R2 Active/Passive Nodes,Windows Server 2008 R2 SP1 Cluster, vSphere 5.x

  发生起始

  6 am 接到Application Team报告 BiztalkMsgBoxDb进入suspect模式,不可以访问。

  报告事件,减少用户压力

  简单的和App Manager电话了下,了解他们Apps层面down time,在Ticket中录入大概发生时间,事件描述,最近有没有发生过任何变更事件。如果没有Ticket系统,请群发email给相关人员。电话Incident Manager管理所有的事件更新,这样做的好处:使惊慌失措的人们知道发生了什么,减少他们的压力。

  整理一下自己

  6:30 am很多人的电话总让自己神经紧张,简单的brainstorm一下suspect可能发生的原因:文件组(数据和日志)的损坏?磁盘爆满/SAN Disk出错?备份还在吧?

  察看Error Log,定位起始出错信息

  6:40 am查找到最初的错误,发生在成功的 Log backup以后的1分钟,错误信息显示:OS Error导致了LogWriter的log flush (写日志)失败。不能写日志会导致数据suspect.

  2014-03-17 03:15:56.05 spid5s Error: 17053, Severity: 16, State: 1.

  2014-03-17 03:15:56.05 spid5s LogWriter: Operating system error1117(failed to retrieve text for this error. Reason: 15105) encountered.

  2014-03-17 03:15:56.05 spid5s Write error during log flush.

  2014-03-17 03:15:56.05 spid79 Error: 9001, Severity: 21, State: 4.

  2014-03-17 03:15:56.05 spid79 The log for database 'BizTalkMsgBoxDb' isnot available. Check the event log for related error messages. Resolve anyerrors and restart the database.

  2014-03-17 03:15:56.05 spid85 Error: 9001, Severity: 21, State: 4.

  分析错误:

  1117 OS错误,有关磁盘。日志文件还在,磁盘没有满。可以考虑对log file迁移。

  第一次尝试 DBCC Repair

  (任何尝试的基础都是要明白:你的动作,不会使情况变得更糟糕)

  命令 ALTER DATABASE [xxxxxx]SET EMERGENCY;

  命令出错, 数据库被锁,不能alter database ,直接放弃DBCC CHECKDB (N'xxxxxxx', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;修复。

  为什么要放弃: DBCC Repair 要求数据库在 emergency模式下,它会试图利用现有log 把数据库恢复到一致性上(consistent recover)。如果 log有问题, 那么它 会重建 log ( 个人认为这就是repair allow data loss的意思) .对于一个100 GB以上的数据库, rebuild log可能花费数小时,考虑到recovery time object (RTO)和 SLA (service level agreement) , 都不允许数据库 downtime 很久 (事后的反思)。幸运的是不能alter database,错误信息直接指明了database log locked, 暗示了数据库 log可能没有 corrupt, 那么没有必要着急dbcc repair了。

  事后反思,武断的认为log file corrupted 是错误的,dbcc repair作为 methodology 的第一步也是不合时宜的,应为没有向用户确认是否可以丢失过去15分钟的active transaction (虽然客户还在睡觉) ( 每15 分钟的事务日志备份),更何况它还会让数据库 downtime更久,8点上班前未必恢复的了,可能都没有database backup restore快。作为methodology第一步应该首先确认是否file corrupted 并且联系server team是否有IO异常。

  第二次尝试 迁移日志文件

  遇到 resource lock 的问题,通常的 第一反应都是kill 或者 重启资源。这里限于自己技能不足或者没有建立正确的methodology,第一时间发现不了lock的资源,所以选择了重启资源

  应为是Windows Cluster,所以不用detach/attach数据库,直接failover到passive server,数据库在failover后等效的重起和实例恢复了。现在日志文件可写,数据库恢复到Active.

  暂时解决了问题,然后将数据库switch over到原来的 active服务器。没有出错,证明不是磁盘本身的问题。可能是磁盘接口问题。同时查看了event viewer除了log backup没有发现其他。Sp_who2也没有发现可疑的database lock排除了数据库进程锁住数据库或者logfile.

  建立问题

  7 am,让Server Team检查磁盘,怀疑EVA SAN出问题。 现在只知道起始错误和解决方法。作为一个问题,留给Problem Manager继续更进,用来避免以后发生同样的问题。

  总结:遇到 log file 导致的 数据库挂起,解决方法学首先是(1)确认磁盘问题,然后是(2 ) 确认数据库process lock,然后是(3)确认是否 corrupt, 这些 check up 做完后再针对(1) (2)(3) 提出解决方案。从(1) 到 (3)严重性也越高, 所以恢复后数据丢失的可能性也越高。要和客户确认在线修复的风险。最后的稻草自然是平时完备的数据备份方案和定期的数据库恢复执行计划。


推荐阅读
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文介绍如何在Linux服务器之间使用SCP命令进行文件传输。SCP(Secure Copy Protocol)是一种基于SSH的安全文件传输协议,支持从远程机器复制文件到本地服务器或反之。示例包括从192.168.45.147复制tomcat目录到本地/home路径。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 本文将深入探讨使用IMPDP工具进行分区表导入时需要注意的事项,涵盖最佳实践和常见问题。通过详细的分析与解释,帮助读者更好地理解和应用这些知识。 ... [详细]
  • 探讨如何使用正则表达式从类 SQL 查询语句中提取字段及其对应的值。 ... [详细]
author-avatar
一首老歌L_798
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有