暂无图片
暂无图片
9
暂无图片
暂无图片
暂无图片

Oracle 11g升级到19c问题汇总

原创 Digital Observer 2024-10-11
1052

本汇总针对Oracle 11g升级到19c过程中常见的十大问题,涵盖升级失败、性能优化、兼容性等,提供详细的解决方案,帮助DBA顺利完成数据库升级。

第一部分 Grid由于profile4downgrade.xml文件权限不对升级失败

问题描述
检查日志/crsdata//crsconfig/rootcrs_.log,报错如下:

<19C_GridHoime>/crs/install/profile4downgrade.xml -destfile <19C_GridHoime>/crs/install/profile4downgrade.xml -nodelistfile /tmp/BOp83y1gVE -oraclehome <19C_GridHoime>'
2020-12-25 06:20:56: Removing file /tmp/BOp83y1gVE
2020-12-25 06:20:56: Successfully removed file: /tmp/BOp83y1gVE
2020-12-25 06:20:56: Executing cmd: <19C_GridHoime>/bin/clsecho -p has -f clsrsc -m 186 '<19C_GridHoime>/crs/install/profile4downgrade.xml' '<19C_GridHoime>/crs/install/profile4downgrade.xml' '<NODE1>,<NODE2>' '0'
2020-12-25 06:20:56: Executing cmd: <19C_GridHoime>/bin/clsecho -p has -f clsrsc -m 186 '<19C_GridHoime>/crs/install/profile4downgrade.xml' '<19C_GridHoime>/crs/install/profile4downgrade.xml' '<NODE1>,<NODE2>' '0'
2020-12-25 06:20:57: Command output:
> CLSRSC-186: Failed to copy file from local path '<19C_GridHoime>/crs/install/profile4downgrade.xml' to remote path '<19C_GridHoime>/crs/install/profile4downgrade.xml' for given list of nodes '<NODE1>,<NODE2>' (error code 0)
<<<copy error>>
>End Command output
2020-12-25 06:20:57: CLSRSC-186: Failed to copy file from local path '<19C_GridHoime>/crs/install/profile4downgrade.xml' to remote path '<19C_GridHoime>/crs/install/profile4downgrade.xml' for given list of nodes '<NODE1>,<NODE2>' (error code 0)
2020-12-25 06:20:57: ###### Begin DIE Stack Trace ######

解决方法
检查profile4downgrade.xml的权限:

ls -l <19C_GridHoime>/crs/install/profile4downgrade.xml
-rw------- 1 root root 1888 Dec 25 06:20 <19C_GridHoime>/crs/install/profile4downgrade.xml
ls -l <11g_GridHoime>/gpnp/profiles/peer/profile.xml
   -rwxr-xr-x 1 oracle oinstall 1888 Aug 3 02:35 <11g_GridHoime>/gpnp/profiles/peer/profile.xml

修改权限

#chmod oracle:oinstall <19C_GridHoime>/crs/install/profile4downgrade.xml
#chmod 755 <19C_GridHoime>/crs/install/profile4downgrade.xml

重新运行 rootupgrade.sh

第二部分 升级到升级APEX过程时一直卡住

根据预检信息,提前更新APEX到version 18.2.0.00.12,升级方式如下:
下载的apex放到/u01/apex
cd /u01/apex
$ sqlplus / as sysdba

SQL> select version_no from apex_release;

VERSION_NO
--------------------------------------------------------------------------------
3.2.1.00.12

–卸载原apex
SQL> @?/apex/apxremov.sql
–安装新apex
SQL> @apexins.sql SYSAUX SYSAUX TEMP /i/
SQL> @apex_epg_config.sql /u01
SQL> @apxchpwd.sql
输入用户名、密码,控制台使用需要
alter user anonymous account unlock;
SQL> @apex_rest_config.sql
SQL> EXEC DBMS_XDB.sethttpport(8080);
访问:http://192.168.242.9:8080/apex

第三部分 低版本客户端连接异常

问题描述
客户端连接Oracle 19c时,报异常
ORA-28040: No matching authentication protocol

解决方法
编辑sqlnet.ora,修改成客户端最低版本
   SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
   SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
重启监听

第四部分 11G升级到19C,查询返回结果错误

问题描述
例如下面查询正确结果是1,19c默认状态下返回0

SQL> select count(1)...
(select 1
from ))
and d.doc_type = 13;

COUNT(1)
----------
0

调整成11g优化器,返回正确

SQL> alter session set "_optimizer_nlj_hj_adaptive_join"=FALSE;
Session altered.
SQL> SQL> select count(1)...
(select 1
from ))
and d.doc_type = 13;
COUNT(1)
----------
1
========================================
SQL> alter session set optimizer_features_enable='11.2.0.4';
Session altered.
SQL> select count(1)...
(select 1
from ))
and d.doc_type = 13;
COUNT(1)
----------
1
=======================================
3.
SQL> alter session set "_optimizer_null_accepting_semijoin"=FALSE;
Session altered.
SQL>SQL> select count(1)...
(select 1
from ))
and d.doc_type = 13;
COUNT(1)
----------
1

