首页 > 数据库 >greenplum数据库pg_class缺失元数据报错

greenplum数据库pg_class缺失元数据报错

时间:2023-02-02 16:25:11浏览次数:42  
标签:主机 greenplum gp1 报错 pg master class

本次准备复现一下之前遇到的一个错误,因为硬盘的故障导致的primary实例上的pg_class表内容缺失,会造成在master主机查询报错。

 

在自己的测试机创建新的数据库和表,并将psql命令进入的默认数据库改为新创建的。

如果不指定的话执行psql命令就会报错

建表

查看指定模式下有多少张表

如果不确定表的模式名也可以这样,schema就是模式名。

 

复现错误,删除primary实例上pg_class表中的内容。 

获取表的oid,比如a,b两表。oid字段如果不指定的话是不会出现的。

登录任意peimary节点

标准语句

PGOPTIONS="-c gp_session_role=utility" psql -h ip -p 端口 -d 模式名

例如本次我想登录gp1主机上的gpseg0实例

在gp_segment_configuration表中也能查到端口

删除之前先备份使用copy to命令,可以看到备份的是两行数据。

备份的文件是在登录的指定主机上 我登录的是gp1主机备份的文件就在gp1主机的家目录下

需要注意的是如果没有指定oid字段,就需要加上参数指定OIDS

删除gpseg0主机pg_class表中关于a,b两表的内容,此时在gp1主机上的pg_class表是没有a,b表的内容了,但是在master表是有的。并且此时被删除的表无法在master主机上删除。

master主机

gp1主机

无法删除

其中set allow_system_table_mods=DML;是允许对元数据进行修改,假如不设置的话就会提示没有权限。

 

以上的操作是为了复现当时的错误,正常情况下遇到这样的报错需要使用gpcheckcat命令来检验数据库目录表的不一致性。 

有两个选择一个是在线检查,一个是全量检查 可以根据本身业务的需求选择使用。默认的输出目录是家目录下的gpAdminLogs目录

           在线检查:

nohup $GPHOME/bin/lib/gpcheckcat -O -A -p 5432 2>&1 > gpcheckcat.date +%F_%s.log &

全量检查:注意全量检查需要加master的端口

nohup $GPHOME/bin/lib/gpcheckcat -A -p5432 2>&1 > gpcheckcat.date +%F_%s.log &

可以看到刚才删除的表名和oid和segid

接下来就是修复鉴于gp1主机上只有一个primary,所以尝试使用gp2主机primary的pg_class

登录gp2主机

将a,b两表的内容copy到家目录

将文件从gp2传输到gp1

登录gp1主机使用copy命令使用gp2主机的文件恢复并查询

master主机查询

 

标签:主机,greenplum,gp1,报错,pg,master,class
From: https://www.cnblogs.com/xurui96/p/17086381.html

相关文章

  • greenplum数据库vacuum操作
    一:vacuum什么是vacuumvacuum是greenplum数据库中用来回收死亡元组占用空间的语句。 标准语句:VACUUM[FULL][FREEZE][VERBOSE][table] VACUUM[FULL][FREEZE......
  • greenplum资源队列
     greenplum的资源队列 1.资源队列的基本原理   资源队列存在的目的是为了防止多个会话同时执行,争夺系统资源和避免造成资源耗尽,如Memory、CPU、磁盘I/O这三种资源......
  • greenplum数据库、模式、表空间、role的含义与关系
    greenplum数据库、模式、表空间、role的含义与关系(基于4.3.30版本)role在GP中是通过role来控制数据库的访问权限,role包含两个概念一个是user一个是group。两者的创建方式......
  • greenplum集群实例频繁宕机
    环境描述:名称版本操作系统Linuxversion:redhat7.4GreenplumDatabase:greenplum4.3.30.4 问题描述:在生产环境中我们所维护的greenplum集......
  • bug|git 提交代码报错|vue-cli-service lint found some errors. Please fix them and
    前言git提交代码报错,使用除了参考链接里的解决方案,正好复习一下之前学习的GitHooks:错误git日志git-error-1675323308267...✖vue-cli-servicelintfounds......
  • mac编译wat报错解决方案
    按照github的步骤一步步来的时候,最后一步出现问题,ld:cannotlinkdirectlywithdylib/framework,yourbinaryisnotanallowedclientof/usr/lib/libcrypto.dylib......
  • 报错:Unexpected reserved word 'await'?
    async和await是成对出现的。会报上边的错是因为没有把async放在和await最近的函数上。举例:报错代码:1asyncconfirmAll(){2this.$refs['editeForm'].valida......
  • 报错解决记录笔记
    1.2023-2-2启动程序,提示某个类版本不对,应为55.0,实际为52.0解决:首先,右键项目-打开模块设置-设置所有模块的"源"和"依赖"的jdk版本与项目使用的一致;另外打开,......
  • gitk 报错 X Error of failed request: BadLength (poly request too large or intern
    问题今天修改了一下hugo的配置文件,然后使用gitk来查看改动,结果报错"XErroroffailedrequest:BadLength(polyrequesttoolargeorinternalXliblengtherror......
  • 执行gulp build报错
    问题与分析在执行​​gulpbuild​​报错如下:D:\coding\Resume\Resumes>gulpbuildgulpbuild[5628]:src\node_contextify.cc:628:Assertion`args[1]->IsString()'faile......