更新时间:2024-04-22 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保留的关键字,会导致失败。

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

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

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。

分享:

    相关文档

    相关产品