文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PostgreSQL中删除的数据能否恢复

2024-04-02 19:55

关注

作者:沃趣科技首席数据库架构师 唐成



问题的提出



当然如果数据库有备份,可以直接从备份的数据中恢复,本文讨论的是没有备份的情况下能否恢复。 


理论分析

从PostgreSQL多版本实现的原理上,这是有可能的。因为PostgreSQL的多版本原理是旧数据并不删除: 


所以从理论上说,只要把在commit log中刚提交事务状态从“TRANSACTION_STATUS_COMMITTED”改成“TRANSACTION_STATUS_ABORTED”,原先的事务就会做废,就能回到事务之前的状态。 

但这个恢复有一个前提就是旧版本的数据没有被vacuum垃圾回收进程清理掉,如果旧版本的数据已被vacuum垃圾回收进程给清理掉了,就不能恢复了。所以如果作了删除数据的操作后,马上把数据库停下来,这时autovacuum进程还没有把旧版本的数据给清理掉时,数据是可以恢复的。 

但仅仅是把commit log中的事务状态改一下,就能恢复数据吗?答案也是否定的,事情没有这么简单,原因是多版本的可见性判断不仅仅是由commit log中的事务状态的决定的,行上还有t_infomask状态位中的hint信息来决定。如果hint已表示该行上的事务已被提交,则不需要再到commit log中来查看事务的状态了。这个功能主要是为了提高性能,因为到clog中判断行的可见性,而clog中只有8个块是缓存在共享内存中的,如果判断每个行都去查找clog,效率太低了。具体这一部分的内容可以见我的另一篇blog: PostgreSQL中行的可见性判断中t_infomask字段的作用 

所以要想恢复数据,还需要把相应表文件中各行上的t_infomask状态中的hint标志位给清除掉之后,数据才能恢复回来。 


恢复的工具

因为整个恢复的过程比较复杂,为此我写了一个工具叫pg_fix,放在github上:https://github.com/osdba/pg_fix,供大家研究使用。 

首先使用这个工具可以查询某一个表的数据文件中各行的状态: PostgreSQL中删除的数据能否恢复


使用这个工具可以清理表的数据文件中的t_infomask中的hint信息,在清理hint状态之前,先查看行上的t_maskinfo状态:  PostgreSQL中删除的数据能否恢复


然后执行下面命令清除行上的hint状态:  PostgreSQL中删除的数据能否恢复


清除完后,我们再看行上的t_infomask状态:  PostgreSQL中删除的数据能否恢复


查询和改变事务的状态的方法如下: 

查询事务xid=11的状态的命令如下:  PostgreSQL中删除的数据能否恢复


修改事务xid=11的状态的命令如下:  PostgreSQL中删除的数据能否恢复


其中-s后的值表示要把事务改成什么状态,事务的状态值有四种,为0~3,意思如下: 


当然上面使用pg_fix工具直接修改表中数据和commit log中事务的状态都必须是数据库停下来的情况。 

另本文的目的主要是为了研究PostgreSQL的一些原理,所以以上这些操作通常不要拿到生产数据库上去试!!!




阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