解决方法:
这是一个BUG,Bug号:31505088
应用补丁,补丁号:Patch 31505088

第五部分 导入视图hang住

问题描述
如下导入视图会hang住
impdp / … exclude=view:“IN (’<view_name>’, ‘<view_name>’)”
解决方法
导入后,手工进行创建视图

第六部分 vmsys用户下vm concat函数失效

问题描述
vm_concat函数在19.8中怎么不存在了,在19.7中还存在,vm_concat函数属于VMSYS用户,其可以实现将多列记录聚合为一列记录,实现数据的压缩。
10g以及11g: 在10g以及11g中该函数可以正常使用
但是在10g和11g中需要注意的是,vm_concat返回的数据类型是不同的:
在10.2.0.4/11.1.0.7/11.2.0.1 vm_concat返回的是数据类型为varchar2类型:

SQL> desc wmsys.wm_concat;
FUNCTION wmsys.wm_concat RETURNS VARCHAR2 
Argument Name      Type           In/Out  Default?
----------------------- ------------------------ -------- ---------
P1           VARCHAR2         IN
在10.2.0.5/11.2.0.2中,vm_concat返回的数据类型为clob类型:
SQL> desc wmsys.wm_concat;
FUNCTION wmsys.wm_concat RETURNS CLOB
Argument Name      Type           In/Out  Default?
----------------------- ------------------------ -------- ---------
P1           VARCHAR2         IN

12c:
经过测试,在12.1/12.2中,vm_concat函数Oracle已经不再支持使用,Oracle推荐使用分析函数LISTAGG代替vm_concat函数的使用。
19c:
经过测试,在19.3/19.7/19.8中,vm_concat函数Oracle依旧不再支持使用。
问题解决
使用wm_concat的继任者LISTAGG
分析函数LISTAGG介绍:
作为单一集合,LISTAGG它对所有行进行操作并返回单个输出行。
作为分组集合,此函数将对GROUP BY子句定义的每个组进行操作并返回输出行。
分析函数LISTAGG使用方法:
listagg(measure_expr,delimiter) within group ( order by order_by_clause);
解释:
measure_expr 可以是基于任何列的表达式
delimiter 分隔符,默认为NULL
order_by_clause 决定了列值的拼接顺序
手动编写函数实现vm_concat
(1)自定义函数类型

CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT
(
STR VARCHAR2(32767), 
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(cs_ctx IN OUT WM_CONCAT_IMPL) RETURN NUMBER,    
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,PT IN VARCHAR2) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,RETURNVALUE OUT VARCHAR2,FLAGS IN NUMBER)RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,cs_ctx2 IN WM_CONCAT_IMPL) RETURN NUMBER
);

(2)创建函数主体

CREATE OR REPLACE TYPE BODY WM_CONCAT_IMPL
IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(cs_ctx IN OUT WM_CONCAT_IMPL)
RETURN NUMBER
IS
BEGIN
cs_ctx := WM_CONCAT_IMPL(NULL) ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,PT IN VARCHAR2)
RETURN NUMBER
IS
BEGIN
IF(STR IS NOT NULL) THEN
STR := STR || ',' || PT;
ELSE
STR := PT;
END IF;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,RETURNVALUE OUT VARCHAR2,FLAGS IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURNVALUE := STR ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,cs_ctx2 IN WM_CONCAT_IMPL)
RETURN NUMBER
IS
BEGIN
IF(cs_ctx2.STR IS NOT NULL) THEN
SELF.STR := SELF.STR || ',' || cs_ctx2.STR ;
END IF;
RETURN ODCICONST.SUCCESS;
END;
END;

(3)创建函数

CREATE OR REPLACE FUNCTION wm_concat(PT VARCHAR2)
RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL; 

(4)创建同义词

create public synonym WM_CONCAT_IMPL for sys.WM_CONCAT_IMPL;
create public synonym wm_concat for sys.wm_concat;
grant execute on WM_CONCAT_IMPL to public;
grant execute on wm_concat to public;

vm_concat函数自建完毕

第七部分 pga_aggregate_limit设置问题

问题描述
pga达到了 PGA_AGGREGATE_LIMIT 值,报告如下错误。

ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT
Cause: Private memory across the instance exceeded the limit specified in the PGA_AGGREGATE_LIMIT initialization parameter. The largest sessions using Program Global Area (PGA) memory were interrupted to get under the limit.
Action: Increase the PGA_AGGREGATE_LIMIT initialization parameter or reduce memory usage.

pga_aggregate_limit设置不当会引发数据库问题,如果 PGA 内存使用量仍超过 PGA_AGGREGATE_LIMIT,则终止使用了最多不可优化 PGA 内存的会话和进程
问题解决
ALTER SYSTEM set pga_aggregate_limit=0 scope=spfile sid=’*’;
如果指定了值 0,则表示实例所使用的 PGA 内存总量没有限制。

第八部分 多表关联查询报ORA-918

问题如下:

SELECT PROJECT_ID,
       PROJ_VERSION_NO,
       NAME ,
       DESCRIPTION ,
       LAST_CHANGED_DATE
