案例说明:

复现用户删除表(drop table)误操作,通过wal日志解析找到误操作时间点,执行基于时间点的恢复(PITR)。

适用版本:

KingbaseES V8R6

一、模拟业务现场操作

1、查看当前对象信息

prod=# \d
List of relations
Schema | Name | Type | Owner
--------+---------------------+-------+--------
public | dual | view | system
public | sys_stat_statements | view | system
public | t_centerprises | table | system
public | t1 | table | system
public | TB1 | table | system
public | tb2 | table | system
public | tbl_test | table | system
(7 rows)

2、执行事务操作

prod=# select count(*) from t1;
count
-------
10000
(1 row) prod=# insert into t1 values(generate_series(1001,2000),'usr'||generate_series(1001,2000));
INSERT 0 1000
prod=# select count(*) from t1;
count
-------
11000
(1 row) # 当前wal对应lsn
prod=# select sys_current_wal_lsn();
sys_current_wal_lsn
---------------------
0/3D000058
(1 row) prod=# insert into t1 values(generate_series(11001,20000),'usr'||generate_series(11001,20000));
INSERT 0 9000 prod=# select count(*) from t1;
count
-------
20000
(1 row) # 查看数据库当前wal日志文件
prod=# select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());
pg_current_wal_lsn | pg_walfile_name | pg_walfile_name_offset
--------------------+--------------------------+-----------------------------------
0/3D0A5090 | 00000001000000000000003D | (00000001000000000000003D,675984)
(1 row) # 用户误删除表
prod=# drop table t1;
DROP TABLE

二、查看当前数据库的物理备份

如下图所示:以下是用户误操作时间点之前的物理备份。

三、sys_waldump解析wal日志(查看误操作准确时间点)

Tips:

对于用户的误操作,要执行PITR的恢复,需要找到误操作的准确时间点,在生产环境中,可以根据误操作大概的时间点,对时间点前后的归档及在线日志进行解析,本案例为了简化操作,只解析了一个wal日志。

[kingbase@node102 sys_wal]$ /opt/Kingbase/ES/V8R6_C6/Server/bin/sys_waldump 00000001000000000000003D -s '0/3D000058'

1、Insert操作日志解析

prod=#  select oid,relname from sys_class where oid=16500;
oid | relname
-------+---------
16500 | t1
(1 row)

2、更新pg_statistic系统表日志

prod=#  select oid,relname from sys_class where oid=2696 or oid=2619;
oid | relname
------+----------------------------------
2619 | pg_statistic
2696 | pg_statistic_relid_att_inh_index
(2 rows)

3、drop table日志解析

# drop table 将清理系统表中对象的信息
prod=# select oid,relname from sys_class where oid=2608;
oid | relname
------+-----------
2608 | pg_depend
(1 row)

=如上图所示,从wal日志中可以解析到‘drop table’事务commit的时间点,“COMMIT 2022-09-27 11:09:45.005736 CST”,可以以此时间点作为PITR恢复的时间点,来恢复用户误删除的表。=

四、执行基于时间点(PITR)恢复

Tips:

对于生产环境可以异地恢复,在另外的实例执行PITR的恢复,将恢复出的数据,再导入到生产实例中。本案例是从本实例恢复,需要将数据库服务关闭。

1、关闭数据库服务并备份数据库文件

[kingbase@node102 bin]$ ./sys_ctl stop -D /data/kingbase/v8r6_c6/data
[kingbase@node102 v8r6_c6]$ mv data data.bk

2、执行PIRT恢复

[kingbase@node102 bin]$ /opt/Kingbase/ES/V8R6_C6/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=king  --type=time --target='2022-09-27 11:09:45'  restore

.......
2022-09-27 13:34:05.234 P00 INFO: Restore Process: FILE: 2605 / 2605 100% SZIE: 105160230 bytes / 105160230 bytes 100.3MB / 100.3MB 100%
2022-09-27 13:34:05.239 P00 INFO: write updated /data/kingbase/v8r6_c6/data/kingbase.auto.conf
2022-09-27 13:34:05.244 P00 INFO: restore global/sys_control (performed last to ensure aborted restores cannot be started)
2022-09-27 13:34:05.245 P00 INFO: restore size = 100.3MB, file total = 2605
2022-09-27 13:34:05.246 P00 INFO: restore command end: completed successfully (2308ms)

3、查看恢复后的数据

1)查看kingbase.auto.conf配置

[kingbase@node102 data]$ cat kingbase.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command. # Recovery settings generated by sys_rman restore on 2022-09-27 13:39:58
restore_command = '/opt/Kingbase/ES/V8R6_C6/KESRealPro/V008R006C006B0013/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=king archive-get %f "%p"'
recovery_target_time = '2022-09-27 11:09:45'

2)启动数据库服务

[kingbase@node102 bin]$ ./sys_ctl start -D /data/kingbase/v8r6_c6/data

3)查看sys_log日志

4)查看恢复后的数据

5)清理kingbase.auto.conf文件后重启数据库

[kingbase@node102 bin]$ ./sys_ctl restart -D /data/kingbase/v8r6_c6/data

四、总结

对于归档模式的数据库在数据库备份及wal日志(归档和在线)保存完整的情况下,可以通过基于时间点的恢复操作,恢复用户的误操作丢失的数据。对于用户误操作的时间点,可以借助wal日志的解析获取到准确的事务操作的时间点。

