Oracle To GaussDB配置项使用说明
问题描述 |
配置建议 |
建议值 |
---|---|---|
从Oracle采集全特性表结构,验证成功率低,库差异大且无法全覆盖。 |
建议配置“表结构转换模式”解决该类问题
说明:
仅当源库为Oracle且目标库为GaussDB 主备版-2.7 企业版时,可配置该特性。 |
只保留表的表名、列名、列约束、索引、主键信息。 影响:
|
Oracle UNLOG属性的表,当数据库日志级别是FORCE LOGGING时还会记录日志。 但GaussDB指定了UNLOG后完全不会记录日志,造成数据无法恢复。 |
建议配置“NOLOGGING表”配置 |
如果确定不需要日志的话,选择“将NOLOGGING转换为UNLOGGED”。 影响:GaussDB V5不支持NOLOGGING表。此配置将移除NOLOGGING,并将NOLOGGING转换为UNLOGGED,转换后不影响性能。GAUSSDB UNLOGGED表完全不会记录日志。 |
Oracle创建对象,字段值默认大写,而GaussDB创建对象,字段值默认成小写。但引号中的字段值,创建的时候会保持不变。 |
建议配置“含有特殊字符的对象名称大小写转换”解决该类问题 |
如果对象名称中含有特殊字符,将该名称转换为小写字母。 |
从Oracle采集的对象内容中如果有使用了gauss保留的关键字,会导致失败。 |
建议配置“含有保留关键字符的对象名称大小写转换”解决该类问题 |
如果对象名称中含有保留关键字且为大写字母,将该名称转换为小写字母。 如果对象名称中含有保留关键字且混用大小写字母,该名称保持不变。如果对象名称中含有保留关键字,该对象名称保持不变且不保留对象名称的双引号,记录错误信息。 |
GaussDB1.4主备版本和所有的分布式版本不支持Oracle中的PACKAGE语法。 |
建议配置“包”解决该类问题 |
将包名和存储过程名合并。 |
GaussDB1.4主备版本和所有分布式版本不支持Oracle中的FOREIGN KEY约束。 |
建议配置“FOREIGN KEY约束”解决该类问题 |
注释FOREIGN KEY约束。 |
GaussDB不支持Oracle的CHARACTER_SET语法。 |
建议配置“CHARACTER_SET支持”解决该类问题 |
注释不支持语句。 |
GaussDB字符集大小与Oracle字符集大小不一致。 |
建议配置“字符集不匹配”解决该类问题(当使用sql语句转换功能时,需要同时配置“源库字符集”、“目标库字符集”)
说明:
对象迁移项目中,源库字符集将采用评估项目获取的源数据库字符集,目标库字符集将采用目标数据库实际的字符集 。 |
调整CHAR(n)、VARCHAR(n)、VARCHAR2(n)和NCHAR(n)的大小。 |
GaussDB 1.4版本不支持Oracle中的CYCLE IN SEQUENCE语法。 |
建议配置“序列循环”解决该类问题 |
注释该语法,此配置值可用于GaussDB V5R2及之前的版本。GaussDB迁移脚本编译中,不会引发错误。 |
Oracle创建系统视图默认都为大写,而GaussDB默认为小写,如果有些带有引号的强制大写的场景,在使用时会有引用不到的问题。 |
建议配置“系统视图对象大小写”解决该类问题 |
将对象名称设置为小写字母。 |
GaussDB V5R2不支持Oracle的授予表、类型、触发器、同义词、序列、存储过程等对象的创建权限。如果没有向相关对象提供授权,对象将创建失败。 |
建议配置“对象级权限”解决该类问题 |
迁移脚本,并提供schema级授权。 |
GaussDB在create table和create index语句中支持Oracle的表空间子句语法。但是,如果指定的表空间在GaussDB中不存在,则create table和create index语句执行失败。建议使用默认表空间。 |
建议配置“表空间(表空间映射高于此配置)”解决该类问题 |
注释表空间子句。 |
因权限不足,导致对象在目标库无法执行。 |
建议配置“用户连接”解决该类问题 |
将sysadmin设置为执行GaussDB脚本的用户。 |
GaussDB 1.4版本不支持Oracle存储过程中使用的FOR ALL语句。 |
建议配置“FOR ALL语法”解决该类问题 |
迁移脚本,将FOR ALL语法转换为FOR LOOP语法。 |
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模式。 |
GaussDB1.4版本不支持Oracle的INSERT语句中使用的RECORD变量。 |
建议配置“INSERT语句中使用RECORD VARIABLE语法”解决该类问题 |
迁移脚本,INSERT语句中的RECORD VARIABLE将按列拆分。 |
GaussDB 1.4版本不支持Oracle的AUTONOMOUS TRANSACTION语法,也没有等价的语法。 |
建议配置“AUTONOMOUS TRANSACTION语法”解决该类问题 |
注释AUTONOMOUS TRANSACTION语法。此配置值用于GaussDB V5R1C20及之前版本,编译迁移脚本不会出现任何错误。 |
如果表名不带schema,会出现重名表,导致建表失败。
说明:
GaussDB主备版版本不存在此问题。 |
建议配置“全局临时表名转换”解决该类问题 |
转换后的表名是由schema名和表名组成,两者之间采用分隔符隔开。 |
GaussDB 1.4版本不支持Oracle的SAVEPOINT语法。 |
建议配置“SAVEPOINT语法”解决该类问题 |
注释SAVEPOINT语法。此配置值用于GaussDB V5R1C20及之前版本,编译迁移脚本不会出现任何错误。 |
GaussDB 不支持Oracle的系统权限,系统权限授予失败。 |
建议配置“系统权限”解决该类问题 |
注释整个SQL脚本。 |
GaussDB不支持Oracle的LONG数据类型,迁移脚本编译失败。 |
建议配置“long数据类型”解决该类问题 |
将LONG类型转换为TEXT数据类型。 |
GaussDB1.4主备版本和所有分布式不支持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。 |
GaussDB 1.4版本和所有的分布式版本不支持Oracle的Hash分区。 |
建议配置“Hash分区”解决该类问题 |
注释Hash分区。 |
目标数据库是分布式部署,如果没有分布键,会执行失败。 |
建议配置“分布式环境(多数据节点)的唯一约束和索引”解决该类问题 |
注释唯一索引中的唯一关键字。注释掉唯一约束中的约束,但如果分布键不在约束中,则创建关联的索引。 |
创建同义词的用户名称与对象owner名称不一致时,会有使用权限问题。 |
建议配置“同义词”解决该类问题 |
添加ALTER语句更改Owner详细信息。 |
GaussDB不支持Oracle的GNERATED AS IDENTITY语法。 |
建议配置“IDENTITY列”解决该类问题 |
将Oracle的IDENTITY列转换为序列号类型。 |
GaussDB V5R1不支持Oracle的用户定义类型。 |
建议配置“用户定义类型”解决该类问题 |
当前版本不支持用户自定义类型,转换该数据类型。 |
GaussDB1.4版本都不支持Oracle的BULK COLLECT语法。 |
建议配置“BULK COLLECT语法”解决该类问题 |
转换BULK COLLECT语法。此配置用于GaussDB V5 R1C20及之前版本。 |
如果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数据类型”解决该类问题 |
将XMLTYPE数据类型转换为JSON/TEST数据类型。 |
创建索引使用了gauss不支持的函数,创建索引将会报错。 |
建议配置“索引中使用函数”解决该类问题 |
注释采用不支持函数创建索引的语句。 |
GaussDB V5R1不支持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 V5R1不支持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只能部分支持Oralce的ROWID。 |
建议配置“ROWID表达式”解决该类问题 |
ROWID将转换为GaussDB的系统列ctid和tableoid。 |
GaussDB只能支持部分hint场景。 |
建议配置“Hint调优”解决该类问题 |
转换GaussDB支持的hint,不支持的子句给出错误提示信息。 |
GaussDB不支持分区表中使用NOLOGGING。 |
建议配置“分区表中使用NOLOGGING”解决该类问题 |
注释NOLOGGING。 |
GaussDB不支持generated column |
建议配置“虚拟列为分区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数据类型”解决该类问题 |
不转换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不支持视图的CHECK OPTION子句 |
建议配置 “视图检查选项” 解决该类问题。
说明:
仅GaussDB 8.0及之前版本可配置该参数。 |
迁移CHECK OPTION。 |