PostgreSQL 怎么通过命令来恢复删除的数据
最近一段工作较忙,更新的速度可能会减慢,敬请见谅,后期采用隔天更新的方式
误删除数据的情况,一般都是通过备份,或日志来进行恢复,当然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 日志整体被清理,原有的日志(单机)会被归并,原有的日志都没有了。
操作之前的日志
操作后的日志
PostgreSQL 怎么通过命令来恢复删除的数据相关推荐
- PostgreSQL一些常用命令
最近一直在学习Postgresql,下面是自己整理的Postgresql的常用命令 连接数据库, 默认的用户和数据库是postgres psql -U user -d dbname 切换数据库,相当于 ...
- linux 进入psql终端,PostgreSQL psql终端命令(PostgreSQL psql terminal command)
PostgreSQL psql终端命令(PostgreSQL psql terminal command) 我试图让psql格式很好,并在这里跟随文档. 现在,每当我对包含大量列的表执行查询时,无论我 ...
- 重启redis命令_redis系列之——数据持久化(RDB和AOF)
在数据库(如mysql)和缓存(如redis)的发展中,都会相互借鉴对方的长处来弥补自身的不足.比如mysql作为持久化数据库,为了提高数据的访问速度,会使用缓存技术,当一条sql查询完成后,mysq ...
- Linux tar命令高级用法——备份数据
Linux tar命令高级用法--备份数据 2015-12-31 Linux学习 Linux上有功能强大的tar命令,tar最初是为了制作磁带备份(tape archive)而设计的,它的作用是把文件 ...
- Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例
学习目标 redis 概念 下载安装 命令操作 1. 数据结构 持久化操作 使用Java客户端操作redis Redis 前言(从百度上抄的, 看看了解一下, 懒得排版了) 1. 概念: redis是 ...
- unix和linux命令_Linux vs. Unix,在命令行中清理数据,为儿童准备的15本书,以及更多必读内容
unix和linux命令 上周,关于Linux与Unix的一篇文章是最受欢迎的读物. 查看其他Opensource.com读者对以下内容的了解: Linux与Unix:有什么区别? ,作者:菲尔·埃斯 ...
- mysql通过命令添加1条数据
mysql通过命令添加1条数据 1.语法: INSERT INTO 表名 (字段1,字段2,...字段n) VALUES (值1,值2,...值n); 2.语法解析: INSERT INTO ... ...
- 在MySQL中如何用SQL命令创建数据库及数据表
HRELLO 大家好! 上期给大家讲解了,MySQL数据库常用的管理命令.现在,给大家讲解,如何用SQL命令在MySQL中创建一个数据库及数据表. 在学习前,我们首先要了解,SQL命令是什么? SQL ...
- oracle数据误删除怎么恢复,oracle误删除的数据怎么恢复 oracle恢复删除的数据方法...
oracle误删除的数据怎么恢复?下面为大家带来oracle恢复删除的数据方法: PART1 分为两种方法:scn和时间戳两种方法恢复. 一.通过scn恢复删除且已提交的数据 1.获得当前数据库的sc ...
最新文章
- Atitit.提升 升级类库框架后的api代码兼容性设计指南
- Yolov5总结文档(理论、代码、实验结果)
- sonarqube使用教程
- symfony的安装方法
- 如何在VS一个工程里面测试不同代码?(创建不同项目,并将需要运行的项目设为启动项目)
- 通俗易懂量子计算的原理
- EOJ_1094_寻找航海路线
- Android 系统(185)---如何使用adb command来设置cpu频率和核数
- 三星Galaxy S21 FE证件照公布:120Hz高刷直屏+骁龙888处理器
- 项目常用工具类整理(一)--时间工具类DateUtil.java
- thymeleaf if 条件判断
- dump的文件 查看pg_详解linux查看磁盘读写信息--blockdump、blktrace、systemtap
- Qt 地址薄 (一) 界面设计
- 【飞行器】基于matlab GUI四旋翼飞行器飞行模拟【含Matlab源码 1183期】
- oracle 11203 ora32701,love wife love life —Roger的Oracle/MySQL数据恢复博客
- System.gc()介绍
- PDF不能编辑怎么办,如何去掉编辑权限
- 甲骨文中国良心裁员:首批900人,赔偿N+6
- SCVMM 2012 SP1 Beta 体验(一)安装准备
- matplotlib: 绘制平面图/表格