ITPub博客

首页 > 数据库 > 数据库开发技术 > PostgreSQL 怎么通过命令来恢复删除的数据

PostgreSQL 怎么通过命令来恢复删除的数据

原创 数据库开发技术 作者:liuaustin 时间:2021-09-24 06:00:00 0 删除 编辑

最近一段工作较忙,更新的速度可能会减慢,敬请见谅,后期采用隔天更新的方式


误删除数据的情况,一般都是通过备份,或日志来进行恢复,当然ORACLE FLASHBACK的模式实际上也是对一定期限的数据进行数据的恢复。 对于POSTGRESQL 是否可以进行这样的操作,根据POSTGRESQL 的原理来说是可以的。


下面我们就来操作一下瞬间恢复日志的方式


步骤

1  建立一个数据库

2  建立一个表

3  插入数据

4  删除数据

5  数据恢复


这里面我们主要用到的命令为 pg_waldump  pg_resetwal 

pg_waldump 命令就不多说了,前面有详细的一篇提到过,pg_waldump 的使用和日志的分析。


pg_resetwal 命令这边的好好的说一说, pg_resetwal 主要的工作的目的为为了在系统数据损坏的时候,通过pg_resetwal来重新标志日志的位置,让系统可以重启运行并且重置pg_control文件等等。


You are now connected to database "testn" as user "postgres".

testn=# 

testn=# 

testn=# create table deid (id int, name varchar(20));

CREATE TABLE

testn=# insert into deid (id,name) values (1,'t');

INSERT 0 1

testn=# insert into deid (id,name) values (2,'c');

INSERT 0 1

testn=# 

testn=# delete from deid where id =2 ;

DELETE 1

testn=# select * from deid;

 id | name 

----+------

  1 | t

(1 row)




postgres=# \c testn

You are now connected to database "testn" as user "postgres".

testn=# 

testn=# 

testn=# create table deid (id int, name varchar(20));

CREATE TABLE

testn=# insert into deid (id,name) values (1,'t');

INSERT 0 1

testn=# insert into deid (id,name) values (2,'c');

INSERT 0 1

testn=# 

testn=# delete from deid where id =2 ;

DELETE 1

testn=# select * from deid;

 id | name 

----+------

  1 | t

(1 row)



上面我们删除了新插入的数据, 下面我们就通过上面的两个命令将数据还原到删除前的状态


1  步 确认当前的日志的以及LSN号

select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());


2  步根据得到当前的事务号以及日志文件,开始寻找恢复日志的数据范围


3  在找到大约的 delete 前的位置,可以直接通过  LSN 号定位的方式

pg_waldump 00000002000000010000001F 000000020000000100000025 -s 1/7C030CF8


或者通过

pg_waldump 00000002000000010000001F 000000020000000100000025 -r transaction  |  grep  delete 的方式找到准确的删除数据的日志号。


4  在找到并确认事务号的情况下,关闭数据库服务


5   通过指定事务号的方式重置数据库

pg_resetwal -x 464902 -D /pgdata/data/


6  启动数据库并且查看数据是否恢复

经过确认数据已经恢复


但这里需要注意几点 

1  在进行了操作后,设置的LSN 号后的数据都取消了,相当于回滚到指定的事务LSN 号的位置


2  WAL 日志整体被清理,原有的日志(单机)会被归并,原有的日志都没有了。

操作之前的日志

操作后的日志




原文作者:AustinDatabases;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-11-13

  • 博文量
    1980
  • 访问量
    518139