gpcheckcat

gpcheckcat

gpcheckcat工具测试Greenplum数据库目录表的不一致性。

该工具在$GPHOME/bin/lib中。

概要

gpcheckcat [ options] [ dbname] 

  Options:
     -g dir
     -p port
     -P password
     -U user_name
     -S {none | only}
     -O
     -R test_name 
     -C catalog_name
     -B parallel_processes
     -v
     -A

gpcheckcat  -l 

gpcheckcat -? 

描述

gpcheckcat工具运行多种测试检查数据库目录的不一致。 某些测试不能与其他负载语句同时运行,否则结果将不可用。运行gpcheckcat时,要以受限模式重新启动数据库,否则,gpcheckcat可能会由于正在进行的数据库操作而报告不一致,这会与实际的不一致数量不同。如果用户在不停止数据库活动的情况下运行gpcheckcat,请使用-O选项运行它。

注意: 每当用户运行该工具时,它都会检查并删除指定数据库中的孤立的临时数据库方案(没有会话ID的临时方案)。该工具在命令行上显示孤立临时模式检查的结果,并在日志中记录该结果。
目录不一致是Greenplum数据库系统表之间发生的不一致。一般来说,有三种不一致:
  • Segment级的系统表不一致。例如,包含表数据的系统表与包含列数据的系统表之间的不一致。另一个例子是一个系统表在本该唯一的列中包含重复。
  • Segment之间相同系统表之间的不一致。例如,一个系统表在一个Segment上缺少一行,但其他Segment具有这一行。作为另一个例子,特定的行列数据的值在不同的Segment之间不同,例如表所有者或表访问特权。
  • 一个Segment上持久化表的不一致性是持久化对象状态和文件系统对象间的不一致。例如,没有正在运行的事务,所有事务都已完成,但是有对象在持久化表中被标记为creation incomplete。又如,一个文件在数据库目录中存在,但数据库系统表中不存在相应的对象。

选项

-A
在Greenplum数据库安装的所有数据库上运行gpcheckcat
-B parallel_processes
并行运行的进程数量。
gpcheckcat工具尝试确定要同时使用的进程数(批尺寸)。该工具假定它可以为每个进程使用最小为20MB的缓冲区。并行进程的最大数量是Greenplum数据库Segment实例的数量。当该工具开始检查目录时,它会显示所使用的并行进程的数量。
注意: 如果返回的错误数量超过缓冲区大小,则该工具可能会耗尽内存。如果发生内存不足错误,可以使用-B选项降低批尺寸。例如,如果该工具显示批尺寸为936并且内存不足,则可以指定-B 468并行运行468个进程。
-C catalog_table
对指定的目录表运行交叉一致性、外键和ACL测试。
-g data_directory
生成SQL脚本来修复目录不一致。脚本被放置在data_directory中。
-l
列出gpcheckcat测试。
-O
只运行可以在线(不受限)模式运行的gpcheckcat测试。
-p port
这一选项指定Greenplum数据库使用的端口。
-P password
连接到Greenplum数据库的用户的密码。
-R test_name
指定要运行的测试。某些测试只有当Greenplum数据库处于受限模式时才能运行。
这些是可以执行的测试:

acl - 对访问控制特权的交叉一致性检查

duplicate - 检查重复项

duplicate_persistent - 检查重复的gp_persistent_relation_node

foreign_key - 检查外键

inconsistent - 对Master和Segment不一致性的交叉一致性检查

mirroring_matching - 检查集群和Segment的镜像是否一致(启用或禁用)

missing_extraneous - 对缺少的或无关的项的交叉一致性检查

owner - 检查表的拥有关系是否与Master数据库不一致

part_integrity - 检查pg_partition分支的完整性、带OID的分区、分区分布策略

part_constraint - 检查分区表上的约束

unique_index_violation - 检查有唯一索引约束的列的表中是否有重复项

dependency - 检查不存在对象的依赖关系(仅限于受限模式)

distribution_policy - 检查随机分布表上的约束(仅限于受限模式)

namespace - 检查缺少方案定义的方案(仅限于受限模式)

persistent - 检查持久化表(仅限于受限模式)

pgclass - 检查没有任何对应的pg_attribute项的(仅限于受限模式)pg_class项。

-S {none | only}
指定这一选项以控制对Greenplum数据库安装中所有数据库(如 pg_database)上共享的目录表的测试。
none禁用对共享目录表的测试。值only仅测试共享目录表。
-U user_name
连接到Greenplum数据库的用户
-? (帮助)
显示在线帮助。
-v (详细模式)
显示所执行测试的详细信息。

注解

该工具可识别缺少属性的表,并将其以非标准格式显示在输出中的各个位置。在显示输出信息之后,该工具还会以格式database.schema.table.segment_id显示缺少属性的表的摘要列表。

如果gpcheckcat检测到不一致的OID(对象ID)信息,它将生成一个或者多个包含SQL查询的验证文件。用户可以运行SQL查询来查看有关OID不一致的详细信息,并调查不一致之处。这些文件在gpcheckcat被调用的目录中生成。

这是该文件的格式:

gpcheckcat.verify.dbname.catalog_table_name.test_name.TIMESTAMP.sql
这是当gpcheckcat检测到数据库mydb中的目录表pg_type中的不一致OID(对象ID)信息时,它创建的验证文件名示例: :
gpcheckcat.verify.mydb.pg_type.missing_extraneous.20150420102715.sql

这是验证文件中查询的一个示例:

SELECT *
  FROM (
       SELECT relname, oid FROM pg_class WHERE reltype 
         IN (1305822,1301043,1301069,1301095)
       UNION ALL
       SELECT relname, oid FROM gp_dist_random('pg_class') WHERE reltype 
         IN (1305822,1301043,1301069,1301095)
       ) alltyprelids
  GROUP BY relname, oid ORDER BY count(*) desc ;