更新时间:2024-06-11 GMT+08:00

Oracle To GaussDB配置项使用说明

问题描述

配置建议

建议值

从Oracle采集全特性表结构,验证成功率低,库差异大且无法全覆盖。

建议配置“表结构转换模式”解决该类问题

说明:

仅当源库为Oracle且目标库为GaussDB 主备版-2.7 企业版时,可配置该特性。

只保留表的表名、列名、列约束、索引、主键信息。

影响:

  1. 保留表名、列名、列约束、唯一索引和主键,忽略外键、表空间、物理存储特性等。
  2. 保留LIST和RANGE分区,忽略HASH分区,interval、automatic自动分区,忽略二级分区,虚拟列分区等。
  3. 忽略特性相关的转换配置项的内容也将会忽略处理。

Oracle UNLOG属性的表,当数据库日志级别是FORCE LOGGING时还会记录日志。 但GaussDB指定了UNLOG后完全不会记录日志,造成数据无法恢复。

建议配置“NOLOGGING表”配置

如果确定不需要日志的话,选择“将NOLOGGING转换为UNLOGGED”。

影响:GaussDB V5不支持NOLOGGING表。此配置将移除NOLOGGING,并将NOLOGGING转换为UNLOGGED,转换后不影响性能。GAUSSDB UNLOGGED表完全不会记录日志。

Oracle创建对象,字段值默认大写,而GaussDB创建对象,字段值默认成小写。但引号中的字段值,创建的时候会保持不变。

建议配置“含有特殊字符的对象名称大小写转换”解决该类问题

如果对象名称中含有特殊字符,将该名称转换为小写字母。

从Oracle采集的对象内容中如果有使用了gauss保留的关键字,会导致失败。

建议配置“含有保留关键字符的对象名称大小写转换”解决该类问题

如果对象名称中含有保留关键字且为大写字母,将该名称转换为小写字母。 如果对象名称中含有保留关键字且混用大小写字母,该名称保持不变。如果对象名称中含有保留关键字,该对象名称保持不变且不保留对象名称的双引号,记录错误信息。

GaussDB 1.4和2.7主备版本和所有的分布式版本不支持Oracle中的PACKAGE语法。

建议配置“包”解决该类问题

将包名和存储过程名合并。

GaussDB主备版本和所有分布式版本不支持Oracle中的FOREIGN KEY约束。

建议配置“FOREIGN KEY约束”解决该类问题

注释FOREIGN KEY约束。

GaussDB不支持Oracle的CHARACTER_SET语法。

建议配置“CHARACTER_SET支持”解决该类问题

注释不支持语句。

GaussDB字符集大小与Oracle字符集大小不一致。

建议配置“字符集不匹配”解决该类问题(当使用sql语句转换功能时,需要同时配置“源库字符集”、“目标库字符集”)

说明:

对象迁移项目中,源库字符集将采用评估项目获取的源数据库字符集,目标库字符集将采用目标数据库实际的字符集 。

调整CHAR(n)、VARCHAR(n)、VARCHAR2(n)和NCHAR(n)的大小。

Oracle创建系统视图默认都为大写,而GaussDB默认为小写,如果有些带有引号的强制大写的场景,在使用时会有引用不到的问题。

建议配置“系统视图对象大小写”解决该类问题

将对象名称设置为小写字母。

GaussDB V5R2不支持Oracle的授予表、类型、触发器、同义词、序列、存储过程等对象的创建权限。如果没有向相关对象提供授权,对象将创建失败。

建议配置“对象级权限”解决该类问题

迁移脚本,并提供schema级授权。

GaussDB在create table和create index语句中支持Oracle的表空间子句语法。但是,如果指定的表空间在GaussDB中不存在,则create table和create index语句执行失败。建议使用默认表空间。

建议配置“表空间(表空间映射高于此配置)”解决该类问题

注释表空间子句。

因权限不足,导致对象在目标库无法执行。

建议配置“用户连接”解决该类问题

将sysadmin设置为执行GaussDB脚本的用户。

Oracle支持的MAXVALUE和MINVALUE分别为1027和-1026。如果输入的序列的MINVALUE / MAXVALUE超出范围(-9223372036854775808至9223372036854775807)。

