本汇总针对Oracle 11g升级到19c过程中常见的十大问题,涵盖升级失败、性能优化、兼容性等,提供详细的解决方案,帮助DBA顺利完成数据库升级。
第一部分 Grid由于profile4downgrade.xml文件权限不对升级失败
问题描述
检查日志
<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
解决方法
导入后,手工进行创建视图
第六部分 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导入错误
Bug mos文档2472847.1
解决方法:
先导入表结构,再导入数据
第十五部分 Expdp/Impdp错误
用sysdba用户导入或者导出,都会碰到需要输密码这一步
解决方法(28707931.8):
方法一
升级至21c
方法二
打28707931补丁,此补丁包含在2020年4月19.7补丁中
方法三
按回车键可跳过输入密码环节继续导入导出
第十六部分 Drop user Cascade hang住
问题描述
drop user cascade 命令卡住,等待DLM cross inst call completion
解决方法
- 触发Bug 31038220 & 31208287,打补丁19.9.0.0.201020 (Oct 2020)
2.删除用户前,清除回收站,删表清除回收站,在删用户
drop table <TABLE_NAME> purge;
… …
drop user;