1、自动坏块修复简介

主数据库访问系统表数据、索引、持久化用户表数据、索引时,从磁盘读取数据块至共享缓冲区,如果检测到坏块,自动从备节点获取坏块的副本,并修复坏块。

坏块修复相关参数

参数名称 默认值 参数描述
auto_bmr.auto_bmr_max_sess 5 设置自动坏块修复最大的会话数
auto_bmr.auto_bmr_req_timeout 60 设置自动修复坏块超时时间,超过时间则推出自动修复
auto_bmr.auto_bmr_sess_threshold 100 单个会话最大坏块数量阈值超过则不启动自动修复
auto_bmr.auto_bmr_sys_threshold 1024 系统最大坏块数量阈值超过则不启动自动修复
auto_bmr.enable_auto_bmr on 是否开启自动坏块修复

开启坏块修复

首选需要创建坏块修复扩展

kingbase=# create extension auto_bmr; CREATE EXTENSION kingbase=# show auto_bmr.enable_auto_bmr; AUTO_BMR.ENABLE_AUTO_BMR

on (1 行记录)

可以看到创建扩展后,默认的bmr状态已经开启。

同时也要注意在自动坏块修复过程中是有上限的,通过auto_bmr.auto_bmr_req_timeout、auto_bmr.auto_bmr_sess_threshold、 auto_bmr.auto_bmr_sys_threshold

其中auto_bmr.auto_bmr_req_timeout控制坏块修复的超时时间

auto_bmr.auto_bmr_sess_threshold和auto_bmr.auto_bmr_sys_threshold控制会话和系统级别坏块修复的page数量的阈值

如果达到了数量限制我们可以使用

select reset_auto_bmr_sys_bad_blk();

reset_auto_bmr_sess_bad_blk();

两个函数重置相关数量限制。

自动坏块修复实操步骤

检查集群状态

[kingbase@localhost bin]$ repmgr cluster show

ID | Name | Role | Status | Upstream | Location | Priority | Timeline | LSN_Lag | Connection string

----+-------+---------+-----------+----------+----------+----------+----------+---------+---------------------------------------------------------------------------

1 | node1 | primary | * running | | default | 100 | 3 | | host=192.168.56.101 user=esrep dbname=esrep port=54321 connect_timeout=10

2 | node2 | standby | running | node1 | default | 100 | 3 | 0 bytes | host=192.168.56.103 user=esrep dbname=esrep port=54321 connect_timeout=10

创建测试表 并插入数据

[kingbase@localhost bin]$ ksql -U system kingbase

ksql (V8.0)

输入 "help" 来获取帮助信息.

kingbase=# drop table t1;

DROP TABLE

kingbase=# create table t1 (id int,name varchar2(100));

CREATE TABLE

kingbase=# insert into t1 values(generate_series(1,100000),now());

INSERT 0 100000

查看该测试表对应物理文件

kingbase=# select * from sys_relation_filepath('t1');

sys_relation_filepath

base/12178/74951

执行sh sys_monitor.sh stop停止集群

[kingbase@localhost bin]$ sh sys_monitor.sh stop 2023-06-16 10:04:57 Ready to stop all DB ... Service process "node_export" was killed at process 4623 Service process "postgres_ex" was killed at process 4624 Service process "node_export" was killed at process 3588 Service process "postgres_ex" was killed at process 3589 2023-06-16 10:05:01 begin to stop repmgrd on "[192.168.56.101]". 2023-06-16 10:05:02 repmgrd on "[192.168.56.101]" stop success. 2023-06-16 10:05:02 begin to stop repmgrd on "[192.168.56.103]". 2023-06-16 10:05:02 repmgrd on "[192.168.56.103]" stop success. 2023-06-16 10:05:02 begin to stop DB on "[192.168.56.103]". 等待服务器进程关闭 .... 完成 服务器进程已经关闭 2023-06-16 10:05:03 DB on "[192.168.56.103]" stop success. 2023-06-16 10:05:03 begin to stop DB on "[192.168.56.101]". 等待服务器进程关闭 .... 完成 服务器进程已经关闭 2023-06-16 10:05:04 DB on "[192.168.56.101]" stop success. 2023-06-16 10:05:04 Done. [kingbase@localhost bin]$

集群停止成功后,使用dd命令构造两个坏块

[kingbase@localhost bin]$ dd bs=8192 count=2 seek=1 of=/data/V8cluster/base/12178/74944 if=./kingbase conv=notrunc 记录了2+0 的读入 记录了2+0 的写出 16384字节(16 kB)已复制,0.000178303 秒,91.9 MB/秒 [kingbase@localhost bin]$

执行 sh sys_monitor.sh start启动集群

连接数据库,查询表,此时由于存在坏块,查询失败,报错提示

kingbase=# select * from t1;

WARNING: page is invalid: base/12178/74944, blockNum: 1

WARNING: Exec get buffer page failed,errMsg:ERROR: function public.get_lsn_reached_page(integer, integer, integer, integer, integer, integer) does not exist

