WalMiner插件之xlog解析恢复使用教程

news2024/11/24 15:52:52

WalMiner插件主要有两个功能,在此记录一下第二个功能数据页挽回(坏块修复),学习一下关于这块的使用方法,方便日后回顾。

1 环境搭建

  1. 创建WalMiner的extension
create extension walminer;

在这里插入图片描述

语句解析: 该句SQL功能是安装一个扩展,详细用法如下:

CREATE EXTENSION [ IF NOT EXISTS ] extension_name
    [ WITH ] [ SCHEMA schema_name ]
             [ VERSION version ]
             [ FROM old_version ]

描述

create extension命令安装一个新的扩展到一个数据库中,必须保证没有同名的扩展已经被安装。

安装一个扩展意味着执行一个扩展的脚本文件,这个脚本会创建一个新的SQL实体,如函数,数据类型,操作符,和索引支持的方法。

参数

[ IF NOT EXISTS ] 表示如果系统已经存在一个同名的扩展,不会报错。
extension_name:将被安装扩展的名词。PostgresSQL从SHAREDIR/extension/extension_name.control这个文件安装扩展.
schema_name:扩展的实例被安装在该模式下,扩展的内容可以被重新安装.指定的模式必须已经存在.如果没有指定,扩展的控制文件也不指定一个模式,这样将使用默认模式.

【知识扩展】

PostgreSQL设计为易于扩展,因此,加载到数据库中的扩展功能可以像内置的特性一样运行。扩展是独立开发的,要想使用扩展功能,将其源码放进数据库/contrib目录下,编译安装即可使用。

contrib模块

此模块又称为扩展(extensions)。此方法适用于所有使用扩展规范构建的contrib模块,包括如下:

  • 扩展SQL文件( extension_name.sql )
  • 扩展控制文件 ( extension_name.control )
  • 扩展库文件(extension_name.so)

检查是否安装了contrib模块的好方法是查看pgbench程序是否可用。
切换成postgres用户,在unix系统下检查pgbench:

[postgres@Centos7 ~]$ pgbench -V

在这里插入图片描述

  1. 添加要解析的wal日志文件
    我的wal log 路径:
    “/usr/local/pgsql/data/pg_wal/000000010000000000000002”
-- 添加wal文件:
select walminer_wal_add('/usr/local/pgsql/data/pg_wal');
-- 注:参数可以为目录或者文件

在这里插入图片描述

  1. list wal日志文件
-- 列出wal文件:
![select walminer_wal_list();]

在这里插入图片描述

2 SQL执行

执行以下SQL,再执行truncate ,就可以实现数据挽回功能。

DROP EXTENSION IF EXISTS walminer;
CREATE EXTENSION IF NOT EXISTS walminer;

DROP TABLE t1;
DROP TABLE t2;
SELECT walminer_stop();
CREATE TABLE t1(i int, j int, k varchar);
CREATE TABLE t2(i int, j int, k varchar);

INSERT INTO t1(i,j,k) SELECT generate_series(1,157),1,'PostgreSQL';
INSERT INTO t1(i,j,k) SELECT generate_series(1,157),2,'PostgreSQL';
INSERT INTO t1(i,j,k) SELECT generate_series(1,157),3,'PostgreSQL';
DELETE FROM t1 WHERE j = 1 AND NOT( ctid >= '(0,1)' AND ctid <= '(0,157)');
DELETE FROM t1 WHERE j = 2 AND NOT( ctid >= '(1,1)' AND ctid <= '(1,157)');
DELETE FROM t1 WHERE j = 3 AND NOT( ctid >= '(2,1)' AND ctid <= '(2,157)');

SELECT count(*) AS count1_1 FROM t1 WHERE j = 1 \gset
SELECT count(*) AS count2_1 FROM t1 WHERE j = 2 \gset
SELECT count(*) AS count3_1 FROM t1 WHERE j = 3 \gset

SELECT relfilenode AS node_in_datadict FROM pg_class WHERE relname = 't1' \gset
SELECT oid AS oid_in_curdb FROM pg_class WHERE relname = 't2' \gset
SELECT setting  AS pgdata  FROM pg_settings WHERE name = 'data_directory' \gset
SELECT :'pgdata' || '/pg_walminer/wm_datadict/dictionary.d' AS path \gset
SELECT pg_walfile_name(pg_current_wal_lsn()) AS walfile_name \gset
SELECT :'pgdata' || '/pg_wal/' || :'walfile_name' AS walfile_path \gset

