在 Oracle 19c 的升级迁移中,必须要关注不同版本的变化,例如 SQL 写法的改变,特殊参数的设置,以避免应用迁移后的异常。这些改变有的来自功能性变化,有的则是BUG。
在 MOS 文档 2559321.1 中描述了这样一个情况:DB INMEMORY JOINGROUP 的创建,在 12c 中工作正常,但是在 18c 、19c 中却是出现了 ORA-38350 号错误。
DB INMEMORY JOINGROUP Creation Fails with ORA-38350 Error in 19C and 18C but working in 12C Version (Doc ID 2559321.1)
在 Oracle 12.2 版本中测试,文档中提示的测试用例工作正常:
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE12.2.0.1.0Production
TNS for Linux: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production
SQL> create table t1 ( c1 varchar2(10 byte) not null ) ;
Table created.
SQL> create table t2 ( c2 varchar2(10 byte) not null ) ;
Table created.
SQL> create table t3 ( c3 varchar2(10 char) not null ) ;
Table created.
SQL> create table t4 ( c4 varchar2(10 char) not null ) ;
Table created.
SQL> create inmemory join group ig_t1_t2 ( t1(c1), t2(c2) );
Join group created.
SQL> create inmemory join group ig_t3_t4 ( t3(c3), t4(c4) );
Join group created.
然而在 Oracle 19c 中,执行以上测试用例,则无法成功执行:
BANNER
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
SQL> create table t1 ( c1 varchar2(10 byte) not null ) ;
Table created.
SQL> create table t2 ( c2 varchar2(10 byte) not null ) ;
Table created.
SQL> create table t3 ( c3 varchar2(10 char) not null ) ;
Table created.
SQL> create table t4 ( c4 varchar2(10 char) not null ) ;
Table created.
SQL> create inmemory join group ig_t1_t2 ( t1(c1), t2(c2) );
Join group created.
SQL> create inmemory join group ig_t3_t4 ( t3(c3), t4(c4) );
create inmemory join group ig_t3_t4 ( t3(c3), t4(c4) )
*
ERROR at line 1:
ORA-38350: join group not supported on given columns
这个 BUG 在 20c 中被修正,使用到 InMemory Join Group 特性的朋友,在升级前可以请求内部修正,在 19c 中解决这个问题。