场景
欲将Oracle DDL迁移到分布式磐维库上,同时指定部分表的分片键,使用分布式dtp工具。分布式磐维库的环境:每台主机是1cn 2dn,并且两个dn分别独自使用/database1和/database2挂载点存数据。
问题描述
问题1、迁移表报表空间不存在
如下,使用分布式dtp工具将Oracle DDL迁移到分布式磐维,任务提示失败:
点击TABLE的“错误日志”,提示表空间不存在:
--怀疑是迁移任务配置有问题。
通过查看迁移任务中关于表空间这块的设置,发现是置为空的:
所以,需要先正确处理上处问题,即问题2。
问题2、表空间目标路径如何正确填写
由于本次客户环境每台主机是1cn 2dn,并且两个dn分别独自使用/database1和/database2挂载点,如下所示:
创建表空间语法如下,LOCATION只能指定一个,无法为两个dn单独指定LOCATION。
\h create tablespace Command: CREATE TABLESPACE Description: define a new tablespace Syntax: CREATE TABLESPACE tablespace_name [ OWNER user_name ] [ RELATIVE ] LOCATION 'directory' [ MAXSIZE 'space_size' ] [with_option_clause]; |
注意,磐维数据库不支持登入dn中执行CREATE TABLESPACE 命令,会有如下报错:
gsql -r -d postgres -p <dn端口> |
结论:若要将数据分别写入/database1和/database2,当前环境是无法创建合适的自定义表空间的。
处理方法
经沟通,客户无需使用自定义表空间;同时磐维侧的建议也是尽量使用默认表空间。
目前分布式dtp暂不支持将Oracle端需要迁移的自定义表空间改成默认表空间。
注意到迁移任务中已经完整的给出相关创建DDL的sql,只需要将表空间删掉即可,这样一来,创建表的时候就会使用默认表空间pg_default,如下所示:
--报告内容可复制到Excel中处理和替换,生成相应的create table语句,如下:
至于约束、索引、触发器等报错,均是报表不存在所导致。
--报告内容可复制到Excel中处理和替换,生成相应的create或alter语句:
手动处理后,完成迁移DDL,后续使用融合版本dtp基线完成数据的迁移。