建议配置“超出限制的序列值”解决该类问题

如果序列的MINVALUE / MAXVALUE超出了限制范围(-9223372036854775808至9223372036854775807),GaussDB主备版-2.0 企业版及之后版本替换为LARGE SEQUENCE,分布式和GaussDB主备版-1.4 企业版替换为边界值。

GaussDB不支持Oracle的DBMS_SCHEDULER.CREATE_DATABASE_DESTINATION特性语法。

建议配置“DBMS_SCHEDULER.CREATE_DATABASE_DESTINATION”解决该类问题

DBMS_SCHEDULER.CREATE_DATABASE_DESTINATION语法保持原样,不进行迁移,记录错误消息。

GaussDB1.4版本不支持Oracle的READ ONLY关键字,迁移脚本编译失败。

建议配置“表只读子句”解决该类问题

创建触发器,支持READ ONLY模式。

GaussDB 分布式全局临时表不支持带schema的问题。

建议配置“全局临时表名转换”解决该类问题

转换后的表名是由schema名和表名组成,两者之间采用分隔符隔开。

GaussDB 不支持Oracle的系统权限,系统权限授予失败。

建议配置“系统权限”解决该类问题

注释整个SQL脚本。

GaussDB不支持Oracle的LONG数据类型,迁移脚本编译失败。

建议配置“long数据类型”解决该类问题

将LONG类型转换为TEXT数据类型。

GaussDB 主备版本和所有分布式不支持Oracle的Sub分区。

建议配置“Sub分区”解决该类问题

转换脚本,注释Sub分区。

GaussDB不支持LONG RAW数据类型。

建议配置“long raw数据类型”解决该类问题

将LONG RAW转换为BYTEA数据类型。

GaussDB支持FLOAT数据类型,该数据类型将被隐式转换为DOUBLE PRECISION。在Oracle中,FLOAT默认精度(最大精度)为126。在GaussDB中,FLOAT精度高于53,将引发错误,语句执行失败。

建议配置“float数据类型”解决该类问题

建议将FLOAT/FLOAT(n)转换为NUMBER。若要保持FLOAT类型的转换且精度大于53或者精度为空时,可选择将FLOAT/FLOAT(N)转换为FLOAT(53)选项。

GaussDB 3.1 分布式及以下版本部署不支持Oracle的LIST分区。

建议配置“LIST分区”解决该类问题

注释LIST分区

GaussDB不支持Oracle的将系统角色授予用户。

建议配置“系统角色”解决该类问题

注释整个授权语句。

GaussDB 3.1 分布式及其以下版本不支持Oracle存储过程和DML语句中使用的ROWNUM。

建议配置“ROWNUM”解决该类问题

转换脚本,并将ROWNUM转换为LIMIT。

GaussDB2.7版本的分布式版本不支持Oracle的Hash分区。

建议配置“Hash分区”解决该类问题

注释Hash分区。

目标数据库是分布式部署,如果没有分布键,GaussDB 2.7及下版本会执行失败,GaussDB 3.2及以上版本将创建全局二级索引。

建议配置“唯一约束或唯一索引中没有分布键”解决该类问题。

唯一索引中没有分布键,则注释唯一关键字;唯一约束中没有分布键,则注释掉唯一约束并创建关联的普通索引。

创建同义词的用户名称与对象owner名称不一致时,会有使用权限问题。

建议配置“同义词”解决该类问题

添加ALTER语句更改Owner详细信息。

GaussDB 3.2版本之前不支持Oracle的GENERATED AS IDENTITY语法。

建议配置“IDENTITY列”解决该类问题

将Oracle的IDENTITY列转换为序列号类型。

如果GaussDB不支持Oracle的指定的SET_ATTRIBUTE,迁移将会执行失败。GaussDB支持的SET_ATTRIBUTE包括:START_DATE, REPEAT_INTERVAL, END_DATE, COMMENTS, PROGRAM_TYPE, PROGRAM_ACTION, NUMBER_OF_ARGUMENTS, SCHEDULE_NAME, JOB_TYPE, JOB_ACTION, JOB_CLASS, ENABLED, AUTO_DROP, CREDENTIAL_NAME, DESTINATION_NAME, PROGRAM_NAME, JOB_STYLE。