KingbaseES V8R6备份恢复案例之---sys_waldump解析wal日志PITR恢复的更多相关文章

  1. KingbaseES通过sys_waldump解析wal日志

    前言 oracle中的redo日志我们无法直接读取,然而对于KingbaseES数据库,我们可以利用sys_waldump工具解析wal日志,查看wal日志记录的信息. 我们可以利用 sys_wald ...

  2. KingbaseES V8R6备份恢复案例之---自定义表空间指定恢复目录数据恢复

    案例说明: KingbaseES V8R6在通过sys_rman执行物理备份恢复时,可以通过参数'--kb1-path',指定恢复的数据(data)目录,但如果原备份中包含自定义表空间时,需要建立表空 ...

  3. KingbaseES V8R6备份恢复案例之---同一数据库创建不同stanza备份

    案例说明: 在生产环境,有的应用需要调用数据库的sys_rman做备份,为了区分数据库自身的sys_rman备份和应用的备份,可以使用不同的stanza name创建备份.本案例介绍了,如何在King ...

  4. KingbaseES V8R6备份恢复案例之--删除test数据库后sys_backup.sh备份

    案例说明: KingbaseES V8R6通过sys_backup.sh执行物理备份,默认sys_backup.sh执行备份初始化时,需要连接test数据库进行身份的认证:在一些生产环境为了安全需求, ...

  5. KingbaseES V8R6备份恢复案例之---手工清理冗余历史备份

    案例说明: 对于KingbaseES V8R6的通过sys_rman执行的物理历史备份,可以在执行备份时,备份的保留(retention)策略自动清理.不能通过手工删除备份,可以通过expire参数手 ...

  6. KingbaseES V8R3集群管理和维护案例之---failover切换wal日志变化分析

    ​ 案例说明: 本案例通过对KingbaseES V8R3集群failover切换过程进行观察,分析了主备库切换后wal日志的变化,对应用者了解KingbaseES V8R3(R6) failover ...

  7. KingbaseES V8R6 维护管理案例之---Kstudio在CentOS 7启动故障

    ​ 案例说明: 在CentOS 7上安装KingbaseES V8R6C006数据库后,启动Kstudio图形界面启动失败,gtk动态库加载失败,安装gtk相关动态库后,问题解决. 适用版本: Kin ...

  8. Raid磁盘阵列更换磁盘时另一块盘离线恢复案例(v7000存储数据恢复)

    Raid磁盘阵列更换磁盘时另一块盘离线恢复案例(v7000存储数据恢复) [故障描述]客户设备型号为IBM V7000存储,架构为AIX+oracle+V7000存储阵列柜,需要恢复的数据主要存放在阵 ...

  9. KingbaseES在线wal日志

    KingbaseES数据库日志文件记录数据库的历史操作信息, 包含恢复数据库中的所有事务所需的信息. KingbaseES在线WAL日志: WAL日志: 预写式日志(Write-Ahead Loggi ...

  10. 执行PDB的PITR恢复失败的说明

    Oracle 12.1版本中,UNDO表空间仅存在CDB级别(共享UNDO),来自于AskScuti博客园. Oracle 12.2版本开始,UNDO表空间同时可以存在每个PDB级别(本地UNDO). ...

随机推荐

  1. React中refs的理解

    React中refs的理解 Refs提供了一种方式,允许我们访问DOM节点或在render方法中创建的React元素. 描述 在典型的React数据流中,props是父组件与子组件交互的唯一方式,要修 ...

  2. wsl 配置ubuntu apt源为阿里源

    $ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak $ sudo sed -i 's/security.ubuntu/mirrors.a ...

  3. win32 - 找出占用文件的进程id和name

    日常文件操作的时候,在删除或者移动某个文件的时候,发现它被某些进程占用了. 那么下面的代码就可以帮助我们找出这些进程的id和name. 原理: 将资源注册到Restart Manager会话.重新启动 ...

  4. 统信UOS系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.11.2,并配置编译测试Demo

    前言   上一篇已经从Qt源码编译了Qt,那么Qt开发的IDE为QtCreator,本篇从源码编译安装QtCreator,并配置好构建套件,运行Demo并测试.   统信UOS系统版本   系统版本: ...

  5. 微服务程序运行步骤及nameko入门案例

    首先一个微服务应用程序需要有服务的生产者和服务的消费者,另外还需要一个注册中心来管理和调度服务 1.服务提供方,即生产者启动服务,并将服务提交到注册中心注册服务 2.服务需求方,即消费者连接到注册中心 ...

  6. 在Directory.Build.props中用全局变量来管理包的版本号

    1.顶级目录下放置Directory.Build.props文件 为每个软件产品,分配一块独立的windows盘符,在根目录下放置名为Directory.Build.props的文件即可.这个文件名是 ...

  7. 读 NebulaGraph源码 | 查询语句 LOOKUP 的一生

    本文由社区用户 Milittle 供稿 LOOKUP 是图数据库 NebulaGraph 的一个查询语句.它依赖索引,可以查询点或者边的信息.在本文,我将着重从源码的角度解析一下 LOOKUP 语句的 ...

  8. Acwing第132场周赛

    AcWing 5366. 大小写转换 签到题,可以用stl里面的tolower函数 #include <bits/stdc++.h> #define ls p<<1 #defi ...

  9. dist目录打war包命令 jar -cvf yourName_web.war *

    进入dist目录 "build:war": "cd dist && jar -cvf ../yourName_web.war *",

  10. pandas DataFrame内存优化技巧:让数据处理更高效

    Pandas无疑是我们数据分析时一个不可或缺的工具,它以其强大的数据处理能力.灵活的数据结构以及易于上手的API赢得了广大数据分析师和机器学习工程师的喜爱. 然而,随着数据量的不断增长,如何高效.合理 ...