“叮叮叮……”
夏洛克·福尔摩斯·K刚研磨好咖啡粉,准备冲一杯美味的咖啡来享受周末的美好时光,电话铃声却突然响起,但他并没有停下手里的动作,因为水马上开了。
响了三声铃声后,华生·K放下报纸,接起电话。
“福尔摩斯·K先生,我们遇到了麻烦!”华生·K还未开口,电话那头就传来了急切的声音。
“好的,请你先冷静?”华生·K试图安抚对方。“能告诉我,你是谁吗?”
“华生·K?福尔摩斯·K先生呢?”Z客户问道,“我是B市XX证券公司的DBA,Z”。
华生·K耐心回答:“好的,Z先生,你可以告诉我是什么问题,我会转达给福尔摩斯·K。”
此时福尔摩斯·K已经冲好了咖啡,准备享用。
“我们数据库发生了业务访问数据库失败的现象,收到了大量用户的投诉…”Z的声音听起来很焦急。
……
周末赶往公司,惨
喝完咖啡的福尔摩斯·K披上风衣,随着华生·K一起出了门,直奔客户现场。在路上,华生也向福尔摩斯说明了客户遇到的情况。
XX公司的Z先生在收到投诉后,马上进行了测试,在执行数据查询时,返回了如下报错:
“这是数据坏块。”
“是的。”
“物理坏块还是逻辑坏块,检查数据库硬件了吗?”
“没有,客户也没说。”华生·K回答。
“建议他们先检查硬件是否损坏,如I/O故障、磁盘故障、内存问题等,再检查操作系统是否故障。这些都会导致数据库不能识别块,所以校验无效,要么块包含的全是0,要么块头损坏。数据库可以使用checksum对物理坏块进行检测。”
如果checksum已启用,则为每个数据页计算校验和。检测到校验和失败将导致读取数据时出错,并将中止当前正在运行的事务。因此,这为直接在数据库服务器级别检测I/O或硬件问题带来了额外的控制。
当数据落盘后,由于人为修改了块里具体的值,导致数据库读取的时候,重新计算的checksum值和块头存储的checksum值不一致,导致物理坏块。所以物理坏块也会校验块内容。
华生·K立刻给客户发消息。
“如果检查出故障,那么建议替换掉故障的硬件,换重装操作系统,然后进行……对了,他们有主备流复制集群吧?”福尔摩斯·K想起什么来,话题一转问道。
华生·K依然在笔记本上敲击键盘,但不耽误他回答:“他们有主备集群,也许还存在备份。”
“那就可以进行块介质恢复,这样做就不需要恢复整个数据库的所有文件了。”只要有备份存在,数据就有挽救的机会。
定位故障,轻松解决问题
当福尔摩斯·K和华生·K赶到,Z已经将数据库硬件检查了一遍,很遗憾并没有发现问题所在,只能委托福尔摩斯·K出手了。不一会儿的功夫,在福尔摩斯·K的一番操作下,Z看到丢失的数据成功从备份恢复后,终于舒了一口气。
“主机硬件故障、存储硬件和软件故障、操作系统故障、数据库软件故障,甚至应用软件压力过大都可能导致数据库出现坏块。本次故障原因主要是数据块的头信息被写坏,导致头信息与数据块内容不匹配。还好只是丢失了部分数据块,通过备份恢复即可修复。”福尔摩斯·K说道。
Z先生受益匪浅,“那么怎么进行数据块损坏的恢复呢?”
华生·K:“常见的数据块损坏恢复流程是:首先确定故障范围,如物理坏块或者逻辑坏块,如果是物理坏块,则检查和替换故障硬件,然后确定坏块影响的数据库对象。接着就能选择合适的方法进行数据恢复,最后检验和评估是否恢复完整。”
华生·K展示了一张图:
为了周末不加班,必须使出杀手锏
福尔摩斯·K:“任何时候,有备份是一切数据安全的前提,无论是oracle数据库,还是IBM的Informix数据库,要对数据坏块损坏进行修复,都要建立在有效备份的基础之上。”
Z先生连连点头,“原来如此,看来我还得多多学习,万一再遇到数据坏块,也有能力应对”。
“你可以选择一种更快速、高效的恢复方法。主备流复制集群中,主数据库访问持久化用户表数据、索引时,从磁盘读取数据块到共享缓冲区,如果检测到坏块,就会自动从备节点获取坏块的副本,并修复坏块。”福尔摩斯·K对Z说。
Z顿时倍感兴趣:“还有这种办法吗?怎么样能做到呢?”
华生·K完成了检验和评估的收尾工作,转过身来说到:“很简单,人大金仓KingbaseES数据库auto_bmr工具就能实现这个功能,让主备复制这种架构发挥其高可用的特性,提升数据块坏块的恢复效率。”
Z惊叹不已,说道:“还能自动恢复,这也太方便了,请福尔摩斯·K先生务必教我使用KingbaseES数据库的auto_bmr!”
福尔摩斯·K打开了数据库,“先检查数据库对auto_bmr extension的支持。”接着执行了如下命令:
“数据库是支持auto_bmr extension的。接下来就是创建auto_bmr extension了。”福尔摩斯说道,又在电脑上执行了创建命令。
创建成功,此时可以查看auto_bmr的配置了:
注:auto_bmr的配置参数说明
通过查看上面这些参数,福尔摩斯·K便确定已经开启了auto_bmr了,但他还需要进行一些测试来验证这个功能。
“那么接下来,就模拟一下主数据库数据块障碍吧,当然,是在我自己实验用的集群上。”福尔摩斯·K活动了一下手指,准备大展拳脚。
先执行以下操作,查看表存储信息:
“表格正常,开始模拟表数据文件块故障。”
查看是否模拟成功,先重启数据库服务清理缓存:
重启完成后,福尔摩斯·K再次执行了表数据查询,然后界面上就出现了以下信息:
可以看到出现了故障,在执行自动修复时,无法识别function。
“进展很顺利啊。”华生·K说道。
福尔摩斯·K会心一笑,回道:“是啊,接下来就是创建auto_bmr的extension了。”
福尔摩斯·K调出主库的日志sys_log,日志中果然存在自动恢复的信息:
“成功了,来验证一下吧。交给你了,华生·K。”福尔摩斯·K一脸轻松地说道。
“没问题。”
华生·K分别在主库和备库上执行了查询操作:
“看,主库在表文件故障的情况下,我们通过auto_bmr功能读取备库数据实现了块修复。”华生·K笑着对Z说。
“太棒了,这个功能实在是太好用了。”Z先生很激动的说道,“我这就去给我们公司的数据库用上这个功能”。
“不过还有几个约束点要告诉你:
1.只支持主库自动块修复,需要将auto_bmr.enable_auto_bmr参数设置为1,并且需要创建auto_bmr扩展插件;
2.如果checksum没有打开,只检测块的头部是否有效;cheksum打开时,会同时检查块的头部和块数据是否有效;
3.如果开启了zero_damaged_pages,这个参数会在块修复结束后才生效。”
“华生·K说得没错,使用时注意这几点就没问题。”
金仓数据库auto_bmr让你的周末不被打扰
坐在回家的车上,福尔摩斯·K和华生·K讨论起这次故障。
“结合实际的业务场景,在主备复制这种架构下,当主库出现物理坏块时,启用auto_bmr功能后,可以快速地通过备库的数据块修复主库的物理坏块,解决数据坏块恢复的复杂问题,并提升业务数据的安全性。”
“是的,华生·K。数据存储的安全,是数据库最基本的功能。保证用户业务数据的安全,是数据库最基本的需求之一。当出现数据存储故障时,快速恢复数据也是对数据库管理最基本的诉求。人大金仓KingbaseES数据库 auto_bmr工具通过主备复制的高可用架构,有效提升集群架构中数据坏块恢复的效率,这对确保用户业务数据的安全来说,难道不是一件大大的好事吗?”
福尔摩斯·K望着屏幕外的你,开口道:“我说得对吗,朋友?”
供稿:产品研发中心
编辑:王堇
审核:日尧