建议配置“DBMS_SCHEDULER.SET_ATTRIBUTE ”解决该类问题

如果指定了不支持的SET ATTRIBUTES,注释DBMS_SCHEDULER.SET_ATTRIBUTE语法。

GaussDB不支持Oracle的REVERSE索引。

建议配置“索引语句中使用REVERSE关键字”解决该类问题

注释REVERSE关键字。

GaussDB V5R1以及GaussDB V5R2旧版本不支持Oracle的AUTHID子句。

建议配置“PL/SQL对象的AUTHID子句”解决该类问题

如果未指定AUTHID DEFINER/INVOKER,添加AUTHID DEFINER与Oracle配置相匹配。此配置适用于GaussDB V5R2旧版本,因为该版本默认与Oracle配置不匹。

GaussDB不支持NCLOB数据类型。

建议配置“nclob数据类型”解决该类问题

将NCLOB转换为TEXT数据类型。

GaussDB不支持XMLTYPE数据类型。

建议配置“XMLTYPE数据类型”解决该类问题

说明:

仅GaussDB 3.1及之前的版本可配置此参数。

将XMLTYPE数据类型转换为JSON/TEST数据类型。

创建索引使用了gauss不支持的函数,创建索引将会报错。

建议配置“索引中使用函数”解决该类问题

注释采用不支持函数创建索引的语句。

GaussDB 分布式不支持Oracle的INTERVAL分区语法。

建议配置“表间隔分区”解决该类问题

注释INTERVAL分区语法。

GaussDB不支持Oracle的外部和全局用户。

建议配置“全局或外部用户”解决该类问题

注释整个创建用户的语句。

GaussDB不支持Oracle的MBRCOORDLIST数据类型。

建议配置“MDSYS.MBRCOORDLIST对象类型”解决该类问题

将MBRCOORDLIST对象类型转换为TEXT数据类型。

GaussDB不支持Oracle的BITMAP索引。

建议配置“bitmap索引”解决该类问题

创建BTREE索引,而不是BITMAP索引。

GaussDB分布式不支持Oracle的指定创建全局临时表。

建议配置“全局临时表”解决该类问题

创建本地临时表。

GaussDB不支持Oracle的DEFAULT ON NULL子句。

建议配置“DEFAULT ON NULL子句”解决该类问题

注释ON NULL关键字。

Oracle中的CLOB最大可存储4GB数据,GaussDB支持CLOB数据类型,在GaussDB 2.7及之后主备版最大可存储32TB数据,其他版本最大可存储1GB数据。超出会报错。

建议配置“clob数据类型”解决该类问题

不转换CLOB数据类型。GaussDB支持CLOB数据类型。用户看到更新消息,Oracle中的CLOB最大可存储4GB数据,GaussDB支持CLOB数据类型,在GaussDB V5R2C10及之后主备版最大可存储32TB数据,其他版本最大可存储1GB数据。

GaussDB 不支持Oracle的SQL PLUS命令。

建议配置“SQL PLUS”解决该类问题

注释SQL PLUS命令。

Oracle中,BLOB数据类型最大可存储4GB数据。GaussDB支持BLOB数据类型,在GaussDB2.7及之后主备版最大可存储32TB数据,其他版本最大可存储1GB数据。如果表列数据超过限制,数据更改操作(INSERT/UPDATE)将失败并引发错误。

建议配置“支持blob数据类型”解决该类问题

不转换BLOB数据类型。GaussDB支持BLOB数据类型。用户获得更新消息Oracle中,BLOB最大可存储4GB数据,在GaussDB V5R2C10及之后主备版最大可存储32TB数据,其他版本最大可存储1GB数据。

GaussDB不支持Oracle的GEOMETRY数据类型。

建议配置“GEOMETRY对象类型”解决该类问题

将GEOMETRY类型转换为TEXT数据类型。

GaussDB只支持GREGORIAN日历,以及TO_DATE和TO_TIMESTAMP中两个参数。Oracle中,如果 TO_DATE函数中指定了除GREGORIAN日历外的第三个参数,迁移脚本将执行失败。

建议配置“GREGORIAN以外的日历类型”解决该类问题

如果指定了除GREGORIAN日历外的第三个参数,注释GREGORIAN日历。

