第一部分 Grid 由于profile4downgrade.xml 文件权限不对升级失败
问题描述
检查日志
|
<19C_GridHoime>/crs/install/profile4downgrade.xml -destfile <19C_GridHoime>/crs/install/profile4downgrade.xml -nodelistfile /tmp/BOp83y1gVE -oraclehome <19C_GridHoime>'
|
解决方法
检查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)...
|
调整成11g优化器,返回正确
|
SQL> alter session set "_optimizer_nlj_hj_adaptive_join"=FALSE; Session altered. SQL> SQL> select count(1)...
COUNT(1)
Session altered. SQL> select count(1)...
COUNT(1)
Session altered. SQL>SQL> select count(1)...
COUNT(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,
|
问题解决
多表关联查询,查询项必须带用户名称,例如
|
select o.table_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
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. No data exists for this section of the report. |
解决方法
这是一个数据库的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
第十四部分 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
解决方法
1. 触发Bug 31038220 & 31208287,打补丁19.9.0.0.201020 (Oct 2020)
2.删除用户前,清除回收站,删表清除回收站,在删用户
drop table
... ...
drop user