kingbaseES坏块修复功能
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坏块修复功能的更多相关文章
- 【转载】 使用rman进行坏块修复(ORA-01578、ORA-01110)
[转自]http://blog.itpub.net/21256317/viewspace-1062055/ 使用rman进行坏块修复(ORA-01578.ORA-01110) 2012年的一天,处理的 ...
- Oracle - 坏块修复(一)
一.概述 本文将介绍如何模拟坏块,以及出现坏块该如何修复.实验分为以下几个步骤. 1. 表出现坏块 2. 索引出现坏块 二.环境准备 本实验都是在oracle 11G归档模式下进行. 1. 准备相关表 ...
- Oracle--DBV命令行工具用法详解及坏块修复
一,介绍 DBV(DBVERIFY)是Oracle提供的一个命令行工具,它可以对数据文件物理和逻辑两种一致性检查.但是这个工具不会检查索引记录和数据记录的匹配关系,这种检查必须使用analyze va ...
- 13 oracle数据库坏块-逻辑坏块(模拟/修复)
13 oracle数据库坏块-逻辑坏块 逻辑数据坏块的场景1)oracle bug也可能导致逻辑坏块的产生. 特别是parallel dml. 例如:Bug 5621677 Logical corru ...
- 使用 DBMS_REPAIR 修复坏块
对于Oracle数据块物理损坏的情形,在我们有备份的情况下可以直接使用备份来恢复.对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等.对于这几种方式我们需要 ...
- 无备份时用dbms_repair恢复坏块的方法
份的情况下可以直接使用备份来恢复. 对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等. 对于这几种方式我们需要实现基于数据库以及文件级别的恢复.RMAN同 ...
- PIE SDK影像坏线修复
1.算法功能简介 坏条带的由来:2003年5月31日,Landsat-7ETM+机载扫描行校正器(SLC) 故障,导致此后获取的影像出现了数据条带丢失,严重影响了Landsat ETM遥感影像的使用. ...
- BBED标记坏块以及修复坏块
创建測试表: ZBDBA@orcl11g>select * from zbdba; NAME -------------------------------------------------- ...
- PostgreSQL 恢复大法 - 恢复部分数据库、跳过坏块、修复无法启动的数据库
转载自:https://yq.aliyun.com/articles/582880 背景 一个较大的数据库,如何只恢复一部分数据(例如只恢复某个DB). 如果访问有坏块的表. 如何从无法启动的数据库中 ...
- Oracle数据库坏块的恢复
模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发 ...
随机推荐
- 【Unity3D】UGUI之Toggle
1 Toggle属性面板 在 Hierarchy 窗口右键,选择 UI 列表里的 Toggle 控件,即可创建 Toggle 控件,选中创建的 Toggle 控件,按键盘[T]键,可以调整 Tog ...
- Java中的POJO是什么?
1.介绍 在这个简短的教程中,我们将研究"普通Java对象"(Plain Old Java Object)的定义,简称POJO.我们将看看POJO与JavaBean的比较,以及如何 ...
- 编译静态库遇到的 LNK2019 报错
前文提到了 CMake 学习 文末基本涵盖了我遇到的编译问题,但是在得到一个编译好的 .lib 文件后,还需要放到项目中引用成功后才算真正的完成静态库的编译 嗯,我之所以说这些是因为我在项目中链接静态 ...
- win32 - IFileDialog接口的使用
官方示例: CommonFileDialogModes.cpp 如果我们想要自己创建一个通用的文件对话框,则可以使用IFileOpenDialog接口,代码参考: HRESULT BasicFileO ...
- pikachu sql inject 时间盲注
输入框输入任何消息返回内容都是一样的 那么可以考虑插入sleep函数来观察响应时长来判断是否有注入点 输入 kobe' and sleep(3) # 发现页面缓冲3秒才响应,说明确实是注入点 通过if ...
- js结合canvas画任意多边形
实现六边形 // html <canvas></canvas> // js const canvas = document.querySelector("canvas ...
- RabbitMQ和RPC
消息队列 消息队列中间件 (Message Queue Middleware,简称 MQ) 是指利用高效可靠的消息传递机制进行与平台无关的数据交流,它可以在分布式环境下扩展进程间的数据通信,并基于数据 ...
- Java链接Mysql数据库整理,尽管很简单,但还是分享出来,希望对那些初级朋友有所帮助!!!
Java MySQL 连接 Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为: ...
- NebulaGraph is nothing without you | 社区 2023 年度人物合集
在去年的年度人物 回顾中,我们看到了形形色色的人们,他们当中有帮 NebulaGraph 捉 bug 的小能手,也有通过用回复来解答他人疑惑的启蒙者-在今年(2023 年),我们这个整点不一样的,将镜 ...
- java中StringBuffer与 StringBuilder 类
目录 创建 StringBuffer 类 追加字符串 替换字符 反转字符串 删除字符串 StringBuffer 方法 在 Java 中,除了通过 String 类创建和处理字符串之外,还可以使用 S ...