LINE 1: select public.get_lsn_reached_page(1663, 12178, 74944, 0, 1,...

^

HINT: No function matches the given name and argument types. You might need to add explicit type casts.

WARNING: repair invalid page: base/12178/74944, block: 1 failed.

ERROR: invalid page in block 1 of relation base/12178/74944

kingbase=#

连接数据库创建插件auto_bmr;

create extension auto_bmr ;

再次执行查询,会进行坏块自动修复,并返回查询结果

kingbase=# select * from t1;

WARNING: page is invalid: base/12178/74951, blockNum: 1

WARNING: repair invalid page:base/12178/74951, blockNum: 1 successfully.

WARNING: page verification failed, calculated checksum 57120 but expected 17157

WARNING: page is invalid: base/12178/74951, blockNum: 2

WARNING: repair invalid page:base/12178/74951, blockNum: 2 successfully.

id | name

--------+-------------------------------

1 | 2023-06-16 10:12:50.601743+08

2 | 2023-06-16 10:12:50.601743+08

3 | 2023-06-16 10:12:50.601743+08

kingbaseES坏块修复功能的更多相关文章

  1. 【转载】 使用rman进行坏块修复(ORA-01578、ORA-01110)

    [转自]http://blog.itpub.net/21256317/viewspace-1062055/ 使用rman进行坏块修复(ORA-01578.ORA-01110) 2012年的一天,处理的 ...

  2. Oracle - 坏块修复(一)

    一.概述 本文将介绍如何模拟坏块,以及出现坏块该如何修复.实验分为以下几个步骤. 1. 表出现坏块 2. 索引出现坏块 二.环境准备 本实验都是在oracle 11G归档模式下进行. 1. 准备相关表 ...

  3. Oracle--DBV命令行工具用法详解及坏块修复

    一,介绍 DBV(DBVERIFY)是Oracle提供的一个命令行工具,它可以对数据文件物理和逻辑两种一致性检查.但是这个工具不会检查索引记录和数据记录的匹配关系,这种检查必须使用analyze va ...

  4. 13 oracle数据库坏块-逻辑坏块(模拟/修复)

    13 oracle数据库坏块-逻辑坏块 逻辑数据坏块的场景1)oracle bug也可能导致逻辑坏块的产生. 特别是parallel dml. 例如:Bug 5621677 Logical corru ...

  5. 使用 DBMS_REPAIR 修复坏块

    对于Oracle数据块物理损坏的情形,在我们有备份的情况下可以直接使用备份来恢复.对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等.对于这几种方式我们需要 ...

  6. 无备份时用dbms_repair恢复坏块的方法

    份的情况下可以直接使用备份来恢复. 对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等. 对于这几种方式我们需要实现基于数据库以及文件级别的恢复.RMAN同 ...

  7. PIE SDK影像坏线修复

    1.算法功能简介 坏条带的由来:2003年5月31日,Landsat-7ETM+机载扫描行校正器(SLC) 故障,导致此后获取的影像出现了数据条带丢失,严重影响了Landsat ETM遥感影像的使用. ...

  8. BBED标记坏块以及修复坏块

    创建測试表: ZBDBA@orcl11g>select * from zbdba; NAME -------------------------------------------------- ...

  9. PostgreSQL 恢复大法 - 恢复部分数据库、跳过坏块、修复无法启动的数据库

    转载自:https://yq.aliyun.com/articles/582880 背景 一个较大的数据库,如何只恢复一部分数据(例如只恢复某个DB). 如果访问有坏块的表. 如何从无法启动的数据库中 ...

  10. Oracle数据库坏块的恢复

    模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发 ...

随机推荐

  1. 微信小程序云开发项目-个人待办事项-03【主页】模块开发

    上一篇: 微信小程序云开发项目-个人待办事项-02今日模块开发 https://blog.csdn.net/IndexMan/article/details/124497893 模块开发步骤 本篇介绍 ...

  2. Vue+ElementUI实现用户管理前后分离实战一:前端篇

    项目介绍 前几天有老铁问我能不能写一个Vue+ElementUI+SpringBoot后端的前后分离项目,最近有点忙,但今天他还是来了!希望对大家能有点帮助,大家还想要点啥也可以加我QQ或给我留言 : ...

  3. vs 工程中替换 Qt 静态库

    上篇介绍了如何编译 Qt 静态库 编译 windows 上的 qt 静态库 这篇介绍如何替换已有的 Qt 静态库,比如 Qt5.15.0 有很多 bug,我们不得不提升 Qt 版本来避免 bug 导致 ...

  4. 【WiFi开发全攻略】WIFI基础知识大全

    [WiFi开发全攻略]WIFI基础知识大全 1. Wi-Fi起源 现在我们大家对Wi-Fi肯定都不陌生,无论是笔记本,手机,智能电视,都离不开Wi-Fi.目前我们一般用的都是Wi-Fi5,Wi-Fi6 ...

  5. sql判断字符串中含中文方法

    基于UTF-8字符集 它是一种多字节字符集,编码为变长编码.那么它的编码范围根据:http://www.iteye.com/topic/977671 作者提供的资料学习,整理出它编码范围如下: u2e ...

  6. 【LeetCode数组#5行为模拟】螺旋矩阵II+I

    螺旋矩阵II 力扣题目链接(opens new window) 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ ...

  7. 【Azure 应用服务】如何定期自动重启 Azure App Service Plan(应用服务计划)

    问题描述 如何定期自动重启 Azure App Service Plan(应用服务计划)? 因一个App Service Plan 下包含多个应用服务,如果能统一通过应用服务计划来重启所有的应用,则有 ...

  8. 一文了解 NebulaGraph 上的 Spark 项目

    本文首发于 Nebula Graph Community 公众号 最近我试着搭建了方便大家一键试玩的 Nebula Graph 中的 Spark 相关的项目,今天就把它们整理成文分享给大家.而且,我趟 ...

  9. 浅析图数据库 Nebula Graph 数据导入工具——Spark Writer

    从 Hadoop 说起 近年来随着大数据的兴起,分布式计算引擎层出不穷.Hadoop 是 Apache 开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用.Hadoop 的设计核心思想 ...

  10. Python 潮流周刊第 40 期(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...