vb_ttdump
功能描述
vb_ttdump工具提供了一种通用的快速在线导出数据的方法(物理迁移),其可以最小支持到以表为粒度在线快速迁移,通常与vb_ttrestore工具一起使用。
- 从Vastbase G100 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 G100 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)