gpcheckcat

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

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

概要

  1. gpcheckcat [ options] [ dbname]
  2. Options:
  3. -g dir
  4. -p port
  5. -P password
  6. -U user_name
  7. -S {none | only}
  8. -O
  9. -R test_name
  10. -C catalog_name
  11. -B parallel_processes
  12. -v
  13. -A
  14. gpcheckcat -l
  15. gpcheckcat -?

描述

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

Note: 每当用户运行该工具时,它都会检查并删除指定数据库中的孤立的临时数据库方案(没有会话ID的临时方案)。 该工具在命令行上显示孤立临时模式检查的结果,并在日志中记录该结果。

目录不一致是Greenplum数据库系统表之间发生的不一致。一般来说,有三种不一致:

  • Segment级的系统表不一致。例如,包含表数据的系统表与包含列数据的系统表之间的不一致。另一个例子是一个 系统表在本该唯一的列中包含重复。

  • Segment之间相同系统表之间的不一致。例如,一个系统表在一个Segment上缺少一行,但其他Segment具有这一行。 作为另一个例子,特定的行列数据的值在不同的Segment之间不同,例如表所有者或表访问特权。

  • 持久化系统表对象状态和文件系统对象间的不一致。例如,一个文件在数据库目录中存在,但数据库系统表中 不存在相应的对象。

选项

-A

在Greenplum数据库安装的所有数据库上运行gpcheckcat。

-B parallel_processes

并行运行的进程数量。

gpcheckcat工具尝试确定要同时使用的进程数(批尺寸)。该工具假定它可以为 每个进程使用最小为20MB的缓冲区。并行进程的最大数量是Greenplum数据库Segment实例的数量。 当该工具开始检查目录时,它会显示所使用的并行进程的数量。

Note: 如果返回的错误数量超过缓冲区大小,则该工具可能会耗尽内存。如果发生内存不足错误,可以使用 -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 - 检查重复项

foreign_key - 检查外键

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

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

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

orphaned_toast_tables -检查孤立的TOAST表

Note: 有很多种情况都会导致TOAST表变成孤立表,此时不会生成修复脚本,要求进行手工元数据维护。 其中一种情况是pg_class中的reltoastrelid指向一个不正确的TOAST 表(不能匹配到TOAST表)。另外一种情况可能是pg_class表的reltoastrelid 和pg_depend丢失(双孤立TOAST表)。如果需要手工修复元数据, gpcheckcat会显示详细的元数据更新步骤。

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

part_constraint - 检查分区表上的约束

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

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

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

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

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 被调用的目录中生成。

这是该文件的格式:

  1. gpcheckcat.verify.dbname.catalog_table_name.test_name.TIMESTAMP.sql

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

  1. gpcheckcat.verify.mydb.pg_type.missing_extraneous.20150420102715.sql

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

  1. SELECT *
  2. FROM (
  3. SELECT relname, oid FROM pg_class WHERE reltype
  4. IN (1305822,1301043,1301069,1301095)
  5. UNION ALL
  6. SELECT relname, oid FROM gp_dist_random('pg_class') WHERE reltype
  7. IN (1305822,1301043,1301069,1301095)
  8. ) alltyprelids
  9. GROUP BY relname, oid ORDER BY count(*) desc ;