SELECT walminer_build_dictionary(:'path');
SELECT walminer_load_dictionary(:'path');

SELECT walminer_wal_add(:'walfile_path');
SELECT walminer_regression_mode();
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TRUNCATE t2;
SELECT page_collect(:'node_in_datadict', :'oid_in_curdb', '0');
SELECT count(*) AS count1_2 FROM t2 WHERE ctid >= '(0,1)' AND ctid <= '(0,157)' \gset
SELECT count(*) AS count2_2 FROM t2 WHERE ctid >= '(1,1)' AND ctid <= '(1,157)' \gset
SELECT count(*) AS count3_2 FROM t2 WHERE ctid >= '(2,1)' AND ctid <= '(2,157)' \gset

SELECT :'count1_1' = :'count1_2';
SELECT 0 = :'count2_2';
SELECT 0 = :'count3_2';

3 执行数据挽回

SQL用法:

select page_collect(relfilenode, reloid, pages)

描述

relfilenode:需要解析的wal日志中的relfilenode

reloid:解析库中存在的表的OID,此命令将会将从wal中找到的page覆盖到reloid制定的表中

pages:是字符串类型,制定想要挽回的目标page。格式为’0,1,2,7’或者’all’。

SELECT page_collect("node_in_datadict", "oid_in_curdb", "0");

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux用户管理相关命令(全)

1、Linux用户(账号)管理 查询用户(账号)信息&#xff08;判断用户(账号)是否存在&#xff09; id account新增用户(账号) useradd account设置用户(账号)密码 方式1&#xff1a; passwd account 方式2&#xff1a; echo 123|passwd --stdin account; #密码为123删除用户(账…

CMS 8bit单片机C语言编写指南

0 Preface/Foreword 单片机包含两部分&#xff1a;程序内存&#xff08;Program memory space&#xff09;和数据存储器(Ram memory space)。 CMS单片机堆栈深度受限&#xff0c;随具体的芯片而固定。 1 CMS C程序框架及数据类型 1.1 源程序基本框架 Example: 1.2 CMS C中变…

【JS】获取 Headers 头部信息

一、应用场景 当我们请求一个接口的时候&#xff0c;会发现 res 里面包含一个 headers 响应头信息&#xff1a; fetch(url, {method: GET,headers: {content-type: application/json,X-Requested-With: XMLHttpRequest,},mode: cors,credentials: include,}).then(res > {…

【算法】字符串转int类型思路及代码

文章目录 题目分析思路完整代码 题目 给你一个字符串&#xff0c;如何这个字符串符合日常的整形的书写规范&#xff0c;那么我们需要写出将其转化为int类型的方法&#xff0c;并且不能使用Java提供的API&#xff0c;比如parseInt方法。 分析 这道题考察的其实就是parseInt的…

亚马逊测评:提升产品排名、权重和销量的秘诀

亚马逊是全球最大的在线零售平台&#xff0c;覆盖了世界各地主要国家和地区&#xff0c;而随着平台商家的不断增加&#xff0c;为了提高自身排名&#xff0c;很多卖家开始寻找人员为他们的店铺和产品进行有偿评价&#xff0c;从而催生了亚马逊测评行业 亚马逊测评&#xff0c;…

笔试强训 Day6

选择题 1.十进制变量i的值为100&#xff0c;那么八进制的变量i的值为&#xff08;&#xff09; A 146 B 148C 144 D 142 本题很简单&#xff1a;100除8&#xff0c;取余数&#xff0c;直到商为零&#xff0c;最后反向的串起余数即可 2.执行下面语句后的输出为&#xff08;&…

从传统开发到低代码:这是一次技术革命

近年来&#xff0c;随着人工智能等新兴技术的快速发展&#xff0c;软件开发行业也在不断演变。传统的软件开发流程需要大量的编程知识和时间&#xff0c;而且往往需要复杂的架构和开发环境。然而&#xff0c;随着低/无代码平台的出现&#xff0c;软件开发变得更加高效、简单和普…

服务(第三十篇)elk-elasticsearch、logstash、kiabana

rsyslog 服务器较少时使用&#xff0c;rsyslog日志收集&#xff0c;统一存放在专门存放日志的收集器中&#xff1b; ELK 简介 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用…

产品经历、运营人员必看:高效产品帮助文档撰写指南

产品帮助文档是产品的重要组成部分&#xff0c;它对于产品的用户体验和产品的成功至关重要。帮助文档可以帮助用户更好地理解产品的功能和使用方法&#xff0c;提高用户的满意度和使用效率。同时&#xff0c;帮助文档还可以减轻客服和技术支持的工作负担&#xff0c;提高客服和…

