更新时间:2024-07-01 GMT+08:00
导出表定义、语法转换迁移
- 使用拥有sysdba权限的账户(本例使用db_user01)登录PL/SQL Developer。
以下以试用版的PL/SQL Developer的界面为例,实际请以新界面为准。
- 在菜单栏选择“工具 > 导出用户对象...”。
- 选择当前登录用户db_user01,然后选择该用户下的表对象APEX2_DYNAMIC_ADD_REMAIN_TEST,不选择包括存储,并选择语法导出文件的路径(导出的sql文件命名为test),单击“导出”。
导出的DDL文件如下显示。
- 将导出的DDL文件放在解压后的DSC文件夹的input目录下。
- 在runDSC.bat同级目录下shift+鼠标右键,选择在此处打开power shell窗口,并执行转换。其中D:\DSC\DSC\input、D:\DSC\DSC\output、D:\DSC\DSC\log切换为实际DSC的路径。
1
.\runDSC.bat --source-db Oracle --input-folder D:\DSC\DSC\input --output-folder D:\DSC\DSC\output --log-folder D:\DSC\DSC\log --application-lang SQL --conversion-type bulk --target-db gaussdbA
- 转换完成,在DSC的output路径下自动生成转换后的DDL文件。
- 由于DWS的表定义结构与Oracle存在差异,需要手动修改转换后的表定义。
如下,将文件中的\echo整体注释掉(如果使用gsql工具导入表定义的话,不需要注释),同时手动修改指定表的分布列(distribute by hash (列名))。
Hash分布表的分布列选取至关重要,需要满足以下原则:
- 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。
- 在满足第一条原则的情况下尽量不要选取存在常量filter的列。例如,表dwcjk相关的部分查询中出现dwcjk的列zqdh存在常量的约束(例如zqdh=’000001),那么就应当尽量不用zqdh做分布列。
- 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。
- 完成DWS集群的创建,参见创建集群。
- 连接DWS数据库,参见使用Data Studio连接集群,使用系统管理员dbadmin用户连接,首次默认先连接默认数据库gaussdb。
- 创建新的目标数据库test,并切换到test数据库。
1
CREATE DATABASE test WITH ENCODING 'UTF-8' DBCOMPATIBILITY 'ORA' TEMPLATE template0;
- 创建新的Schema并切换到新的Schema,Schema名称与Oracle的用户名(本例为db_user01)保持一致。
1 2
CREATE SCHEMA db_user01; SET CURRENT_SCHEMA = db_user01;
- 复制7中转换后的DDL语句到Data Studio中执行。
- 在DWS集群的test库中的Schema xxx下能查到APEX2_DYNAMIC_ADD_REMAIN_TEST表,即为表定义迁移完成。
1
SELECT COUNT(*) FORM db_user01.APEX2_DYNAMIC_ADD_REMAIN_TEST;
父主题: 迁移表定义