KingbaseES恢复被删除数据
KingbaseES恢复被删除数据
生产环境操作请先备份整个data目录或cp 当前数据目录/home/kingbase/pg_data到新的data目录,然后在备份的data目录进行恢复被删除数据操作。
通过新备份的路径恢复数据之后,确认数据完整性(确认业务数据完整性)。再把数据从备份环境导出重新导入到生产环境。
使用到的系统工具:
sys_resetwal
sys_waldump
1.准备测试环境:
使用initdb初始化数据库
[kingbase@postgres ~]$ initdb -EUTF8 -Usystem -mpg -D /home/kingbase/pg_data
The files belonging to this database system will be owned by user "kingbase".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".
The comparision of strings is case-sensitive.
Data page checksums are disabled.
creating directory /home/kingbase/pg_data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
Begin setup encrypt device
initializing the encrypt device ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
create security database ... ok
load security database ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing sys_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
sys_ctl -D /home/kingbase/pg_data -l logfile start
--启动刚initdb初始化的数据库
[kingbase@postgres ~]$ sys_ctl -D /home/kingbase/pg_data/ start
waiting for server to start....2022-12-16 10:26:49.044 CST [24811] LOG: sepapower extension initialized
2022-12-16 10:26:49.049 CST [24811] LOG: starting KingbaseES V008R006C006B0021 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
2022-12-16 10:26:49.049 CST [24811] LOG: listening on IPv4 address "0.0.0.0", port 54321
2022-12-16 10:26:49.049 CST [24811] LOG: listening on IPv6 address "::", port 54321
2022-12-16 10:26:49.053 CST [24811] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"
2022-12-16 10:26:49.095 CST [24811] LOG: redirecting log output to logging collector process
2022-12-16 10:26:49.095 CST [24811] HINT: Future log output will appear in directory "sys_log".
done
server started
[kingbase@postgres ~]$ ksql -Usystem -dtest
ksql (V8.0)
Type "help" for help.
test=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+--------+----------+---------+-------+-------------------
security | system | UTF8 | C | C |
template0 | system | UTF8 | C | C | =c/system +
| | | | | system=CTc/system
template1 | system | UTF8 | C | C | =c/system +
| | | | | system=CTc/system
test | system | UTF8 | C | C |
(4 rows)
- 创建测试表并插入测试数据
--创建表
CREATE TABLE TB (
"MENU_ID" numeric(8,0) NOT NULL,
"SYSTEM_CODE" character varying(15) NULL,
"ORDER_NO" character varying(5) NULL,
"TITLE" character varying(50) NULL,
"OBJECT_CODE" character varying(12) NULL,
"ICO" character varying(36) NULL,
"ICO_LAYOUT" character varying(10) NULL,
"MENU_ID_PARENT" numeric(8,0) NOT NULL DEFAULT 0
);
--插入数据
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(1320,'SYS','4D1','药品黑白名单管理','PASS-W01',NULL,NULL,1319),
(1321,'SYS','4D2','药品限制使用设置','PASS-W03',NULL,NULL,1319),
(293,'SYS','3843','医嘱排斥项设置','ORDER-W05',NULL,NULL,260),
(294,'SYS','385','化验医嘱',NULL,NULL,NULL,515),
(295,'SYS','3851','化验容器设置','ASSAY-W01',NULL,NULL,294),
(296,'SYS','3852','化验标本类型设置','ASSAY-W02',NULL,NULL,294),
(297,'SYS','3853','化验报告取单时间设置','ASSAY-W03',NULL,NULL,294),
(300,'SYS','10','功能相关',NULL,NULL,NULL,299),
(301,'SYS','101','系统对象设置','SYS-W01',NULL,NULL,300),
(302,'SYS','102','系统菜单设置','SYS-W02',NULL,NULL,300);
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(303,'SYS','103','系统平台功能设置','SYS-W03',NULL,NULL,300),
(1172,'SYS','150','系统报表设置','RPT-W11',NULL,NULL,1171),
(1173,'SYS','151','病人出院列表','RPT-W01',NULL,NULL,1171),
(1174,'SYS','152','费用统计','RPT-W01',NULL,NULL,1171),
(1175,'SYS','153','医院业务统计报表','RPT-W01',NULL,NULL,1171),
(663,'SYS','3B6','体温单格式配置','ENR-W14',NULL,NULL,373),
(1176,'SYS','154','医院业务统计报表(病区)','RPT-W01',NULL,NULL,1171),
(665,'SYS','316','病案诊断类型设置','DIAG-W04',NULL,NULL,613),
(666,'SYS','132','报表格式打印机设置','SYS1-W04',NULL,NULL,405),
(669,'KTCIS_IDW','57','住院病历质量检查评分','EMR-W21',NULL,NULL,239);
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(673,'SYS','4S','包药机相关设置',NULL,NULL,NULL,516),
(674,'SYS','4S1','包药机设置','MED-W05',NULL,NULL,673),
(373,'SYS','3B','电子护理记录基础设置',NULL,NULL,NULL,517),
(675,'SYS','4M','摆药包药相关设置',NULL,NULL,NULL,516),
(676,'SYS','4M0','药品包药字典设置','PACK_MED-W01',NULL,NULL,675),
(304,'SYS','104','系统参数设置','SYS-W04',NULL,NULL,300),
(305,'SYS','105','个人参数设置','SYS-W05',NULL,NULL,300),
(306,'SYS','106','机器参数设置','SYS-W06',NULL,NULL,300),
(307,'SYS','107','系统机器设置','SYS-W07',NULL,NULL,300),
(308,'SYS','108','通知发送','SYS-W08',NULL,NULL,300);
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(309,'SYS','109','系统文件发布','SYS-W09',NULL,NULL,300),
(310,'SYS','10A','系统文件查询','SYS-W10',NULL,NULL,300),
(311,'SYS','10B','带功能的窗体测试','SYS-W99',NULL,NULL,300),
(312,'SYS','11','行政组织',NULL,NULL,NULL,299),
(325,'SYS','12','医院基础设置',NULL,NULL,NULL,299),
(326,'SYS','311','数据字典设置','PUB2-W01',NULL,NULL,613),
(327,'SYS','121','行政区域设置','PUB2-W02',NULL,NULL,325),
(329,'SYS','1251','自定义字段设置','PUB2-W05',NULL,NULL,614),
(330,'SYS','124','医疗工作点设置','PUB2-W06',NULL,NULL,325),
(331,'SYS','1252','系统条件参数设置','PUB2-W07',NULL,NULL,614);
删除数据后,未执行checkpoint,vacuum操作,进行数据恢复
3.1 确认当前事务日志及事务(LSN)号
select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());
--查询insert后,delete前的当前事务日志及事务(LSN)号
test=# 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/17AF9D0 | 000000010000000000000001 | (000000010000000000000001,8059344)
(1 row)
3.2 进行删除数据操作,不手动执行chekpoint命令
test=# select count(*) from tb;
count
-------
40
(1 row)
test=# delete from tb where "MENU_ID"=300;
DELETE 1
test=#
test=# select count(*) from tb;
count
-------
39
(1 row)
--查询进行delete删除操作后的当前事务日志及事务(LSN)号
test=# 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/17B07B8 | 000000010000000000000001 | (000000010000000000000001,8062904)
(1 row)
3.3 根据查询到的事务号以及日志文件,查找WAL日志确定恢复数据的范围
lsn数据类型可以被用来存储 LSN(日志序列号)数据,LSN 是一个指向WAL中的位置的指针。
这个类型是XLogRecPtr的一种表达并且是数据库内部系统类型。
在数据库内部,一个 LSN 是一个 64 位整数,表示在预写式日志流中的一个字节位置。
它由两个长度为8位的十六进制数组成,中间用斜线分隔,如6/7311F80。
lsn类型支持标准的比较操作符 = 和 >
两个 LSN 可以做相减操作, 结果将是分隔两个预写式日志位置的字节数
--通过wal日志事物号找到delete的大概位置,这里位置是 552
[kingbase@postgres sys_wal]$ pwd
/home/kingbase/pg_data/sys_wal
[kingbase@postgres sys_wal]$ ls -l
total 16384
-rw------- 1 kingbase kingbase 16777216 Dec 16 11:47 000000010000000000000001
drwx------ 2 kingbase kingbase 6 Dec 16 10:26 archive_status
[kingbase@postgres sys_wal]$ sys_waldump 000000010000000000000001 -s 0/17AF9D0
rmgr: Heap len (rec/tot): 59/ 3227, tx: 552, lsn: 0/017AF9D0, prev 0/017AF9A0, desc: DELETE off 8 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16384 blk 0 FPW
rmgr: Transaction len (rec/tot): 34/ 34, tx: 552, lsn: 0/017B0688, prev 0/017AF9D0, desc: COMMIT 2022-12-16 11:46:15.040166 CST
rmgr: Standby len (rec/tot): 42/ 42, tx: 0, lsn: 0/017B06B0, prev 0/017B0688, desc: RUNNING_XACTS nextXid 553 latestCompletedXid 24839816 oldestRunningXid 553
rmgr: Standby len (rec/tot): 42/ 42, tx: 0, lsn: 0/017B06E0, prev 0/017B06B0, desc: RUNNING_XACTS nextXid 553 latestCompletedXid 24839904 oldestRunningXid 553
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/017B0710, prev 0/017B06E0, desc: CHECKPOINT_ONLINE redo 0/17B06E0; tli 1; prev tli 1; fpw true; xid 0:553; oid 24576; multi 1; offset 0; oldest xid 519 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 553; online
rmgr: Standby len (rec/tot): 42/ 42, tx: 0, lsn: 0/017B0788, prev 0/017B0710, desc: RUNNING_XACTS nextXid 553 latestCompletedXid 24839952 oldestRunningXid 553
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/017B07B8, prev 0/017B0788, desc: CHECKPOINT_SHUTDOWN redo 0/17B07B8; tli 1; prev tli 1; fpw true; xid 0:553; oid 16388; multi 1; offset 0; oldest xid 519 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 0; shutdown
sys_waldump: fatal: error in WAL record at 0/17B07B8: invalid record length at 0/17B0830: wanted 24, got 0
--如果删除数据量大,涉及多个wal日志,也可以指定事务日志起始wal文件名,结束wal日志文件名称
--示例 sys_waldump 000000010000000000000001 000000010000000000000009 -s 0/17AF9D0
--通过以下命令进行在wal日志精确定位事务号
[kingbase@postgres sys_wal]$ sys_waldump 000000010000000000000001 | grep DELETE
sys_waldump: fatal: error in WAL record at 0/17B07B8: invalid record length at 0/17B0830: wanted 24, got 0
rmgr: Heap len (rec/tot): 59/ 3227, tx: 552, lsn: 0/017AF9D0, prev 0/017AF9A0, desc: DELETE off 8 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16384 blk 0 FPW
[kingbase@postgres sys_wal]$
3.4 进行删除数据恢复操作
--停止数据库
[kingbase@postgres ~]$ sys_ctl -D /home/kingbase/pg_data/ stop
waiting for server to shut down.... done
server stopped
--备份当前数据目录data到新的路径或者新的目录
[kingbase@postgres ~]$ cp -r pg_data/ pg_data_bak
[kingbase@postgres ~]$ ll
total 808
drwxrwxr-x 3 kingbase kingbase 16 Nov 10 01:12 V8R6C6B21
-rwxr-xr-x 1 kingbase kingbase 3276 Nov 10 00:31 license.dat
-rw-rw-r-- 1 kingbase kingbase 252 Dec 6 16:48 my_test.c
-rw-rw-r-- 1 kingbase kingbase 10403 Dec 13 18:21 nohup.out
drwx------ 22 kingbase kingbase 4096 Dec 16 10:26 ora_data
drwx------ 23 kingbase kingbase 4096 Dec 16 11:47 pg_data
drwx------ 23 kingbase kingbase 4096 Dec 16 12:01 pg_data_bak
--使用备份的data目录,通过指定事务号进行删除数据的恢复。
--使用sys_resetwal工具指定事务号552进行删除数据的恢复
[kingbase@postgres ~]$ sys_resetwal -x 552 /home/kingbase/pg_data_bak/
Write-ahead log reset
--启动通过cp备份的数据库查询数据是否被恢复
[kingbase@postgres ~]$ sys_ctl -D /home/kingbase/pg_data_bak/ start
waiting for server to start....2022-12-16 12:06:48.993 CST [30197] LOG: sepapower extension initialized
2022-12-16 12:06:48.997 CST [30197] LOG: starting KingbaseES V008R006C006B0021 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
2022-12-16 12:06:48.997 CST [30197] LOG: listening on IPv4 address "0.0.0.0", port 54321
2022-12-16 12:06:48.997 CST [30197] LOG: listening on IPv6 address "::", port 54321
2022-12-16 12:06:49.001 CST [30197] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"
2022-12-16 12:06:49.082 CST [30197] LOG: redirecting log output to logging collector process
2022-12-16 12:06:49.082 CST [30197] HINT: Future log output will appear in directory "sys_log".
done
server started
[kingbase@postgres ~]$ ksql -Usystem -dtest
ksql (V8.0)
Type "help" for help.
test=# select count(*) from tb;
count
-------
40
(1 row)
test=# select * from tb where "MENU_ID"=300;
MENU_ID | SYSTEM_CODE | ORDER_NO | TITLE | OBJECT_CODE | ICO | ICO_LAYOUT | MENU_ID_PARENT
---------+-------------+----------+--------------+-------------+-----+------------+----------------
300 | SYS | 10 | 功能相关 | | | | 299
(1 row)
经确认进行删除表数据操作后未手动执行checkpoint命令,通过sys_resetwal工具可以恢复被删除的数据。
- 删除数据后执行checkpoint,不执行vacuum,恢复被删除的数据
--启动pg_data数据库
[kingbase@postgres ~]$ sys_ctl -D /home/kingbase/pg_data/ start
waiting for server to start....2022-12-16 12:13:51.096 CST [30580] LOG: sepapower extension initialized
2022-12-16 12:13:51.101 CST [30580] LOG: starting KingbaseES V008R006C006B0021 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
2022-12-16 12:13:51.101 CST [30580] LOG: listening on IPv4 address "0.0.0.0", port 54321
2022-12-16 12:13:51.101 CST [30580] LOG: listening on IPv6 address "::", port 54321
2022-12-16 12:13:51.105 CST [30580] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"
2022-12-16 12:13:51.142 CST [30580] LOG: redirecting log output to logging collector process
2022-12-16 12:13:51.142 CST [30580] HINT: Future log output will appear in directory "sys_log".
done
server started
--登录数据库删除TB表
[kingbase@postgres ~]$ ksql -Usystem -dtest
ksql (V8.0)
Type "help" for help.
test=# drop table tb;
DROP TABLE
--创建表
CREATE TABLE TB (
"MENU_ID" numeric(8,0) NOT NULL,
"SYSTEM_CODE" character varying(15) NULL,
"ORDER_NO" character varying(5) NULL,
"TITLE" character varying(50) NULL,
"OBJECT_CODE" character varying(12) NULL,
"ICO" character varying(36) NULL,
"ICO_LAYOUT" character varying(10) NULL,
"MENU_ID_PARENT" numeric(8,0) NOT NULL DEFAULT 0
);
--插入数据
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(1320,'SYS','4D1','药品黑白名单管理','PASS-W01',NULL,NULL,1319),
(1321,'SYS','4D2','药品限制使用设置','PASS-W03',NULL,NULL,1319),
(293,'SYS','3843','医嘱排斥项设置','ORDER-W05',NULL,NULL,260),
(294,'SYS','385','化验医嘱',NULL,NULL,NULL,515),
(295,'SYS','3851','化验容器设置','ASSAY-W01',NULL,NULL,294),
(296,'SYS','3852','化验标本类型设置','ASSAY-W02',NULL,NULL,294),
(297,'SYS','3853','化验报告取单时间设置','ASSAY-W03',NULL,NULL,294),
(300,'SYS','10','功能相关',NULL,NULL,NULL,299),
(301,'SYS','101','系统对象设置','SYS-W01',NULL,NULL,300),
(302,'SYS','102','系统菜单设置','SYS-W02',NULL,NULL,300);
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(303,'SYS','103','系统平台功能设置','SYS-W03',NULL,NULL,300),
(1172,'SYS','150','系统报表设置','RPT-W11',NULL,NULL,1171),
(1173,'SYS','151','病人出院列表','RPT-W01',NULL,NULL,1171),
(1174,'SYS','152','费用统计','RPT-W01',NULL,NULL,1171),
(1175,'SYS','153','医院业务统计报表','RPT-W01',NULL,NULL,1171),
(663,'SYS','3B6','体温单格式配置','ENR-W14',NULL,NULL,373),
(1176,'SYS','154','医院业务统计报表(病区)','RPT-W01',NULL,NULL,1171),
(665,'SYS','316','病案诊断类型设置','DIAG-W04',NULL,NULL,613),
(666,'SYS','132','报表格式打印机设置','SYS1-W04',NULL,NULL,405),
(669,'KTCIS_IDW','57','住院病历质量检查评分','EMR-W21',NULL,NULL,239);
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(673,'SYS','4S','包药机相关设置',NULL,NULL,NULL,516),
(674,'SYS','4S1','包药机设置','MED-W05',NULL,NULL,673),
(373,'SYS','3B','电子护理记录基础设置',NULL,NULL,NULL,517),
(675,'SYS','4M','摆药包药相关设置',NULL,NULL,NULL,516),
(676,'SYS','4M0','药品包药字典设置','PACK_MED-W01',NULL,NULL,675),
(304,'SYS','104','系统参数设置','SYS-W04',NULL,NULL,300),
(305,'SYS','105','个人参数设置','SYS-W05',NULL,NULL,300),
(306,'SYS','106','机器参数设置','SYS-W06',NULL,NULL,300),
(307,'SYS','107','系统机器设置','SYS-W07',NULL,NULL,300),
(308,'SYS','108','通知发送','SYS-W08',NULL,NULL,300);
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(309,'SYS','109','系统文件发布','SYS-W09',NULL,NULL,300),
(310,'SYS','10A','系统文件查询','SYS-W10',NULL,NULL,300),
(311,'SYS','10B','带功能的窗体测试','SYS-W99',NULL,NULL,300),
(312,'SYS','11','行政组织',NULL,NULL,NULL,299),
(325,'SYS','12','医院基础设置',NULL,NULL,NULL,299),
(326,'SYS','311','数据字典设置','PUB2-W01',NULL,NULL,613),
(327,'SYS','121','行政区域设置','PUB2-W02',NULL,NULL,325),
(329,'SYS','1251','自定义字段设置','PUB2-W05',NULL,NULL,614),
(330,'SYS','124','医疗工作点设置','PUB2-W06',NULL,NULL,325),
(331,'SYS','1252','系统条件参数设置','PUB2-W07',NULL,NULL,614);
4.1 确认当前事务日志及事务(LSN)号
select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());
--查询insert后,delete前的当前事务日志及事务(LSN)号
test=# 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/17CD750 | 000000010000000000000001 | (000000010000000000000001,8181584)
(1 row)
4.2 进行删除数据操作,手动执行chekpoint命令
test=# delete from tb ;
DELETE 40
test=# select count(*) from tb;
count
-------
0
(1 row)
test=# checkpoint ;
CHECKPOINT
--查询删除数据并且手动执行checkpoint命令后,当前事务日志及事务(LSN)号
test=# 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/17CED90 | 000000010000000000000001 | (000000010000000000000001,8187280)
(1 row)
4.3 根据查询到的事务号以及日志文件,查找WAL日志确定恢复数据的范围
--通过wal日志事物号找到delete的大概位置,这里位置是 559
# sys_waldump 000000010000000000000001 -s 0/17CD750
[kingbase@postgres sys_wal]$ sys_waldump 000000010000000000000001 -s 0/17CD750
rmgr: Heap len (rec/tot): 59/ 3227, tx: 559, lsn: 0/017CD750, prev 0/017CD720, desc: DELETE off 1 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0 FPW
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE408, prev 0/017CD750, desc: DELETE off 2 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE440, prev 0/017CE408, desc: DELETE off 3 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE478, prev 0/017CE440, desc: DELETE off 4 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE4B0, prev 0/017CE478, desc: DELETE off 5 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE4E8, prev 0/017CE4B0, desc: DELETE off 6 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE520, prev 0/017CE4E8, desc: DELETE off 7 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE558, prev 0/017CE520, desc: DELETE off 8 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE590, prev 0/017CE558, desc: DELETE off 9 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE5C8, prev 0/017CE590, desc: DELETE off 10 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE600, prev 0/017CE5C8, desc: DELETE off 11 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE638, prev 0/017CE600, desc: DELETE off 12 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE670, prev 0/017CE638, desc: DELETE off 13 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE6A8, prev 0/017CE670, desc: DELETE off 14 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE6E0, prev 0/017CE6A8, desc: DELETE off 15 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE718, prev 0/017CE6E0, desc: DELETE off 16 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE750, prev 0/017CE718, desc: DELETE off 17 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE788, prev 0/017CE750, desc: DELETE off 18 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE7C0, prev 0/017CE788, desc: DELETE off 19 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE7F8, prev 0/017CE7C0, desc: DELETE off 20 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE830, prev 0/017CE7F8, desc: DELETE off 21 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE868, prev 0/017CE830, desc: DELETE off 22 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE8A0, prev 0/017CE868, desc: DELETE off 23 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE8D8, prev 0/017CE8A0, desc: DELETE off 24 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE910, prev 0/017CE8D8, desc: DELETE off 25 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE948, prev 0/017CE910, desc: DELETE off 26 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE980, prev 0/017CE948, desc: DELETE off 27 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE9B8, prev 0/017CE980, desc: DELETE off 28 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE9F0, prev 0/017CE9B8, desc: DELETE off 29 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEA28, prev 0/017CE9F0, desc: DELETE off 30 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEA60, prev 0/017CEA28, desc: DELETE off 31 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEA98, prev 0/017CEA60, desc: DELETE off 32 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEAD0, prev 0/017CEA98, desc: DELETE off 33 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEB08, prev 0/017CEAD0, desc: DELETE off 34 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEB40, prev 0/017CEB08, desc: DELETE off 35 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEB78, prev 0/017CEB40, desc: DELETE off 36 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEBB0, prev 0/017CEB78, desc: DELETE off 37 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEBE8, prev 0/017CEBB0, desc: DELETE off 38 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEC20, prev 0/017CEBE8, desc: DELETE off 39 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEC58, prev 0/017CEC20, desc: DELETE off 40 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Transaction len (rec/tot): 34/ 34, tx: 559, lsn: 0/017CEC90, prev 0/017CEC58, desc: COMMIT 2022-12-16 12:21:54.321583 CST
rmgr: Standby len (rec/tot): 46/ 46, tx: 0, lsn: 0/017CECB8, prev 0/017CEC90, desc: RUNNING_XACTS nextXid 560 latestCompletedXid 24964240 oldestRunningXid 559
rmgr: Standby len (rec/tot): 42/ 42, tx: 0, lsn: 0/017CECE8, prev 0/017CECB8, desc: RUNNING_XACTS nextXid 560 latestCompletedXid 24964328 oldestRunningXid 560
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/017CED18, prev 0/017CECE8, desc: CHECKPOINT_ONLINE redo 0/17CECE8; tli 1; prev tli 1; fpw true; xid 0:560; oid 24580; multi 1; offset 0; oldest xid 519 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 560; online
rmgr: Standby len (rec/tot): 42/ 42, tx: 0, lsn: 0/017CED90, prev 0/017CED18, desc: RUNNING_XACTS nextXid 560 latestCompletedXid 24964376 oldestRunningXid 560
rmgr: Heap len (rec/tot): 53/ 1081, tx: 0, lsn: 0/017CEDC0, prev 0/017CED90, desc: INPLACE off 3, blkref #0: rel 1663/13857/1259 blk 0 FPW
rmgr: Standby len (rec/tot): 90/ 90, tx: 0, lsn: 0/017CF200, prev 0/017CEDC0, desc: INVALIDATIONS ; inval msgs: catcache 62 catcache 61 relcache 16388
rmgr: Standby len (rec/tot): 42/ 42, tx: 0, lsn: 0/017CF260, prev 0/017CF200, desc: RUNNING_XACTS nextXid 560 latestCompletedXid 24965632 oldestRunningXid 560
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/017CF290, prev 0/017CF260, desc: CHECKPOINT_SHUTDOWN redo 0/17CF290; tli 1; prev tli 1; fpw true; xid 0:560; oid 16392; multi 1; offset 0; oldest xid 519 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 0; shutdown
sys_waldump: fatal: error in WAL record at 0/17CF290: invalid record length at 0/17CF308: wanted 24, got 0
--如果删除数据量大,涉及多个wal日志,也可以指定事务日志起始wal文件名,结束wal日志文件名称
--示例 sys_waldump 000000010000000000000001 000000010000000000000009 -s 0/17AF9D0
--通过以下命令进行在wal日志精确定位事务号
[kingbase@postgres sys_wal]$ sys_waldump 000000010000000000000001 | grep DELETE
rmgr: Heap len (rec/tot): 59/ 3227, tx: 559, lsn: 0/017CD750, prev 0/017CD720, desc: DELETE off 1 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0 FPW
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE408, prev 0/017CD750, desc: DELETE off 2 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE440, prev 0/017CE408, desc: DELETE off 3 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE478, prev 0/017CE440, desc: DELETE off 4 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE4B0, prev 0/017CE478, desc: DELETE off 5 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE4E8, prev 0/017CE4B0, desc: DELETE off 6 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE520, prev 0/017CE4E8, desc: DELETE off 7 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE558, prev 0/017CE520, desc: DELETE off 8 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE590, prev 0/017CE558, desc: DELETE off 9 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE5C8, prev 0/017CE590, desc: DELETE off 10 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE600, prev 0/017CE5C8, desc: DELETE off 11 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE638, prev 0/017CE600, desc: DELETE off 12 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE670, prev 0/017CE638, desc: DELETE off 13 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE6A8, prev 0/017CE670, desc: DELETE off 14 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE6E0, prev 0/017CE6A8, desc: DELETE off 15 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE718, prev 0/017CE6E0, desc: DELETE off 16 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE750, prev 0/017CE718, desc: DELETE off 17 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE788, prev 0/017CE750, desc: DELETE off 18 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE7C0, prev 0/017CE788, desc: DELETE off 19 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE7F8, prev 0/017CE7C0, desc: DELETE off 20 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE830, prev 0/017CE7F8, desc: DELETE off 21 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE868, prev 0/017CE830, desc: DELETE off 22 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE8A0, prev 0/017CE868, desc: DELETE off 23 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE8D8, prev 0/017CE8A0, desc: DELETE off 24 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE910, prev 0/017CE8D8, desc: DELETE off 25 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE948, prev 0/017CE910, desc: DELETE off 26 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE980, prev 0/017CE948, desc: DELETE off 27 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE9B8, prev 0/017CE980, desc: DELETE off 28 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CE9F0, prev 0/017CE9B8, desc: DELETE off 29 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEA28, prev 0/017CE9F0, desc: DELETE off 30 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEA60, prev 0/017CEA28, desc: DELETE off 31 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEA98, prev 0/017CEA60, desc: DELETE off 32 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEAD0, prev 0/017CEA98, desc: DELETE off 33 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEB08, prev 0/017CEAD0, desc: DELETE off 34 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEB40, prev 0/017CEB08, desc: DELETE off 35 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEB78, prev 0/017CEB40, desc: DELETE off 36 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEBB0, prev 0/017CEB78, desc: DELETE off 37 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEBE8, prev 0/017CEBB0, desc: DELETE off 38 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEC20, prev 0/017CEBE8, desc: DELETE off 39 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 559, lsn: 0/017CEC58, prev 0/017CEC20, desc: DELETE off 40 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
4.4 进行恢复删除数据操作
--停止数据库
[kingbase@postgres ~]$ sys_ctl -D /home/kingbase/pg_data/ stop
waiting for server to shut down.... done
server stopped
[kingbase@postgres ~]$ ls -l
total 804
drwxrwxr-x 3 kingbase kingbase 16 Nov 10 01:12 V8R6C6B21
-rwxr-xr-x 1 kingbase kingbase 3276 Nov 10 00:31 license.dat
-rw-rw-r-- 1 kingbase kingbase 252 Dec 6 16:48 my_test.c
-rw-rw-r-- 1 kingbase kingbase 10403 Dec 13 18:21 nohup.out
drwx------ 22 kingbase kingbase 4096 Dec 16 10:26 ora_data
drwx------ 23 kingbase kingbase 4096 Dec 16 12:23 pg_data
--备份当前data数据目录到新目录
[kingbase@postgres ~]$ cp -r pg_data/ pg_data_bak
[kingbase@postgres ~]$ ls -l
total 808
drwxrwxr-x 3 kingbase kingbase 16 Nov 10 01:12 V8R6C6B21
-rwxr-xr-x 1 kingbase kingbase 3276 Nov 10 00:31 license.dat
-rw-rw-r-- 1 kingbase kingbase 252 Dec 6 16:48 my_test.c
-rw-rw-r-- 1 kingbase kingbase 10403 Dec 13 18:21 nohup.out
drwx------ 22 kingbase kingbase 4096 Dec 16 10:26 ora_data
drwx------ 23 kingbase kingbase 4096 Dec 16 12:23 pg_data
drwx------ 23 kingbase kingbase 4096 Dec 16 12:32 pg_data_bak
--使用备份的data目录,通过指定事务号进行删除数据的恢复。
--使用sys_resetwal工具指定事务号552进行删除数据的恢复
[kingbase@postgres ~]$ sys_resetwal -x 559 /home/kingbase/pg_data_bak/
Write-ahead log reset
--启动通过cp备份的数据库查询数据是否被恢复
[kingbase@postgres ~]$ sys_ctl -D /home/kingbase/pg_data_bak/ start
waiting for server to start....2022-12-16 12:34:36.822 CST [31721] LOG: sepapower extension initialized
2022-12-16 12:34:36.827 CST [31721] LOG: starting KingbaseES V008R006C006B0021 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
2022-12-16 12:34:36.828 CST [31721] LOG: listening on IPv4 address "0.0.0.0", port 54321
2022-12-16 12:34:36.828 CST [31721] LOG: listening on IPv6 address "::", port 54321
2022-12-16 12:34:36.831 CST [31721] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"
2022-12-16 12:34:36.874 CST [31721] LOG: redirecting log output to logging collector process
2022-12-16 12:34:36.874 CST [31721] HINT: Future log output will appear in directory "sys_log".
done
server started
[kingbase@postgres ~]$ ksql -Usystem -dtest
ksql (V8.0)
Type "help" for help.
test=# select count(*) from tb;
count
-------
40
(1 row)
经确认进行删除表数据操作后并且手动执行checkpoint命令后,通过sys_resetwal工具也是可以恢复被删除的数据。
- 恢复被删除的数据并且执行了Vacuum操作,数据是否可以被恢复
--启动pg_data数据库
[kingbase@postgres ~]$ sys_ctl -D /home/kingbase/pg_data/ start
waiting for server to start....2022-12-16 12:13:51.096 CST [30580] LOG: sepapower extension initialized
2022-12-16 12:13:51.101 CST [30580] LOG: starting KingbaseES V008R006C006B0021 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
2022-12-16 12:13:51.101 CST [30580] LOG: listening on IPv4 address "0.0.0.0", port 54321
2022-12-16 12:13:51.101 CST [30580] LOG: listening on IPv6 address "::", port 54321
2022-12-16 12:13:51.105 CST [30580] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"
2022-12-16 12:13:51.142 CST [30580] LOG: redirecting log output to logging collector process
2022-12-16 12:13:51.142 CST [30580] HINT: Future log output will appear in directory "sys_log".
done
server started
--登录数据库删除TB表
[kingbase@postgres ~]$ ksql -Usystem -dtest
ksql (V8.0)
Type "help" for help.
test=# drop table tb;
DROP TABLE
--创建表
CREATE TABLE TB (
"MENU_ID" numeric(8,0) NOT NULL,
"SYSTEM_CODE" character varying(15) NULL,
"ORDER_NO" character varying(5) NULL,
"TITLE" character varying(50) NULL,
"OBJECT_CODE" character varying(12) NULL,
"ICO" character varying(36) NULL,
"ICO_LAYOUT" character varying(10) NULL,
"MENU_ID_PARENT" numeric(8,0) NOT NULL DEFAULT 0
);
--插入数据
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(1320,'SYS','4D1','药品黑白名单管理','PASS-W01',NULL,NULL,1319),
(1321,'SYS','4D2','药品限制使用设置','PASS-W03',NULL,NULL,1319),
(293,'SYS','3843','医嘱排斥项设置','ORDER-W05',NULL,NULL,260),
(294,'SYS','385','化验医嘱',NULL,NULL,NULL,515),
(295,'SYS','3851','化验容器设置','ASSAY-W01',NULL,NULL,294),
(296,'SYS','3852','化验标本类型设置','ASSAY-W02',NULL,NULL,294),
(297,'SYS','3853','化验报告取单时间设置','ASSAY-W03',NULL,NULL,294),
(300,'SYS','10','功能相关',NULL,NULL,NULL,299),
(301,'SYS','101','系统对象设置','SYS-W01',NULL,NULL,300),
(302,'SYS','102','系统菜单设置','SYS-W02',NULL,NULL,300);
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(303,'SYS','103','系统平台功能设置','SYS-W03',NULL,NULL,300),
(1172,'SYS','150','系统报表设置','RPT-W11',NULL,NULL,1171),
(1173,'SYS','151','病人出院列表','RPT-W01',NULL,NULL,1171),
(1174,'SYS','152','费用统计','RPT-W01',NULL,NULL,1171),
(1175,'SYS','153','医院业务统计报表','RPT-W01',NULL,NULL,1171),
(663,'SYS','3B6','体温单格式配置','ENR-W14',NULL,NULL,373),
(1176,'SYS','154','医院业务统计报表(病区)','RPT-W01',NULL,NULL,1171),
(665,'SYS','316','病案诊断类型设置','DIAG-W04',NULL,NULL,613),
(666,'SYS','132','报表格式打印机设置','SYS1-W04',NULL,NULL,405),
(669,'KTCIS_IDW','57','住院病历质量检查评分','EMR-W21',NULL,NULL,239);
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(673,'SYS','4S','包药机相关设置',NULL,NULL,NULL,516),
(674,'SYS','4S1','包药机设置','MED-W05',NULL,NULL,673),
(373,'SYS','3B','电子护理记录基础设置',NULL,NULL,NULL,517),
(675,'SYS','4M','摆药包药相关设置',NULL,NULL,NULL,516),
(676,'SYS','4M0','药品包药字典设置','PACK_MED-W01',NULL,NULL,675),
(304,'SYS','104','系统参数设置','SYS-W04',NULL,NULL,300),
(305,'SYS','105','个人参数设置','SYS-W05',NULL,NULL,300),
(306,'SYS','106','机器参数设置','SYS-W06',NULL,NULL,300),
(307,'SYS','107','系统机器设置','SYS-W07',NULL,NULL,300),
(308,'SYS','108','通知发送','SYS-W08',NULL,NULL,300);
INSERT INTO TB ("MENU_ID","SYSTEM_CODE","ORDER_NO","TITLE","OBJECT_CODE","ICO","ICO_LAYOUT","MENU_ID_PARENT") VALUES
(309,'SYS','109','系统文件发布','SYS-W09',NULL,NULL,300),
(310,'SYS','10A','系统文件查询','SYS-W10',NULL,NULL,300),
(311,'SYS','10B','带功能的窗体测试','SYS-W99',NULL,NULL,300),
(312,'SYS','11','行政组织',NULL,NULL,NULL,299),
(325,'SYS','12','医院基础设置',NULL,NULL,NULL,299),
(326,'SYS','311','数据字典设置','PUB2-W01',NULL,NULL,613),
(327,'SYS','121','行政区域设置','PUB2-W02',NULL,NULL,325),
(329,'SYS','1251','自定义字段设置','PUB2-W05',NULL,NULL,614),
(330,'SYS','124','医疗工作点设置','PUB2-W06',NULL,NULL,325),
(331,'SYS','1252','系统条件参数设置','PUB2-W07',NULL,NULL,614);
5.1 确认insert后当前事务日志及wal事务号
select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());
--查询insert后,delete前的当前事务日志及事务(LSN)号
test=# 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/17D4E28 | 000000010000000000000001 | (000000010000000000000001,8212008)
(1 row)
test=# select count(*) from tb;
count
-------
40
(1 row)
5.2 进行删除数据操作并且手动执行vacuum
test=# delete from tb;
DELETE 40
test=# vacuum tb;
VACUUM
test=# select count(*) from tb;
count
-------
0
(1 row)
--查询删除数据并且手动执行checkpoint命令后,当前事务日志及事务(LSN)号
test=# 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/17D9728 | 000000010000000000000001 | (000000010000000000000001,8230696)
(1 row)
5.3 根据查询到的事务号以及日志文件,查找WAL日志确定恢复数据的范围
--通过wal日志事物号找到delete的大概位置,这里位置是 564
[kingbase@postgres sys_wal]$ pwd
/home/kingbase/pg_data/sys_wal
[kingbase@postgres sys_wal]$ ls -l
total 16384
-rw------- 1 kingbase kingbase 16777216 Dec 16 14:10 000000010000000000000001
drwx------ 2 kingbase kingbase 6 Dec 16 10:26 archive_status
--如果删除数据量大,涉及多个wal日志,也可以指定事务日志起始wal文件名,结束wal日志文件名称
--示例 sys_waldump 000000010000000000000001 000000010000000000000009 -s 0/17AF9D0
[kingbase@postgres sys_wal]$ sys_waldump 000000010000000000000001 -s 0/17D4E28
rmgr: Heap len (rec/tot): 59/ 6339, tx: 564, lsn: 0/017D4E28, prev 0/017D4DF8, desc: DELETE off 41 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0 FPW
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6708, prev 0/017D4E28, desc: DELETE off 42 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6740, prev 0/017D6708, desc: DELETE off 43 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6778, prev 0/017D6740, desc: DELETE off 44 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D67B0, prev 0/017D6778, desc: DELETE off 45 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D67E8, prev 0/017D67B0, desc: DELETE off 46 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6820, prev 0/017D67E8, desc: DELETE off 47 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6858, prev 0/017D6820, desc: DELETE off 48 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6890, prev 0/017D6858, desc: DELETE off 49 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D68C8, prev 0/017D6890, desc: DELETE off 50 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6900, prev 0/017D68C8, desc: DELETE off 51 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6938, prev 0/017D6900, desc: DELETE off 52 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6970, prev 0/017D6938, desc: DELETE off 53 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D69A8, prev 0/017D6970, desc: DELETE off 54 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D69E0, prev 0/017D69A8, desc: DELETE off 55 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6A18, prev 0/017D69E0, desc: DELETE off 56 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6A50, prev 0/017D6A18, desc: DELETE off 57 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6A88, prev 0/017D6A50, desc: DELETE off 58 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6AC0, prev 0/017D6A88, desc: DELETE off 59 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6AF8, prev 0/017D6AC0, desc: DELETE off 60 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6B30, prev 0/017D6AF8, desc: DELETE off 61 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6B68, prev 0/017D6B30, desc: DELETE off 62 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6BA0, prev 0/017D6B68, desc: DELETE off 63 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6BD8, prev 0/017D6BA0, desc: DELETE off 64 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6C10, prev 0/017D6BD8, desc: DELETE off 65 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6C48, prev 0/017D6C10, desc: DELETE off 66 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6C80, prev 0/017D6C48, desc: DELETE off 67 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6CB8, prev 0/017D6C80, desc: DELETE off 68 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6CF0, prev 0/017D6CB8, desc: DELETE off 69 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6D28, prev 0/017D6CF0, desc: DELETE off 70 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6D60, prev 0/017D6D28, desc: DELETE off 71 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6D98, prev 0/017D6D60, desc: DELETE off 72 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6DD0, prev 0/017D6D98, desc: DELETE off 73 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6E08, prev 0/017D6DD0, desc: DELETE off 74 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6E40, prev 0/017D6E08, desc: DELETE off 75 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6E78, prev 0/017D6E40, desc: DELETE off 76 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6EB0, prev 0/017D6E78, desc: DELETE off 77 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6EE8, prev 0/017D6EB0, desc: DELETE off 78 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6F20, prev 0/017D6EE8, desc: DELETE off 79 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6F58, prev 0/017D6F20, desc: DELETE off 80 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Transaction len (rec/tot): 34/ 34, tx: 564, lsn: 0/017D6F90, prev 0/017D6F58, desc: COMMIT 2022-12-16 14:10:35.799685 CST
rmgr: Standby len (rec/tot): 46/ 46, tx: 0, lsn: 0/017D6FB8, prev 0/017D6F90, desc: RUNNING_XACTS nextXid 565 latestCompletedXid 24997776 oldestRunningXid 564
rmgr: Heap2 len (rec/tot): 214/ 214, tx: 0, lsn: 0/017D6FE8, prev 0/017D6FB8, desc: CLEAN remxid 564, blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap2 len (rec/tot): 214/ 214, tx: 0, lsn: 0/017D70C0, prev 0/017D6FE8, desc: CLEAN remxid 564, blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap2 len (rec/tot): 64/ 8256, tx: 0, lsn: 0/017D7198, prev 0/017D70C0, desc: VISIBLE cutoff xid 0 flags 0x03, blkref #0: rel 1663/13857/16388 fork vm blk 0 FPW, blkref #1: rel 1663/13857/16388 blk 0
rmgr: Standby len (rec/tot): 42/ 42, tx: 565, lsn: 0/017D91F0, prev 0/017D7198, desc: LOCK xid 565 db 13857 rel 16388
rmgr: Storage len (rec/tot): 46/ 46, tx: 565, lsn: 0/017D9220, prev 0/017D91F0, desc: TRUNCATE base/13857/16388 to 0 blocks flags 7
rmgr: Heap len (rec/tot): 53/ 1081, tx: 565, lsn: 0/017D9250, prev 0/017D9220, desc: INPLACE off 3, blkref #0: rel 1663/13857/1259 blk 0 FPW
rmgr: Transaction len (rec/tot): 98/ 98, tx: 565, lsn: 0/017D9690, prev 0/017D9250, desc: COMMIT 2022-12-16 14:10:46.815167 CST; inval msgs: catcache 62 catcache 61 relcache 16388
rmgr: Standby len (rec/tot): 42/ 42, tx: 0, lsn: 0/017D96F8, prev 0/017D9690, desc: RUNNING_XACTS nextXid 566 latestCompletedXid 25007760 oldestRunningXid 566
sys_waldump: fatal: error in WAL record at 0/17D96F8: invalid record length at 0/17D9728: wanted 24, got 0
--通过以下命令进行在wal日志精确定位事务号
rmgr: Heap len (rec/tot): 59/ 6339, tx: 564, lsn: 0/017D4E28, prev 0/017D4DF8, desc: DELETE off 41 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0 FPW
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6708, prev 0/017D4E28, desc: DELETE off 42 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6740, prev 0/017D6708, desc: DELETE off 43 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6778, prev 0/017D6740, desc: DELETE off 44 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D67B0, prev 0/017D6778, desc: DELETE off 45 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D67E8, prev 0/017D67B0, desc: DELETE off 46 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6820, prev 0/017D67E8, desc: DELETE off 47 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6858, prev 0/017D6820, desc: DELETE off 48 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6890, prev 0/017D6858, desc: DELETE off 49 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D68C8, prev 0/017D6890, desc: DELETE off 50 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6900, prev 0/017D68C8, desc: DELETE off 51 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6938, prev 0/017D6900, desc: DELETE off 52 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6970, prev 0/017D6938, desc: DELETE off 53 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D69A8, prev 0/017D6970, desc: DELETE off 54 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D69E0, prev 0/017D69A8, desc: DELETE off 55 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6A18, prev 0/017D69E0, desc: DELETE off 56 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6A50, prev 0/017D6A18, desc: DELETE off 57 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6A88, prev 0/017D6A50, desc: DELETE off 58 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6AC0, prev 0/017D6A88, desc: DELETE off 59 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6AF8, prev 0/017D6AC0, desc: DELETE off 60 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6B30, prev 0/017D6AF8, desc: DELETE off 61 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6B68, prev 0/017D6B30, desc: DELETE off 62 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6BA0, prev 0/017D6B68, desc: DELETE off 63 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6BD8, prev 0/017D6BA0, desc: DELETE off 64 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6C10, prev 0/017D6BD8, desc: DELETE off 65 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6C48, prev 0/017D6C10, desc: DELETE off 66 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6C80, prev 0/017D6C48, desc: DELETE off 67 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6CB8, prev 0/017D6C80, desc: DELETE off 68 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6CF0, prev 0/017D6CB8, desc: DELETE off 69 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6D28, prev 0/017D6CF0, desc: DELETE off 70 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6D60, prev 0/017D6D28, desc: DELETE off 71 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6D98, prev 0/017D6D60, desc: DELETE off 72 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6DD0, prev 0/017D6D98, desc: DELETE off 73 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6E08, prev 0/017D6DD0, desc: DELETE off 74 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6E40, prev 0/017D6E08, desc: DELETE off 75 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6E78, prev 0/017D6E40, desc: DELETE off 76 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6EB0, prev 0/017D6E78, desc: DELETE off 77 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6EE8, prev 0/017D6EB0, desc: DELETE off 78 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6F20, prev 0/017D6EE8, desc: DELETE off 79 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6F58, prev 0/017D6F20, desc: DELETE off 80 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
5.4 进行恢复删除数据操作
--停止数据库
[kingbase@postgres ~]$ sys_ctl -D pg_data/ stop
waiting for server to shut down.... done
server stopped
--使用cp对当前data目录进行备份
[kingbase@postgres ~]$ cp -r pg_data/ pg_data_bak
[kingbase@postgres ~]$ ls -l
total 808
drwxrwxr-x 3 kingbase kingbase 16 Nov 10 01:12 V8R6C6B21
-rwxr-xr-x 1 kingbase kingbase 3276 Nov 10 00:31 license.dat
-rw-rw-r-- 1 kingbase kingbase 252 Dec 6 16:48 my_test.c
-rw-rw-r-- 1 kingbase kingbase 10403 Dec 13 18:21 nohup.out
drwx------ 22 kingbase kingbase 4096 Dec 16 10:26 ora_data
drwx------ 23 kingbase kingbase 4096 Dec 16 14:17 pg_data
drwx------ 23 kingbase kingbase 4096 Dec 16 14:17 pg_data_bak
--使用备份的data目录,通过指定事务号进行删除数据的恢复。
--使用sys_resetwal工具指定事务号552进行删除数据的恢复
[kingbase@postgres ~]$ sys_resetwal -x 564 /home/kingbase/pg_data_bak/
Write-ahead log reset
--启动通过cp备份的数据库查询数据是否被恢复
[kingbase@postgres ~]$ sys_ctl -D /home/kingbase/pg_data_bak/ start
waiting for server to start....2022-12-16 14:20:32.872 CST [5064] LOG: sepapower extension initialized
2022-12-16 14:20:32.875 CST [5064] LOG: starting KingbaseES V008R006C006B0021 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
2022-12-16 14:20:32.876 CST [5064] LOG: listening on IPv4 address "0.0.0.0", port 54321
2022-12-16 14:20:32.876 CST [5064] LOG: listening on IPv6 address "::", port 54321
2022-12-16 14:20:32.879 CST [5064] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"
2022-12-16 14:20:32.915 CST [5064] LOG: redirecting log output to logging collector process
2022-12-16 14:20:32.915 CST [5064] HINT: Future log output will appear in directory "sys_log".
done
server started
[kingbase@postgres ~]$ ksql -Usystem -dtest
ksql (V8.0)
Type "help" for help.
test=# select count(*) from tb;
count
-------
0
(1 row)
经确认,如果数据被删除并且手动执行了vacuum或者系统自动触发了vacuum操作,被删除的数据是无法被恢复。
--在实际的场景中需要留意在被删除数据事务号后wal日志是否有rmgr: Heap2或者CLEAN remxid 564(xid)记录.
--资源rmgr Heap2的记录与vacuum有关,这里是测试表TB的 vacuum操作
test=# select pg_relation_filepath('tb');
pg_relation_filepath
----------------------
base/13857/16388
(1 row)
test=# select pg_relation_filenode('tb');
pg_relation_filenode
----------------------
16388
(1 row)
rmgr: Heap len (rec/tot): 54/ 54, tx: 564, lsn: 0/017D6F58, prev 0/017D6F20, desc: DELETE off 80 flags 0x00 KEYS_UPDATED , blkref #0: rel 1663/13857/16388 blk 0
rmgr: Transaction len (rec/tot): 34/ 34, tx: 564, lsn: 0/017D6F90, prev 0/017D6F58, desc: COMMIT 2022-12-16 14:10:35.799685 CST
rmgr: Standby len (rec/tot): 46/ 46, tx: 0, lsn: 0/017D6FB8, prev 0/017D6F90, desc: RUNNING_XACTS nextXid 565 latestCompletedXid 24997776 oldestRunningXid 564
rmgr: Heap2 len (rec/tot): 214/ 214, tx: 0, lsn: 0/017D6FE8, prev 0/017D6FB8, desc: CLEAN remxid 564, blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap2 len (rec/tot): 214/ 214, tx: 0, lsn: 0/017D70C0, prev 0/017D6FE8, desc: CLEAN remxid 564, blkref #0: rel 1663/13857/16388 blk 0
rmgr: Heap2 len (rec/tot): 64/ 8256, tx: 0, lsn: 0/017D7198, prev 0/017D70C0, desc: VISIBLE cutoff xid 0 flags 0x03, blkref #0: rel 1663/13857/16388 fork vm blk 0 FPW, blkref #1: rel 1663/13857/16388 blk 0
rmgr: Standby len (rec/tot): 42/ 42, tx: 565, lsn: 0/017D91F0, prev 0/017D7198, desc: LOCK xid 565 db 13857 rel 16388
rmgr: Storage len (rec/tot): 46/ 46, tx: 565, lsn: 0/017D9220, prev 0/017D91F0, desc: TRUNCATE base/13857/16388 to 0 blocks flags 7
- 通过SYS_RESETWAL工具恢复被删除数据的测试总结:
6.1. 数据被删除后,未执行checkpoint,vacuum操作,被删除数据可以通过sys_resetwal工具恢复。(前提是WAL日志文件存在且文件未损坏)。
6.2. 数据被删除后,执行checkpoint,未进行vacuum操作,被删除数据可以通过sys_resetwal工具恢复。(前提是WAL日志文件存在且文件未损坏)。
6.3. 数据被删除后,不管是手动执行还是系统自动执行vacuum操作,被删除的数据都无法通过sys_resetwal工具恢复。
注意:在进行了sys_resetwal操作后,设置的LSN 号后的数据都取消了,相当于回滚到指定的事务LSN 号的位置。(在生产进行此操作必须先备份data目录,然后在备份的data目录进行操作,一定要谨慎谨慎再谨慎)
SYS_RESETWAL操作会把DATA目录在线WAL 日志进行清理,原有的日志都会被清除
恢复之前的wal日志
[kingbase@postgres sys_wal]$ ll
total 98304
-rw------- 1 kingbase kingbase 16777216 Nov 11 12:15 000000010000000000000007
-rw------- 1 kingbase kingbase 16777216 Nov 11 12:11 000000010000000000000008
-rw------- 1 kingbase kingbase 16777216 Nov 11 12:11 000000010000000000000009
-rw------- 1 kingbase kingbase 16777216 Nov 11 12:11 00000001000000000000000A
-rw------- 1 kingbase kingbase 16777216 Nov 11 12:11 00000001000000000000000B
-rw------- 1 kingbase kingbase 16777216 Nov 11 12:11 00000001000000000000000C
drwx------ 2 kingbase kingbase 6 Nov 11 12:08 archive_status
恢复之后的日志:
[kingbase@postgres sys_wal]$ ll
total 16384
-rw------- 1 kingbase kingbase 16777216 Nov 11 13:17 00000001000000000000000D
drwx------ 2 kingbase kingbase 6 Nov 11 12:08 archive_status
[kingbase@postgres sys_wal]$
WAL日志切换
自之前的WAL日志文件切换以后如果没有新的WAL日志生成,就不会创建新的 WAL 日志文件,也就是说手动切换wal日志,需要有新数据生成才会发生切换,如果没有新数据生成,手动执行sys_switch_wal也无法进行wal日志切换。
有新的数据产生,执行sys_switch_wal就可以切换wal日志:
SELECT sys_walfile_name(sys_switch_wal()), now(), sys_walfile_name(sys_switch_wal());
KingbaseES恢复被删除数据的更多相关文章
- Oracle恢复已删除数据
Oracle恢复已删除的数据,主要有两种方法:SCN和时间戳. 一.通过SCN恢复删除且已提交的数据 1.获得当前数据库的scn号 select current_scn from v$database ...
- oracle 恢复table删除数据 恢复package(使用闪回)
好久没写东西了,今天写一篇凑个数吧,来公司一年多了,感觉自己到了一个小瓶颈期了. 以前每天很多新东西,都是忙着学,感觉没时间写博客总结一下,大部分都是写笔记,现在又是没东西可以写,每天干着95%都是重 ...
- Oracle闪回查询恢复delete删除数据
Flashback query(闪回查询)原理 Oracle根据undo信息,利用undo数据,类似一致性读取方法,可以把表置于一个删除前的时间点(或SCN),从而将数据找回. Flashback q ...
- Cassandra1.2文档学习(11)—— 删除数据
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- Oracle 恢复被删除的数据,解决误操作删除数据
在删除数据的时候不小心,把delete语句执行错了,把别的表给delete,而且还执行了commit!真汗.......数据是相当的重要........废话少说了!赶快找方法吧: 第一种: 1.打开F ...
- linux删除数据文件无备份恢复
参考 : http://www.lunar2013.com/2013/06/linux-%E8%AF%AF%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E6%81%A2%E ...
- Oracle根据时间恢复已删除提交的数据
Oracle 根据数据库的时间戳恢复已删除提交的数据 1.选择一个时间点查看表中数据是否是自己想要的数据 Select * from 表名 as of timestamp to_timestamp(‘ ...
- Oracle的闪回特性之恢复truncate删除表的数据
Oracle的闪回特性之恢复truncate删除表的数据 SQL> show parameter flashback NAME T ...
- 一句DELETE引发的加班(Mysql 恢复Delete删除的数据)
本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开了很多查询,本来要DELETE删除测试DB的数据,没看清在正式环境执行了.共删除了325条数据,然后在网上找 ...
- window下Mysql 恢复Delete删除的数据
转载:https://www.cnblogs.com/q149072205/p/11940591.html 本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开 ...
随机推荐
- 我的Python基础(二)
python包含6种内奸的序列:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象 列表和元组的主要区别在于,列表可以修改,元组则不能. 索引: 使用负数索引时,最后一个元素 ...
- Go语言核心36讲01
你好,我是郝林,今天我分享的内容是:0基础的你,如何开始入门学习Go语言. 1. 你需要遵循怎样的学习路径来学习Go语言? 我们发现,订阅本专栏的同学们都在非常积极的学习和讨论,这让我们非常欣慰,并且 ...
- Mysql通过Merge引擎进行分表
Mysql通过Merge引擎进行分表 转载: https://www.jianshu.com/p/9420a6a8ae2e https://www.cnblogs.com/xbq8080/p/6628 ...
- Kubernetes介绍和资源管理
Kubernetes介绍和资源管理 Kubernetes介绍 官网:https://kubernetes.io/ 一.应用部署方式演变 1.传统部署:互联网早期,会直接将应用程序部署在物理机上 优点: ...
- 写一个linux平台的桌面宠物
效果图 前言 我一直在用python 写一下有趣的东西,让编程不那么无聊,之前一直有写一个桌面宠物的想法,无奈这些都是依赖资源文件,没有图片资源没办法写里面的逻辑,直到我看见了 shimiji手机桌面 ...
- day32 6 请求转发与重定向的区别、session会话对象 & cookie & 8 应用程序上下文对象ServletContext & 5 请求转发与jsp页面内置对象
1 请求转发与重定向的区别 2 session与cookie的区别 3 过滤器与监听器的区别 4 web-inf目录 web-inf目录是安全目录,无法从客户端访问,只能通过(服务端的)servlet ...
- 【文档资料】Linux、Vi/Vim常用命令、文件夹和文件介绍
一.Linux 1.系统信息[左1] 查看磁盘空间使用情况:df+参数 查看当前指定文件或目录的大小:du 查看不同硬件信息:cat/proc/xxx 查看系统和空闲内存:free +参数 SSH退出 ...
- hashlib加密模块 subprocess模块 logging日志模块
目录 hashlib加密模块 简介 hashlib使用流程 hashilb加密模块使用说明 明文绑定密文 密文长度不变 多次传入 密文不可解密原因 加盐处理(salt) 普通加盐 动态加盐 加密实际运 ...
- JavaScript:输出语法
主要有三种,如下所示:
- $_GET方法踩坑
背景 写代码时,遇到一个奇怪的问题:小程序卡券解码接口老是报解码失败,苦寻了一个小时,发现原来是url参数经过thinkphp的I方法被过滤掉,而且涉及到PHP原生的$_GET 原因 I方法底层是原生 ...