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. 如何获取oracle dbid

    1.查询v$database获得 由于DBID在控制文件和数据文件中都存在记录,所以如果能够mount数据库就可以查询v$database视图获得.  SQL> alter database m ...

  2. 使用JS实现博客搜索关键字高亮

    说明 最近博客添加了搜索功能,有个需求是要针对搜索结果中搜索关键字需要高亮显示. 以便用户可以更快速的挑选自己中意的文章. 原理就是在渲染列表数据中给含有关键字的文本标签添加自定义class,渲染完毕 ...

  3. 实操开源版全栈测试工具RunnerGo安装(一)

    Docker版安装文档 一.环境要求​ 1.1 部署服务器要求​ 操作系统:任何支持 Docker 的 Linux x86 CPU内存:最低要求 4C8G,推荐 8C16G 网络要求:可访问互联网 ​ ...

  4. leetcode 平衡二叉树

    给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 . 示例 1: 输入:root = [3,9,20,n ...

  5. 硬件开发笔记(八): 硬件开发基本流程,制作一个USB转RS232的模块(七):创建基础DIP元器件(晶振)封装并关联原理图元器件

    前言   有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了创建晶振封装(DIP),将原理图的 ...

  6. Gin框架入门

    参考文档 Gin: https://gin-gonic.com/zh-cn/docs/quickstart/ net/http: https://pkg.go.dev/net/http 代码分析 pa ...

  7. ASP.NET Core 微信支付(四)【支付结果通知回调(未按照官方步骤) APIV3】

    官方文档 支付通知API 证书和回调报文解密 参考资料 netcore 中没有Request.InputStream 理论实战 对于我来说,这个微信支付结果通知回调有两个难点. 难点一 一开始在想是怎 ...

  8. 【LeetCode回溯算法#03】电话号码的字母组合(数字映射字母)

    电话号码的字母组合 力扣题目链接(opens new window) 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任 ...

  9. Linux的这些命令你需要掌握

    查看进程: 查看所有进程:ps -ef 查看指定的进程: ps -ef|grep pid(进程号) 查看前40个内存占用的进程: ps auxw|head -1;ps auxw|sort -rn -k ...

  10. 【Azure 应用服务】Azure Function App在部署时候遇见 503 ServiceUnavailable

    问题描述 在VS Code中编写好 Azure Function App代码后,通过  func azure functionapp publish 部署失败,抛出 503 Service Unava ...