当前位置: 首页 > article >正文

PostgreSQL 表文件损坏异常

PostgreSQL 表文件损坏异常
一次意外断电后重启数据库服务,发现一个表对象数据文件损坏,其他的表对象正常,下面是查询该表对象的报错信息。
ERROR:   invalid page in block 10 of relation "base/13593/11025587"

提示:PostgreSQL 如何定位一个表对象在系统文件中的位置
SELECT pg_relation_filepath(oid) FROM pg_class WHERE relname = 'test';

接下来我们分析下这个错误信息:
ERROR:   invalid page in block 10 of relation "base/13593/11025587"
其中 13593 表示数据库 OID,11025587 表示表对象的 relfilenode。block 10 则表示文件的块号。遇到这种情况时,我们需要尽快将数据恢复。恢复的方法可以从备份中恢复,或者如果有从库并且从库的数据没有损害的情况下,从从库查询到数据,然后重建这个对象以及高可用正常的情况下进行主从切换。

当我们在真实的环境中遇到这种情况时,最理想的恢复是有从库并且从库正常,数据文件没有损坏,将数据从从库拷贝出来然后恢复到主库。那么当我们的环境不满足这个条件时,除了使用备份进行恢复外,还有没有比这个稍微好一些但是又快速的数据恢复的方法呢?因为如果使用备份进行恢复数据往往意味着会丢失一些数据,并且如果后面再进行进一步的数据恢复会非常麻烦,甚至都无法实现数据修复,因为对文件进行了二次伤害。

我们可以使用如下的策略进行数据修复:
先连接到数据库,然后通过系统库找到报错的是哪个数据库下的哪个表对象,然后通过设置损坏块 0 填充的方法,最后回收以及重建该对象的方法进行数据修复。在数据表对象可以正常操作之后,再与用前一天的备份恢复的表进行撞表操作,进行数据对比,下面主要讲一下使用 0 填充的这部分操作。

ERROR:   invalid page in block 10 of relation "base/13593/11025587"
SELECT * FROM pg_database WHERE oid = '13593';
\c dbname
SELECT * FROM pg_catalog.pg_class where relfilenode=11025587;
SET zero_damaged_pages = on;
VACUUM FULL tc_customer;
REINDEX TABLE tc_customer;


http://www.kler.cn/a/391241.html

相关文章:

  • leetcode 热题100(78. 子集)dfs回溯 c++
  • [OpenGL]使用 Compute Shader 实现矩阵点乘
  • C#使用Tesseract C++ API过程记录
  • Docker【初识Docker】
  • 《迁移学习与联邦学习:推动人工智能发展的关键力量》
  • C# 读取多种CAN报文文件转换成统一格式数据,工具类:CanMsgRead
  • vue的样式知识点
  • 【Windows】任务管理器无法解决的问题?试试`tasklist`和`taskkill`命令
  • IOS开发之Xcode版本选择
  • POI实现根据PPTX模板渲染PPT
  • 攻防世界38-FlatScience-CTFWeb
  • 【Linux】:进程信号(信号概念 信号处理 信号产生)
  • SpringBoot框架的企业资产管理自动化
  • Docker pull镜像故障分析
  • python遇到问题
  • Snort的配置与使用
  • 6 ARM-PEG-TMA可以作为有机合成中间体,参与合成各种复杂的有机化合物和聚合物
  • Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装
  • Rust学习(三):rust基础Ⅱ
  • 【JAVA】正则表达式中的中括弧
  • 基于MATLAB刻度线表盘识别系统
  • 微擎框架php7.4使用phpexcel导出数据报错修复
  • 计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习
  • 第3关-L0G3000
  • 【计算机网络】网卡NIC的工作内容包括哪些呢?
  • Unet++改进10:添加CPCA||通道先验卷积注意力机制