VastbaseG100

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

Menu

vb_ttdump

功能描述

vb_ttdump工具提供了一种通用的快速在线导出数据的方法(物理迁移),其可以最小支持到以表为粒度在线快速迁移,通常与vb_ttrestore工具一起使用。

  • 从Vastbase V2.2 Build 11版本开始,该工具支持以分区为粒度的动态加载(用于在替换物理文件之后重新加载物理文件)和数据迁移操作,并且支持表结构变更后的数据迁移操作。
  • 分区级别的动态动态加载和数据迁移操作仅支持在一级分区中使用,包括hash分区,range分区与list分区。

使用该工具导出数据时,会对指定导出的对象进行刷脏操作,同时将其置为只读状态,命令执行完成后,会自动将相关对象只读状态解除。

注意事项

  • 用户在使用vb_ttdump和vb_ttrestore工具进行数据迁移时,需对如下内容进行确认:

    • 确保源库及目标库数据库版本一致,编码一致。

    • 确保待迁移的表上没有外键约束,对于有外键约束的表,需要将关联表同时导出。存在外键约束的情况下,如果不将父表一起进行迁移,则在导入子表时会报错,子表无法导入到目标库中。

      vb_ttdump工具在导出时不会检测外键约束,需要操作者先自行检查。

    • 禁用状态的索引不会被导出,如果要迁移禁用的索引,需要操作者先取消其禁用状态。

  • 该工具仅支持astore存储引擎下无压缩的行存表,不支持压缩表、列存表、全局分区索引、interval分区、物化视图。

  • 该工具不迁移表空间,使用目标数据库的默认表空间。

  • 该工具不支持列备注的迁移。

  • 在动态加载前,需要事先确认表结构是否支持恢复,分别对源表和目标表进行查询,保证源表和目标表变量数量、名称、顺序、都匹配。查询方式如下:

    select oid from pg_class where relname='relname';
    select * from pg_attribute where attrelid = oid and attnum>0 order by attnum;
    

语法格式

vb_ttdump [OPTION]...

参数说明

通用参数

  • -d, --database=DBNAME

    指定要导出的database。

    该参数不与-n,-t冲突,如果没有指定-n,-t参数,则导出整个database,否则按照更细粒度的指定进行导出。

  • -D, --data-directory=DIR

    指定数据文件的输出路径,需保操作用户对该路径具有读写权限,并确保存储空间充足。

  • -f, --metadata-file=FILENAME

    指定导出的数据的元数据存储文件,其对应的数据文件转储到-D指定的路径。

  • -F, --format=p|t

    指定输出格式。

    • p:原样输出。

    • t:tar格式输出。

  • -n, --schema=SCHEMA

    指定要导出的schema。当指定-n参数时,忽略-t和-P参数,此时导出指定schema下的所有表。

  • -t, --import-tables=TABLE

    指定要导出的表。可以通过schema_name.table_name来指定模式名,多张表可以通过多个-t来指定。

  • -P, --export-table.partitions=TABLE.PARTITION

    指定要导出的分区,多个分区可以通过多个-P指定。

    • 该参数仅在Vastbase V2.2 Build 11及以后版本支持。
    • 可以将schema_name.table_name当作表名来指定模式名,输入格式可以为schema_name.table_name.partname或者table_name.partname
  • -v, --verbose

    在导出时显示详细信息。

  • -V, --version

    查看该工具软件版本号。

  • -?, --help

    显示帮助信息。

连接参数

  • -h, --host=HOSTNAME

    指定登录数据库的主机名。

  • -p, --port=PORT

    指定登录数据库的端口号。

  • -U, --username=NAME

    指定导出所使用的用户,该用户要求为具有系统管理员权限的用户。

  • -w, --no-password

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

  • -W, --password=PASSWORD

    指定-U参数所指定的用户密码。

使用示例

假如用户需要将当前数据库中的表导入到其他数据库中,可以执行如下操作。

例如,当前数据库vastbase中有一张表test,需要导入目标数据库transtest中去。

1、在数据库vastbase中创建测试表test,并插入数据。

create table test(id int,name varchar);
insert into test values(1, 'aaa'), (2, 'bbb');

2、创建目标数据库transtest。

create database transtest;

3、创建具有系统管理员权限的用户。

CREATE USER sysadmin WITH SYSADMIN password "Bigdata@123";

4、创建导出备份文件的文件夹。

mkdir -p /tmp/trans_test

5、使用具有系统管理员权限的用户导出表test。

vb_ttdump -U sysadmin  -W  'Bigdata@123' -D /tmp/trans_test -f /tmp/trans_test/test.dmp -F p  -t test -d vastbase

返回结果如下所示:

init options.
fixing permissions on existing directory /tmp/trans_test ... check options.
dump ddl.
command: "/home/vb_210/local/vastbase/bin/gs_dump"  -U "sysadmin" -W "Bigdata@123" vastbase -f "/tmp/trans_test/vb_tabledump.sql" -t 'test' --schema-only --quote-all-identifiers --include-depend-objs -O -x --only-table -Fc  >> "vb_ttdump.log" 2>&1
vacuum freeze public.test
flush data.
copy data files to dest directory.
command: rm -rf "/tmp/trans_test/test.dmp" && touch "/tmp/trans_test/test.dmp"
command: cp "/home/vb_210/data/vastbase/base/16553/25324" "/tmp/trans_test"
command: cp "/home/vb_210/data/vastbase/base/16553/25324_fsm" "/tmp/trans_test"
command: cp "/home/vb_210/data/vastbase/base/16553/25324_vm" "/tmp/trans_test"
command: cp "/home/vb_210/data/vastbase/base/16553/25327" "/tmp/trans_test"
command: cp "/home/vb_210/data/vastbase/base/16553/25329" "/tmp/trans_test"
total time: 525  ms

6、修改导出文件的权限。

chmod -R 777 /tmp/trans_test

7、使用具有系统管理员权限的用户将表test导入至目标数据库transtest下。

vb_ttrestore -U sysadmin  -W  'Bigdata@123' -D /tmp/trans_test -f /tmp/trans_test/test.dmp  -d transtest

8、连接到transtest数据库查看导入的test表。

vsql -d transtest -r
select * from test;

返回结果如下,表示数据导入成功。

 id | name
----+------
  1 | aaa
  2 | bbb
(2 rows)