FROM   leeh.PW2_PROJECT
JOIN
  (SELECT PROJECT_ID AS MAX_ID,
          MAX(PROJ_VERSION_NO) AS MAX_VERSION
   FROM leeh.PW2_PROJECT
   GROUP BY PROJECT_ID
  ) T
ON  PROJECT_ID = MAX_ID
AND PROJ_VERSION_NO = MAX_VERSION
WHERE PROJ_VERSION_NO > 0;

ORA-00918: column ambiguously defined

问题解决
多表关联查询,查询项必须带用户名称,例如

select o.table_name,
       o.column_name
from   dba_tab_cols o
where  owner='HR'
and    o.column_name in
        (select i.column_name
         from dba_tab_cols i
         where owner = 'HR'
         and i.table_name <> o.table_name
        )
order by o.column_name;

第九部分 关闭"_lm_enable_aff_benefit_stats"隐含参数

问题描述
12.0.1.2以后版本,此参数可能会导致节点重启,
LMHB (ospid: XXXX): terminating the instance due to error 29770,日志如下

Thu Aug 02 13:45:11 2018
opiodr aborting process unknown ospid (359201) as a result of ORA-609
Errors in file /u01/app/oracle/diag/rdbms/ORCL/ORCL1/trace/ORCL1_lmhb_4038.trc  (incident=5794665):
ORA-29770: global enqueue process LMON (OSID 3997) is hung for more than 70 seconds
Incident details in: /u01/app/oracle/diag/rdbms/ORCL/ORCL1/incident/incdir_5794665/ORCL1_lmhb_4038_i5794665.trc
LMHB (ospid: 4038): terminating the instance due to error 29770
 ORA-29770: global enqueue process LMON (OSID 3997) is hung for more than 70 seconds

问题解决
关闭"_lm_enable_aff_benefit_stats"隐含参数
alter system set “_lm_enable_aff_benefit_stats”=FALSE scope=both;

第十部分 关闭_clusterwide_global_transactions参数

_clusterwide_global_transactions设置为false通常是因为OGG 经典抽取模式不支持分布式事务才设置的,Oracle 19C数据库需要采用OGG 集成抽取,OGG集成抽取是支持分布式事务的,所以不用设置_clusterwide_global_transactions=true,同是设置_optimizer_mjc_enabled=false

第十一部分 表空间i/o信息不统计

问题描述
Awr报告里表空间、数据文件io信息没数据

Tablespace IO Stats
No data exists for this section of the report. 
Back to IO Stats 
Back to Top
File IO Stats
No data exists for this section of the report. 
Back to IO Stats 
Back to Top

解决方法
这是一个数据库的bug,通过执行下面语句可以解决

exec dbms_workload_repository.modify_table_settings(table_name  => 'WRH$_FILESTATXS', flush_level => 'TYPICAL');
exec dbms_workload_repository.modify_table_settings(table_name  => 'WRH$_DATAFILE', flush_level => 'TYPICAL');
exec dbms_workload_repository.modify_table_settings(table_name  => 'Tempfile Group', flush_level => 'TYPICAL');
exec dbms_workload_repository.modify_table_settings(table_name  => 'WRH$_TEMPSTATXS', flush_level => 'TYPICAL');

第十二部分 merge语句失败报错ora-01400

问题描述
迁移到19c,merge语句失败报错ora-01400
解决
alter session set “_sqlexec_use_rwo_aware_expr_analysis” = FALSE;

第十三部分 部分用户LOCAL_TEMP_TABLE表空间被设置成了SYSTEM

SQL> select USERNAME, TEMPORARY_TABLESPACE, LOCAL_TEMP_TABLESPACE
from dba_users where local_temp_tablespace='SYSTEM';  

USERNAME                       TEMPORARY_TABLESPACE           LOCAL_TEMP_TABLE
SPACE
------------------------------ ------------------------------ -----------------
SYSTEM                         TEMP                           SYSTEM
TEST1                          TEMP                           SYSTEM
TEST2                          TEMP                           SYSTEM

解决方法:
alter user <USER_NAME> LOCAL TEMPORARY TABLESPACE TEMP;

第十四部分 Impdp导入错误

图2片 1.png
Bug mos文档2472847.1
解决方法:
先导入表结构,再导入数据

第十五部分 Expdp/Impdp错误

用sysdba用户导入或者导出,都会碰到需要输密码这一步
图22片 1.png
解决方法(28707931.8):

方法一
升级至21c

方法二
打28707931补丁,此补丁包含在2020年4月19.7补丁中

方法三
按回车键可跳过输入密码环节继续导入导出

第十六部分 Drop user Cascade hang住

问题描述
drop user cascade 命令卡住,等待DLM cross inst call completion
解决方法

  1. 触发Bug 31038220 & 31208287,打补丁19.9.0.0.201020 (Oct 2020)
    2.删除用户前,清除回收站,删表清除回收站,在删用户
    drop table <TABLE_NAME> purge;
    … …
    drop user ;
    hhh6.jpg
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论