数据一致性检查
功能描述
Vastbase 支持根据数据库元数据进行数据一致性检查。
语法格式
在数据库中使用sql语句检查。
DBCC CHECKTABLE table_name WITH WITH_OPTION;
在操作系统使用dbcc工具检查。
dbcc [选项]...[连接选项]
参数说明
- WITH_OPTION
- PHYSICAL_ONLY:表物理文件检查。
- LOGICAL_DATA:检查索引表物理文件和数据表物理文件数据一致性。
- LOGICAL_FILE:检查索引表物理文件完整性。
- 选项
- -t, –table=TABLENAME 指定要检查的表名。
- –with=WITH_OPTION 指定检查类型:PHYSICAL_ONLY、LOGICAL_FILE、LOGICAL_DATA。
- –internal 定期查询间隔时间,单位为秒。
- -?,–help 显示此帮助。
- 连接选项
- -h, –host=HOSTNAME 数据库服务器所在机器的主机名或套接字目录。
- -p, –port=PORT 数据库服务器端口号。
- -U, –username=USERNAME 连接的用户名。
- -w, –no-password 永远不提示输入口令。
- -W, –password 强制提示输入口令。
- –maintenance-db=DBNAME 指定数据库。
注意事项
- 检查堆表与索引表数据间的逻辑关系,仅支持表结构中的字段类型为定长类型。
- 若创建表时包含变长字段,删除变长字段也不支持校验。
示例
修改表物理文件进行一致性检查。
1、创建测试表并插入测试数据。
create table test(id int ,name text);
insert into test values (generate_series(1,100000),'chinatest测试');
2、查询test表物理文件的ID。
select relfilenode from pg_class where relname='test';
返回结果为:
relfilenode
-----------------
25009
(1行记录)
3、退出数据库,在$PGDATA/base目录下执行以下语句。
cd $PGDATA/base
find -name 25009
结果返回如下:
./16553/25009
4、修改步骤3查到的文件内容。
5、在操作系统使用dbcc工具进行检查:
dbcc -t test --with=PHYSICAL_ONLY --maintenance-db=vastbase -U vbadmin
返回结果为:
LOG: relation “bmsql_config” has 1 blocks
WARNING: page verification failed,calculated checksum 31338 but expected 29555,the block num is 0
LOG: relation “bmsql_config” checked 1 blocks,success:0,failed:1,noblock:0
6、登录数据库,对表进行检查。
dbcc checktable test with physical_only;
返回结果为:
LOG: relation “bmsql_config” has 1 blocks
WARNING: page verification failed,calculated checksum 31338 but expected 29555,the block num is 0
LOG: relation “bmsql_config” checked 1 blocks,success:0,failed:1,noblock:0
DBCC CHECK
7、清理测试数据。
DROP TABLE test;