GaussDB部分支持Oracle的物理视图刷新。

建议配置“物化视图中的REFRESH”解决该类问题

注释物理视图刷新。

GaussDB不支持指定物化视图的“创建方式”、“查询重写”等属性。

建议配置“物化视图中的相关属性”解决该类问题

注释物化视图中不支持的子句。

GaussDB 分布式不支持Oracle的层次查询。

建议配置“层次查询”解决该类问题

转换层次查询。

GaussDB不支持Oracle的SDO_GEOMETRY数据类型。

建议配置“SDO_GEOMETRY对象类型”解决该类问题

将SDO_GEOMETRY对象类型转换为TEXT数据类型。

GaussDB不支持Oracle的EDITIONING关键字。

建议配置“编辑视图”解决该类问题

注释视图语句中的EDITIONING关键字。

GaussDB不支持Oracle的alter table语句中的UNUSED关键。

建议配置“UNUSED关键字”解决该类问题

删除表中未使用的列。

GaussDB 1.4主备版本和所有分布式版本不支Oracle的schema与包同名。

建议配置“包名称”解决该类问题

将包名称使用双引号括起来,执行迁移。

Oracle使用的NUMBER类型如果没有小数位,例如:NUMBER(10),则可以采用优化方案。

建议配置“小数位数为零的数字数据类型”解决该类问题

如果NUMBER精度介于1和4之间,则被转换为SMALLINT类型。如果NUMBER精度介于5和9之间,则被转换为INT类型。如果NUMBER精度介于10和18之间,则被转换为BIGINT类型。

GaussDB不支持Oracle的SYS_OP_C2C函数。

建议配置“SYS_OP_C2C”解决该类问题

注释SYS_OP_C2C函数名称。

对于原生支持的对象,如果有部分语法上的兼容问题,需要进行验证。

建议配置“解析转换后SQL”解决该类问题

解析转换后的SQL。

GaussDB不支持Oracle的CREATE TABLE语句中使用MONITORING子句。

建议配置“MONITORING”解决该类问题

注释CREATE TABLE语句中的MONITORING子句。

GaussDB不支持表自动分区。

建议配置“表自动分区”解决该类问题

注释自动分区语句。

GaussDB的ctid只能部分支持Oracle的ROWID。

建议配置“ROWID伪列”解决该类问题

ROWID将转换为GaussDB的系统列ctid和tableoid。

GaussDB只能支持部分hint场景。

建议配置“Hint调优”解决该类问题

转换GaussDB支持的hint,不支持的子句给出错误提示信息。

GaussDB不支持分区表中使用NOLOGGING。

建议配置“分区表中使用NOLOGGING”解决该类问题

注释NOLOGGING。

GaussDB不支持virtual columns。

建议配置“虚拟列为分区Key”解决该类问题

使用触发器实现虚拟列。

GaussDB部分旧版本对象调用权限为INVOKER

建议配置“PL/SQL对象的AUTHID子句”解决该类问题

GaussDB R2旧版本,未指定AUTHID DEFINER/INVOKER,添加AUTHID DEFINER与Oracle配置相匹配。

GaussDB R2最新版本,使用不添加AUTHID DEFINER的配置。

Oracle中,CLOB数据类型最大可存储4GB数据。GaussDB 支持CLOB数据类型,在GaussDB2.7及之后主备版最大可存储32TB数据,其他版本最大可存储1GB数据。如果变量数据超过限制,进程将失败并引发错误。

建议配置“在函数中使用clob数据类型”解决该类问题

说明:

仅GaussDB 2.7版本可配置此参数。

不转换CLOB数据类型,GaussDB 支持CLOB,但其存储有限。

GAUSSDB 存在不支持的部分any对象权限。

建议配置“any对象授权”解决该类问题

根据目标数据库语法转换脚本。

分区键和唯一索引并存的表要求分区键必须出现在唯一索引中。

说明:

仅当源库为Oracle且目标库为GaussDB-1.4 企业版及之前版本时,可配置该特性。

具有唯一约束的表列分区

将分区列添加到唯一约束(主键和唯一键)中。

GaussDB不支持外部表

建议配置“外部表转换”解决该类问题

建议注释外部表,将外部表转换为普通表。

