Print

[MVS]kingbase 基于时间的不完全恢复

7小时前 发表

配置步骤

--1、查看备份集信息。

[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/00000001000000000000000E

 

        full backup: 20250418-151727F

            timestamp start/stop: 2025-04-18 15:17:27 / 2025-04-18 15:17:30

            wal start/stop: 000000010000000000000004 / 000000010000000000000005

            database size: 101.9MB, database backup size: 101.9MB

            repo1: backup set size: 101.9MB, backup size: 101.9MB

 

        full backup: 20250418-155617F

            timestamp start/stop: 2025-04-18 15:56:17 / 2025-04-18 15:56:22

            wal start/stop: 000000010000000000000007 / 000000010000000000000007

            database size: 85.9MB, database backup size: 85.9MB

            repo1: backup set size: 85.9MB, backup size: 85.9MB

 

        diff backup: 20250418-155617F_20250418-162516D

            timestamp start/stop: 2025-04-18 16:25:16 / 2025-04-18 16:25:17

            wal start/stop: 00000001000000000000000A / 00000001000000000000000A

            database size: 85.9MB, database backup size: 21MB

            repo1: backup set size: 85.9MB, backup size: 21MB

            backup reference list: 20250418-155617F

 

        incr backup: 20250418-155617F_20250418-163143I

            timestamp start/stop: 2025-04-18 16:31:43 / 2025-04-18 16:31:45

            wal start/stop: 00000001000000000000000D / 00000001000000000000000D

            database size: 85.9MB, database backup size: 21MB

            repo1: backup set size: 85.9MB, backup size: 21MB

            backup reference list: 20250418-155617F, 20250418-155617F_20250418-162516D

 

 

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

--(1)查看时间戳。

--(2)删除t01表。

$ ksql -Usystem -dtest

test=# SELECT now();

              now

-------------------------------

 2025-04-18 17:09:07.576355+08

(1 row)

 

test=# drop table t01;

DROP TABLE

test=# select * from t01;

ERROR:  relation "t01" does not exist

LINE 1: select * from t01;

                      ^

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

$ sys_ctl stop -m fast 

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

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

$ sys_ctl start 

 

--(4)执行不完全恢复至误删除表之前的时间点。

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

  --stanza=kingbase --type=time --target='2025-04-18 17:09:07' \

  --target-action=promote restore

  

注意: 

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

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

  

  

--(5)启动实例。

$ sys_ctl start 

 

--3、恢复结果验证。

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

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

$ ksql -Usystem -dtest

test=# select * from t01;

 id | name

----+------

  1 | abc

  2 | def

(2 rows)