VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

数据一致性检查

功能描述

Vastbase支持基于数据库元数据进行数据一致性校验。支持对带有可变长字段的表,并且可变长字段作为索引列的逻辑数据校验。

注意事项

  • 仅支持初始化用户和系统管理员执行一致性检查。

  • 逻辑数据检查只支持astore和ustore。

  • 逻辑数据检查只支持btree索引。

  • 不支持分区表的逻辑数据检查。

语法格式

  • 在数据库中使用SQL语句检查。

    DBCC CHECKTABLE table_name WITH WITH_OPTION;
    
  • 在操作系统使用dbcc工具检查。

    dbcc [OPTION]... [DBNAME] [DESCRIPTION]
    

参数说明

  • table_name

    要进行一致性校验的表名称。

  • WITH_OPTION

    • PHYSICAL_ONLY:表物理文件检查。
    • LOGICAL_DATA:检查索引表物理文件和数据表物理文件数据一致性。
    • LOGICAL_FILE:检查索引表物理文件完整性。
  • OPTION

    • -t, --table=TABLENAME:指定要检查的表名。

    • --with=WITH_OPTION:指定检查类型:PHYSICAL_ONLY、LOGICAL_FILE、LOGICAL_DATA。

    • --internal=TIME:定期查询间隔时间,单位为秒。

    • -?,--help:显示此帮助。

  • 连接选项

    • -h, --host=HOSTNAME:指定运行服务器的主机名,如果数值以斜杠开头则被用作到Unix域套接字的路径。

    • -p, --port=PORT:数据库服务器端口号。

    • -U, --username=USERNAME:指定所连接主机的用户名。

    • -w, --no-password:不出现输入密码提示。如果主机要求密码认证并且密码没有通过其它形式给出,则连接尝试将会失败。

    • -W, --password:指定-U参数所指定的用户密码。

    • --maintenance-db=DBNAME:指定数据库。

示例

1、创建测试表,索引并插入测试数据。

CREATE TABLE test_1200417(f1 int,f2 date,f3 text ,f4 timestamp,f5 varchar(20),f6 varchar2(20),f7 blob,f8 clob, f9 json, f10 bytea,f11 CHARACTER VARYING(100),f12 xml ) ;
CREATE INDEX index_1200417 on test_1200417(f3) ;
CREATE UNIQUE INDEX index_1200417_unique on test_1200417(f5) ;
CREATE INDEX index_1200417_com on test_1200417(f1,f6) ;
CREATE INDEX index_1200417_some on test_1200417 using btree(f1) where f1>1000 ;
INSERT INTO test_1200417 select t,now(),t,now(),t,t,empty_blob(),t,'{"name":"jack"}'::json,'qwert',t,''::xml from generate_series(1,10000) t;

2、在vsql客户端使用dbcc进行检查。

dbcc checktable test_1200417 with logical_data;

返回结果为:

INFO:  [LOGICAL_DATA] index relation "index_1200417" for relation "test_1200417" column "f3" checked success
INFO:  [LOGICAL_DATA] index relation "index_1200417_unique" for relation "test_1200417" column "f5" checked success
INFO:  [LOGICAL_DATA] index relation "index_1200417_com" for relation "test_1200417" column "f1,f6" checked success
INFO:  [LOGICAL_DATA] index relation "index_1200417_some" for relation "test_1200417" column "f1" checked success
DBCC CHECK

3、查询test_1200417表物理文件的ID。

SELECT relfilenode FROM pg_class WHERE relname='test_1200417';

返回结果为:

 relfilenode
-------------
       24570
(1 row)

4、退出数据库,在操作系统使用dbcc工具进行检查。

dbcc -t test_1200417 --with=PHYSICAL_ONLY --maintenance-db=vastbase -U vbadmin

返回结果为:

INFO:  relation "test_1200417" has 178 blocks
INFO:  relation "test_1200417" checked 100 blocks,success:100,failed:0,noblock:0,failedBlocks:[]
INFO:  relation "test_1200417" checked 78 blocks,success:78,failed:0,noblock:0,failedBlocks:[]

5、清理测试数据。

DROP TABLE test_1200417 cascade;