ITPub博客

首页 > 数据库 > Oracle > Oracle12c迁移-某风险报告类系统升级暨迁移至12c-2

Oracle12c迁移-某风险报告类系统升级暨迁移至12c-2

原创 Oracle 作者:xfhuangfu 时间:2020-02-20 16:18:55 0 删除 编辑

   上接Oracle12c迁移-某风险报告类系统升级暨迁移至12c-1

http://blog.itpub.net/28373936/viewspace-2675853/

导入导出过程中遇到的问题及解决办法

一、expdp/impdp时间过长

  原因:对象过多,特别是分区表多

select object_type,count(*) from dba_objects
where group by object_type;
------------------------------------------------------------------
table partition table subpartition  index subpartition index partition
------------------------------------------------------------------


二、impdp过程中临时表空间无限增长导致导入失败

数据库日志报错信息
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP 
临时表空间不足


经过与厂商确认这12.1.0.1的一个bug

该bug在12.1.0.1 版本上没有patch,而且也无法再申请12.1.0.1版本上的patch

Impdp导入失败

原因分析:

l impdp 占用临时表空间的话,一般是跟index有关,创建索引需要排序,当内存不够时会用到临时表空间。

l impdp时有wait for unread message on broadecast channel 等待事件

三、12c新特性导致sysaux表空间持续增长

问题描述: 应用程序接入12c数据库后sysaux表空间持续增长。

相关知识: 12c 统一审计用于户监视在审计策略中定义的用户所执行的数据库操作。12.1.0.1中,默认存在名为 ORA_SECURECONFIG 的统计策略。

由于之前说明的12.1.0.1版本中ORA_SECURECONFIG的定义里面包含LOGON和LOGOFF的信息,所以有可能会引起SYSAUX表空间持续增长。

解决办法:

1、清理统一审计信息;
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED) 
 
2、关闭默认统一审计策略。
NOAUDIT POLICY ORA_SECURECONFIG;


四、 12c上使用wm_concat函数

问题描述: 11gR2和12cR1上已经摒弃了wm_concat函数,10g开发的程序中使用了该函数。升级到12c后存储过程编译报错如下:

  java.sql.SQLSyntaxErrorException: ORA-00904: "WMSYS"."WM_CONCAT": invalid identifier

在每个版本 wm_concat函数都有区别

In 10.2.0.4 / 11.1.0.7 / 11.2.0.1 it returns VARCHAR2
SQL> desc wmsys.wm_concat; 
 FUNCTION wmsys.wm_concat RETURNS VARCHAR2 <<<<<<<<<<<<<<<Argument Name           Type                     In/Out   Default? 
 ----------------------- ------------------------ -------- --------- P1                      VARCHAR2                 IN
In 10.2.0.5 / 11.2.0.2 it returns CLOB
SQL> desc wmsys.wm_concat; 
 FUNCTION wmsys.wm_concat RETURNS CLOB <<<<<<<<<<<<<<<Argument Name           Type                     In/Out   Default? 
 ----------------------- ------------------------ -------- --------- 
 P1                      VARCHAR2                 IN


解决办法:

1、在12c下参照10.2.0.4的定义重建wm_concat函数

2、在12.1中使用LISTAGG函数。

在12c下参照10.2.0.4的定义重建wm_concat函数

     

CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT  
-- AUTHID CURRENT_USER AS OBJECT  ….
CREATE OR REPLACE TYPE BODY WM_CONCAT_IMPL  
IS  …
CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2)  
RETURN VAR

在12c使用LISTAGG函数

SELECT deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
FROM   emp
GROUP BY deptno;
    DEPTNO EMPLOYEES
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 ADAMS,FORD,JONES,SCOTT,SMITH
        30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
CHAR2 AGGREGATE USING WM_CONCAT_IMPL ;  
/


小结

认真做好迁移时各阶段的工作

合理使用12c新特性


未完待续

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28373936/viewspace-2676422/,如需转载,请注明出处,否则将追究法律责任。

全部评论
Oracle DBA Oracle 12c OCM,11g OCM MySQL 5.6/5.7 OCP 13年以上IT从业经验,有丰富的数据库和开发领域经验,多年Oracle相关工作经验和java开发经验。

注册时间:2013-09-05

  • 博文量
    78
  • 访问量
    131535