Oracle12c遷移-某風險報告類系統升級暨遷移至12c-2

xfhuangfu發表於2020-02-20

   上接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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章