Spring Boot 中如何使用 Spring Security OAuth2 来实现单点登录

Spring Boot 中如何使用 Spring Security OAuth2 来实现单点登录 简介 在现代 Web 应用程序中&#xff0c;单点登录&#xff08;Single Sign-On&#xff0c;简称 SSO&#xff09;是一个非常重要的功能。Spring Security OAuth2 是 Spring Security 框架的一个扩展&#xff0c…

Ubuntu宝塔显示磁盘被占满的解决方法

操作方法&#xff1a; 连接成功 Last login: Sat Mar 25 03:04:00 2023 from 192.168.153.1 rootubuntu:~# lvm lvm> lvextend -l 100%FREE /dev/mapper/ubuntu-vg/ubuntu-lv skip_dev_dir: Couldnt split up device name ubuntu-vg/ubuntu-lv. Size of logical volum…

Windows中的Tomcat服务器安装证书并设置强制https访问

官网参考 阿里云 华为云 获取证书 自己生成证书 这边介绍一个生产开发环境证书的方式&#xff1a;使用 Java 提供的工具&#xff1a;keytool keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "d:\tomcat.keystore" Tomcat服…

Golang变量初始

Golang变量初始 采用文章 本章使用go练习工具 https://tour.go-zh.org/welcome/13.1 为什么需要变量 3.1.1一个程序就是一个世界 3.1.2变量是程序的基本组成单位 不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位&#xff0c;比如一个示意图 3.2 变量的介…

专门用于管理企业与自己客户之间所有信息的客户管理系统

一、开源项目简介 关于 NXCRM NXCRM 是一套基于 Laravel 的 CRM 应用程序。它包含了一个管理中心&#xff0c;可以管理用户、客户、产品、订单、商机&#xff0c;合同&#xff0c;收款&#xff0c;附件&#xff0c;联系人&#xff0c;跟进动态&#xff0c;发票&#xff0c;业…

近年GDC服务器分享合集(二): 《太空工程师》中基于预测物理的多人游戏

客户端-服务端之间的位置同步一直是游戏开发中的一道难题&#xff0c;特别是还涉及到复杂的物理运动时。对于这个话题&#xff0c;来自《太空工程师》游戏的工程师在GDC 2023上为我们带来了他们的分享——《《太空工程师》中基于预测物理的多人游戏》&#xff08;Predicted Phy…

在 openEuler 22.03 上安装 KubeSphere 实战教程

作者&#xff1a;老 Z&#xff0c;中电信数智科技有限公司山东分公司运维架构师&#xff0c;云原生爱好者&#xff0c;目前专注于云原生运维&#xff0c;云原生领域技术栈涉及 Kubernetes、KubeSphere、DevOps、OpenStack、Ansible 等。 前言 导图 知识点 定级&#xff1a;入…

域泛化(Domain Generalization)相关知识学习

文章目录 一、域泛化综述1&#xff09;Domain定义2&#xff09;Domain Generalization&#xff08;DG&#xff09;定义3&#xff09;一些相关领域与DG的区别4&#xff09;领域泛化的方法表示学习领域不变表示学习①基于核的方法&#xff08; kernel-based methods&#xff09;②…

python自动化(一)基础能力:9.yaml文件详解

一、什么是yaml文件 yaml 是专门用来写配置文件的语言——可以用例作为自动化框架的配置文件yaml文件其实也是一种配置文件类型&#xff0c;后缀名是.yaml或.yml都可以个人认为比yaml比json格式更方便 二、yaml语法规则 YAML 语言&#xff08;发音 /ˈjməl/ &#xff09;的设…

电力应急指挥需要哪些终端设备?

在电力应急现场&#xff0c;我们可能会面临很多复杂的情况&#xff0c;当发生电力险情时&#xff0c;现场可能会面临断电、断网、无路等问题。此时应急指挥中心很难第一时间掌控现场情况&#xff0c;指挥中心无法快速做出反应&#xff0c;无法对现场情况做出高效的应急处置决定…

Spring Boot源码中设计模式应用浅析

文章目录 1. 工厂模式1.1 详解 DefaultListableBeanFactory 2. 单例模式1.1 详解 DefaultSingletonBeanRegistry 3. 观察者模式4. 适配器模式5. 模板方法模式 背景&#xff1a;大家好&#xff0c;我是冰点。最近有网友反馈&#xff0c;他在面试过程中被面试官问到&#xff0c;设…