SQL语句WHERE条件中存在COL=FUNC()用法,业务执行时间较长

建议配置“where条件性能优化场景”解决该类问题

建议开启where条件性能优化

GaussDB 8.0分布式版本不支持IDENTITY列

建议配置 “IDENTITY列”。

建议不转换IDENTITY列

GaussDB没有dual系统表,存在与之等价的sys_dummy系统表

建议配置“dual系统表“解决该类问题。

说明:

仅GaussDB 8.0及之前的版本可配置此参数。

转换为SYS_DUMMY

GaussDB 主备版不支持包内自定义异常

建议配置“将自定义异常加入子程序声明中“解决该类问题

将子程序内部使用到的异常定义加入子程序头部

GaussDB的INTEGER,INT,SMALLINT类型大小与Oracle的大小不一致,Oracle的INTEGER类型等同于NUMBER(38)。

建议配置“整型数据类型”解决该类问题

建议将INT, INTEGER 和SMALLINT转换成NUMBER(38)。若要保持INT, INTEGER 和SMALLINT类型的转换,可选择不转换INT, INTEGER 和SMALLINT选项。

影响:

INT, INTEGER和SMALLINT在Oracle内部使用NUMBER(38)存储。在GaussDB中,INT和INTEGER的数据范围(-2147483648至2147483647),SMALLINT的数据范围(-32768至32767),如果表列数据超出数据范围,数据更改操作(INSERT/UPDATE)将失败并引发错误。

GaussDB不支持nocopy关键字,将会导致包创建失败。

建议配置:“注释nocopy关键字”

建议使用“注释nocopy关键字”注释关键字保证包对象正常迁移。

影响:GaussDB不支持nocopy关键字,此配置项将注释该关键字。

GaussDB不支持Oracle触发器中UPDATING('column')语法。

配置建议:建议配置“UPDATING('column')语法”解决该类问题。

建议值:建议将 UPDATING('column') 转换为 (TG_OP = 'UPDATE') AND (NEW.column <> OLD.column)。

影响:此配置在column更新后值保持不变的场景下会与Oracle产生差异。当column更新前后值未发生变化时,Oracle中UPDATING('column')条件的结果为True,但GaussDb中(NEW.column <> OLD.column)条件的结果为False。

序列中定义CACHE选项后不能保证序列的连续性,可能会导致跳号。

建议配置"序列中的CACHE转换"解决该类问题。

建议值:如果需要保证序列的连续性,建议将 CACHE值转换为1,表示一次只能生成一个值,也就是没有缓存。

影响:如果序列被频繁地使用,这将使得每次获取序列值时都需要访问磁盘,可能会降低性能。

GaussDB的List分区中每个分区最多支持64个键值,超出会引发错误,导致建表失败。

建议配置"List分区的键值数量超出限制"解决该类问题。

建议值:对于超出64个键值数量的分区,自动创建新的分区,将超出的键值放在新分区中。

影响:在分区表上指定分区操作时可能引发错误,但对全表操作时不受影响。

创建索引过程不阻塞DML操作。

建议配置:“CREATE INDEX的CONCURRENTLY子句”解决该类问题

建议值:如果业务非常需要这个功能,建议选择添加CONCURRENTLY关键字选项。

影响:创建这类索引时候,容易造成死锁,同时对Astore的表索引的创建比正常更长。

GaussDB 保留对象名称大小写需要使用双引号引用对象名称。

建议配置 “普通对象名称(非关键字及特殊字符)大小写转换” 解决该类问题。

建议值:对象名称在目标库存储为小写。

影响:GaussDB创建对象时,对象名称不带双引号,默认存储过小写。

GaussDB不支持视图的CHECK OPTION子句。

建议配置 “视图检查选项” 解决该类问题。

说明:

仅GaussDB 8.0及之前版本可配置该参数。

迁移CHECK OPTION。

GaussDB分布式在表不指定分布键并且列类型不符合Hash分布的要求时,无法创建表。

建议配置"不符合Guass默认创建分布键的条件时候,将表改为复制表"解决该问题。

建议值:选择将表转为复制表。

影响:分布方式为REPLICATION时,表的每一行都会存在所有数据节点(DN)中,即每个数据节点都有完整的表数据,可能导致数据存储变大。