博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何解决Greenplum中无法通过标准命令修复的元数据错误
阅读量:7052 次
发布时间:2019-06-28

本文共 1673 字,大约阅读时间需要 5 分钟。

hot3.png

Greenplum的可靠性还是没法和传统商业数据库相比,它跑着跑着就会把自己的元数据给跑乱,有些是可以通过命令修复的,有些则只能直接去增删改system catalog。本文结合一个具体错误,介绍如何操作system catalog解决元数据错误。

现象

使用gpcheckcat -p 5432 databasename检查数据库时,将报出类似如下的输出:

Relation oid: 12345678Relation name: None.None    Name of test which found this issue: foreign_key_pg_class        No pg_class entry for gp_distribution_policy {'localoid':12345678 } on master (mdw:5432)

在master host的OS里,用Greenplum的管理员用户,比如gpadmin,执行:

psql -d databasename -c 'select * from gp_distribution_policy where localoid=12345678;'

见得到类似如下输出:

localoid | attrnums----------+----------  12345678 | {1}(1 row)

分析

这个错误表示在master node中记录分布策略的gp_distribution_policy元数据表中,存在一行记录表示Relation(oid=12345678)的分布策略(按column 1分布),而在记录所有数据库对象的pg_class元数据表中根本就没有oid=12345678的relation,因此,也无从获取到relation的名字(错误信息中只好显示为None.None)。在这种情况下,没有任何数据库命令能drop掉这个oid=12345678的relation。只好直接去操作system catalog。

解决

基本思路当然就是将gp_distribution_policy的这条记录删除,但是Greenplum是不允许直接操作system catalog的:

databasename=# delete from gp_distribution_policy where localoid=12345678;ERROR:  permission denied: "gp_distribution_policy" is a system catalog

要操作system catalog,数据库必须已maintenance mode启动,psql要使用utility mode连接到数据库上,具体操作步骤如下,这些操作需要在维护窗口做,因为涉及到数据库停机:

  • root登陆master host

  • 切换到Greenplum的管理员用户,比如gpadmin:

su - gpadmin
  • 停止数据库:

gpstop -M fast
  • 将数据库启动到维护模式:

gpstart -m
  • 使用utility模式连接数据库:

PGOPTIONS='-c gp_session_role=utility' psql databasename
  • 在psql中设置system catalog可以编辑:

databasename=# set allow_system_table_mods=DML;
  • 在psql中删除gp_distribution_policy中的记录:

databasename=# delete from gp_distribution_policy where localoid=12345678;
  • 退出psql:

databasename=# \q
  • 停止数据库维护模式:

gpstop -m
  • 启动数据库生产模式:

gpstart

 

转载于:https://my.oschina.net/goopand/blog/486043

你可能感兴趣的文章
Linux下怎样搭建 SVN 服务器
查看>>
12 种编程语言的起源故事
查看>>
不同数据结构的比较原理
查看>>
网站流量暴涨,如何解决?
查看>>
saltstack同步文件--saltstack cp.get_file(三)
查看>>
我的友情链接
查看>>
SSH错误解决
查看>>
sqlalchemy备忘 笔记
查看>>
我的友情链接
查看>>
与用户和组相关的文件位置 -- 学习笔记
查看>>
遍历一个三维数组
查看>>
Objective-C编程中的数字类型(NSInteger,NSUInteger,NSNumber)
查看>>
记《浪潮之巅》-第一版-17.成功的转基因
查看>>
我的友情链接
查看>>
一句话过滤出linux下ip地址
查看>>
从星期四起转战PHP
查看>>
PART ONE 发布网站
查看>>
GRE ×××技术
查看>>
我的友情链接
查看>>
wget: server returned error: HTTP/1.1 416 Requested Range Not Satisfiable
查看>>