GBaseMigrationToolkit工具Oracle迁移至Gbase8a问题
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【GBase版本】:GBase8a_MPP_Cluster-NoLicense-FREE-9.5.3.28.12-redhat7-x86_64
【操作系统】:centos 7
【CPU】:
【问题描述】*:Oracle数据表建表语句:
CREATE TABLE employees ( emp_id NUMBER PRIMARY KEY, first_name VARCHAR2(50), last_name VARCHAR2(50), email VARCHAR2(100) UNIQUE, hire_date DATE DEFAULT SYSDATE, salary NUMBER(8,2), dept_id NUMBER, CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id) );
其中hire_date给了SYSDATE默认值,但是Gbase8a不支持,直接使用Migration迁移报错,报错代码“com.gbase.jdbc.exceptions.jdbc4.GBaseSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your GBase server version for the right syntax to use near 'SYSDATE
”。我在Gbase8a中创建了employees映射表,将sysdate改为了current_timestamp,然后在迁移设置中将迁移表结构取消勾选,但是报同样的错误,除了修改Oracle表结构,还有别的解决方法吗?
评论
GBase 8a 确实不支持为 DATETIME 类型设置默认值,需要改为 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ,且每个表只支持一个自动更新的 TIMESTAMP 字段 。
方法是: 跳过 DDL 迁移,手动建表
在 Migration 工具的迁移设置中,仅迁移数据,不迁移表结构。
在 GBase 8a 中先手动创建映射表,确保 hire_date 的定义符合 GBase 8a 语法,例如:
CREATE TABLE employees (
emp_id BIGINT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100) UNIQUE,
hire_date TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, -- 调整定义
salary DECIMAL(8,2),
dept_id INT
);
然后进行纯数据迁移。
迁移工具仅勾选迁移数据,跳过结构同步;
备选:Oracle 导出 CSV,通过 load 方式导入 GBase8a。
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526