Print

[MVS]KINGBASE 基于事务ID的不完全恢复

7小时前 发表

配置步骤

--1、执行全备后,查看备份集信息。

$ sys_rman --cOnfig=/backup/rman/sys_rman.conf \

  --stanza=kingbase \

  --archive-copy \

  --type=full backup

  

[kingbase@kesv9 kingbase]$  sys_rman --cOnfig=/backup/rman/sys_rman.conf --stanza=kingbase info

stanza: kingbase

    status: ok

    cipher: none

 

    db (current)

        wal archive min/max (V009R001C001B0025): 000000010000000000000003/000000030000000000000010

        ………………

        full backup: 20250418-172037F

            timestamp start/stop: 2025-04-18 17:20:37 / 2025-04-18 17:20:39

            wal start/stop: 000000030000000000000010 / 000000030000000000000010

            database size: 86.0MB, database backup size: 86.0MB

            repo1: backup set size: 86.0MB, backup size: 86.0MB

 

--2、模拟误删除操作并执行不完全恢复。

--(1)开启事务,查看并记录事务ID。

--(2)创建t03表、录入数据、结束事务。

--(3)删除t03表。

$ ksql -Usystem -dtest

test=# 

BEGIN;

  SELECT txid_current();

  CREATE TABLE t03(id int,name text);

  INSERT INTO t03 VALUES(1,'rfv'),(2,'ujm');

  END;

 

当前事务ID为 1064;

后删除表;

DROP TABLE t03;

SELECT * FROM t03;

 

 

--(4)正常停止数据库,删除/data目录下的所有文件。

$ sys_ctl stop -m fast 

$ rm -rf /KingbaseES/V9/data/*

$ rm -rf /KingbaseES/V9/data/.*

$ sys_ctl start 

 

--(5)执行不完全恢复至创建t03表的事务ID。

指定使用刚全备份集20250418-172037F;并指定创建表t03时查询的事务ID 1064;

$ sys_rman --cOnfig=/backup/rman/sys_rman.conf \

  --stanza=kingbase --type=xid --target='1064' \

  --set='20250418-172037F' \

  --target-action=promote restore

  

注意: 

1.如果不指定 --target-action=promote选项,系统默认会使用 --target-action=pause 选项,此时 系统处于只读状态,需要执行“select pg_wal_replay_resume()”命令使数据库切换时间线,并进入读写状态。

2.实际工作中,往往不清楚准确的误删时间,一般需要多次恢复、使误删除的损失降到最低。  

    

--(6)启动实例。

$ sys_ctl start

 

--3、恢复结果验证。

--(1)使用system用户登录test数据库。

--(2)查看t03表及数据  (t03表被成功恢复)。

$ ksql -Usystem -dtest

test=# SELECT * FROM t03;