Oracle 12c升級指南

lhrbest發表於2019-03-27


1. 概述

升級路線圖


從18c開始,如果想要直接升級到Oracle 18c,對於源庫版本要求越來越高了。Oracle已經徹底放棄了Oracle 11.2.0.3之前版本直接升級到18c。

具體升級路線,請檢視下錶

當前版本號

說明

12.2.0.1,12.1.0.1, 12.1.0.2

11.2.0.3, 11.2.0.4

支援直接升級到18c

11.2.0.1, 11.2.0.2

11.1.0.6, 11.1.0.7

10.2.0.2,10.2.0.3, 10.2.0.4 和10.2.0.5

10.1.0.5

9.2.0.8及更早版本

不支援直接升級到18c.

解決方法:

1)    只能先升級到支援直接升級到18c的中間版本,然後再次升級到18c

2)    使用資料泵直接將資料遷移到新版本資料庫中


源庫


過度版本


目標資料庫版本

11.2.0.1/11.2.0.2

-->

11.2.0.3/11.2.0.4

-->

18.x

11.1.0.6/11.1.0.7

-->

11.2.0.3/11.2.0.4

-->

18.x

10.2.0.2, 10.2.0.3, 10.2.0.4, 10.2.0.5

-->

11.2.0.3/11.2.0.4/12.1.0.1/12.1.0.2

-->

18.x

10.1.0.5

-->

11.2.0.3/11.2.0.4/12.1.0.1/12.1.0.2

-->

18.x

9.2.0.8 or earlier

-->

11.2.0.3/11.2.0.4

-->

18.x




Oracle版本釋出與支援時間

參考文件
Oracle 12cR1 Upgrade Companion (文件 ID 1462240.1)
Complete Checklist for Manual Upgrades to Oracle Database 12c Release 1 (12.1) (文件 ID 1503653.1)
Complete Checklist for Upgrading to Oracle Database 12c Release 1 using DBUA (文件 ID 1516557.1)
Release Schedule of Current Database Releases (文件 ID 742060.1)
How to Upgrade to Oracle Database 12c Release1 (12.1.0) and Known Issues (文件 ID 2085705.1)
Master Note For Oracle Database 12c Release 1 (12.1) Database/Client Installation/Upgrade/Migration Standalone Environment (Non-RAC) (文件 ID 1520299.1)
Database Server Upgrade/Downgrade Compatibility Matrix (文件 ID 551141.1)


2. 10gR2、11gR1或11gR2升級12cR1

2.1. 作業系統要求

Oracle Database (RDBMS) on Unix AIX,HP-UX,Linux,Solaris and MS Windows Operating Systems Installation and Configuration Requirements Quick Reference (12.1) (文件 ID 1587357.1)
Document 1517948.1 Requirements for Installing Oracle Database 12.1 on Solaris 10 SPARC
Document 1525614.1 Requirements for Installing Oracle Database 12.1 on Solaris 11 SPARC
Document 1529433.1 Requirements for Installing Oracle Database 12.1 on RHEL5 or OL5 64-bit (x86-64)
Document 1529864.1 Requirements for Installing Oracle Database 12.1 on RHEL6 or OL6 64-bit (x86-64)
Document 1961997.1 Requirements for Installing Oracle Database 12.1 on RHEL7 or OL7 64-bit (x86-64)
Document 1519770.1 Requirements for Installing Oracle Database 12.1 64-bit (AMD64/EM64T) on SLES 11
Document 1961277.1 The Oracle Database 12c Install Options and the Installed Components

2.2. 12.1.0.2重要的補丁包

為了避免升級過程中出現問題,安裝12.1.0.2版本後打上如下補丁包,避免相關問題
20369415、21550777

2.3. 源庫要求和建議

1)版本要求
根據升級要求,在原資料庫上升級,對原資料庫的版本要求如下:

  • 10gR2不能低於10.2.0.5
  • 11gR1不能低於11.1.0.7
  • 11gR2不能低於11.2.0.2

PSU補丁:Quick Reference to Patch Numbers for Database/GI PSU, SPU(CPU), Bundle Patches and Patchsets (文件 ID 1454618.1)

2)升級前建議做個備份
3)確保升級前Oracle系統物件和元件全部是VALID狀態。
針對元件

column comp_name format a40
set linesize 140 pagesize 999
select comp_name, version, status from dba_registry;


針對物件

SQL> create table invalid_objects_20170206 as select * from dba_objects where status = 'INVALID';


如果有invalid的物件,執行utlrp.sql重新編譯物件。確保sys和system下沒有重複的物件:


4)確保在SYS和SYSTEM使用者中沒有重複物件,以下物件是可允許的重複物件:

column object_name format a30
column object_type format a30
select object_name, object_type from dba_objects where object_name||object_type
in (select object_name||object_type from dba_objects where OWNER = 'SYS') and OWNER= 'SYSTEM';
OBJECT_NAME                    OBJECT_TYPE
------------------------------ ------------------------------
AQ$_SCHEDULES                  TABLE
AQ$_SCHEDULES_PRIMARY          INDEX
DBMS_REPCAT_AUTH               PACKAGE
DBMS_REPCAT_AUTH               PACKAGE BODY

如果有其它記錄返回,則必須根據下面這篇文件把重複記錄刪除:
How to Clean Up Duplicate Objects Owned by SYS and SYSTEM Schema [ID 1030426.6]
5)業務定義的觸發器在升級前禁用,在升級完成後再啟用
6)11g裡如果建立了ACL,並且ACL有帶時區的時間戳的資料型別,升級後可能會報ORA-01830
具體涉及的Bug為:Bug 20369415 – UPGRADE TO 12C FAILS – XDB ERROR ORA-1830 ORA-6512: AT “SYS.XS_OBJECT_MIGRATION”,在升級前需要對Oracle 12.1打補丁20369415。
參考:Upgrade to 12.1 fails with ORA-01830 date format picture ends before converting entire input string ORA-06512: at “SYS.XS_OBJECT_MIGRATION” (文件 ID 1958876.1)
How to find ACL creation information (文件 ID 1475575.1)
7)為了避免升級後datapump使用時報ORA-7445錯誤,安裝Oracle 12c版本後建議打補丁:17325413
參考:ORA-7445 [qcsIsColInFro] Querying After Upgrade to 12c (文件 ID 2017572.1)
Bug 17325413 – Drop column with DEFAULT value and NOT NULL definition ends up with Dropped Column Data still on Disk leading to Corruption (文件 ID 17325413.8)
該問題已在12.1.0.2版本中修復。
8)在手工升級前,需要檢查並行統計資訊收集設定,預設為FALSE,如果已經修改為TRUE了,需要置為FALSE

SELECT dbms_stats.get_prefs('CONCURRENT') from dual;
DBMS_STATS.GET_PREFS('CONCURRENT')
------------------------------------------
FALSE

如果不是為FALSE,在升級前修改如下:

BEGIN
DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT','FALSE');
END;
/


參考:Note 2037154.1 DBMS_STATS.GATHER_DICTIONARY_STATS Fails with “ORA-06502: PL/SQL: numeric or value error: character string buffer too small”

2.4. 檢查原資料庫完整性

2.4.1. dbupgdiag檢查

在升級之前,在原始環境下,執行dbupgdiag.sql指令碼,檢查原庫的完整性。dbupgdiag.sql指令碼下載地址:Note 556610.1 Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)

cd <location of the script>
$ sqlplus / as sysdba
sql> alter session set nls_language='American';
sql> @dbupgdiag.sql
sql> exit


如果dbupgdiag.sql報告有INVALID物件,使用utlrp.sql指令碼編譯,utlrp.sql可以多次執行,直接INVALID物件數目不再變化。

$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus "/ as sysdba"
SQL> @utlrp.sql

處理完,再次執行dbupgdiag.sql,確認沒有問題

2.4.2. 資料字典檢查

建議在升級前使用hcheck.sql指令碼,做一下health check。參考:Note 136697.1 hcheck.sql” script to check for known problems in Oracle8i, Oracle9i, Oracle10g and Oracle 11g

SQL> @hout.sql     
Package created.
No errors.
Package body created.
SQL> @hcheck2.sql
Package created.
No errors.
Package body created.
No errors.
HCheck Version 8i-11/2.00
Problem:  SEG$ bad LISTS/GROUPS (==1) - See Tar:2470806.1
May be Ok for LOBSEGMENT/SECUREFILE in release 11gR1+
Bad SEG$ lists/groups : TS#=1 RFILE#=2 BLK#=26585 TYPE#=8 Lists=2 Groups=1
Bad SEG$ lists/groups : TS#=1 RFILE#=2 BLK#=26769 TYPE#=8 Lists=2 Groups=1
Bad SEG$ lists/groups : TS#=1 RFILE#=2 BLK#=26841 TYPE#=8 Lists=2 Groups=1
Bad SEG$ lists/groups : TS#=1 RFILE#=2 BLK#=28177 TYPE#=8 Lists=2 Groups=1
Bad SEG$ lists/groups : TS#=1 RFILE#=2 BLK#=28217 TYPE#=8 Lists=2 Groups=1
Bad SEG$ lists/groups : TS#=1 RFILE#=2 BLK#=30985 TYPE#=8 Lists=2 Groups=1
Found 6 potential problems and 0 warnings
Contact Oracle Support with the output
to check if the above needs attention or not
PL/SQL procedure successfully completed.

2.5. 升級前的步驟

2.5.1. 執行Database Pre-Upgrade Utility

下載preupgrade_12.1.0.2.0_15_lf.zip,參考How to Download and Run Oracle’s Database Pre-Upgrade Utility [ID 884522.1],解壓後得到:preupgrd.sql、utluppkg.sql,把這兩個檔案複製到原庫的$ORACLE_HOME/rdbms/admin目錄。

$ sqlplus "/ as sysdba"
SQL> @$ORACLE_HOME/rdbms/admin/preupgrd.sql


在$ORACLE_BASE/cfgtoollogs/$ORACLE_SID/preupgrade/目錄下,生成preupgrade.log, preupgrade_fixups.sql和 postupgrade_fixups.sql 這幾個檔案。內容如下:

SQL> @$ORACLE_HOME/rdbms/admin/preupgrd.sql
Loading Pre-Upgrade Package...
 
***************************************************************************
Executing Pre-Upgrade Checks in TEST...
***************************************************************************
      ************************************************************
                   ====>> ERRORS FOUND for TEST <<====
 The following are *** ERROR LEVEL CONDITIONS *** that must be addressed
                    prior to attempting your upgrade.
            Failure to do so will result in a failed upgrade.
           You MUST resolve the above errors prior to upgrade
      ************************************************************
      ************************************************************
               ====>> PRE-UPGRADE RESULTS for TEST <<====
ACTIONS REQUIRED:
1. Review results of the pre-upgrade checks:
 /data/oracle/cfgtoollogs/test/preupgrade/preupgrade.log
2. Execute in the SOURCE environment BEFORE upgrade:
 /data/oracle/cfgtoollogs/test/preupgrade/preupgrade_fixups.sql
3. Execute in the NEW environment AFTER upgrade:
 /data/oracle/cfgtoollogs/test/preupgrade/postupgrade_fixups.sql
      ************************************************************
***************************************************************************
Pre-Upgrade Checks in TEST Completed.
***************************************************************************
***************************************************************************
***************************************************************************

建議關注:/data/oracle/cfgtoollogs/test/preupgrade/preupgrade.log 在11g原始環境中執行:/data/oracle/cfgtoollogs/test/preupgrade/preupgrade_fixups.sql指令碼,升級後在12c環境下執行postupgrade_fixups.sql指令碼。 原始環境preupgrade_fixups.sql指令碼的執行結果如下:

 SQL> @/data/oracle/cfgtoollogs/test/preupgrade/preupgrade_fixups.sql
Pre-Upgrade Fixup Script Generated on 2017-02-07 09:19:47  Version: 12.1.0.2 Build: 015
Beginning Pre-Upgrade Fixups...
Executing in container TEST
**********************************************************************
Check Tag:     DEFAULT_PROCESS_COUNT
Check Summary: Verify min process count is not too low
Fix Summary:   Review and increase if needed, your PROCESSES value.
**********************************************************************
Fixup Returned Information:
WARNING: --> Process Count may be too low
     Database has a maximum process count of 150 which is lower than the
     default value of 300 for this release.
     You should update your processes value prior to the upgrade
     to a value of at least 300.
     For example:
        ALTER SYSTEM SET PROCESSES=300 SCOPE=SPFILE
     or update your init.ora file.
**********************************************************************
**********************************************************************
Check Tag:     EM_PRESENT
Check Summary: Check if Enterprise Manager is present
Fix Summary:   Execute emremove.sql prior to upgrade.
**********************************************************************
Fixup Returned Information:
WARNING: --> Enterprise Manager Database Control repository found in the database
     In Oracle Database 12c, Database Control is removed during
     the upgrade. To save time during the Upgrade, this action
     can be done prior to upgrading using the following steps after
     copying rdbms/admin/emremove.sql from the new Oracle home
   - Stop EM Database Control:
    $> emctl stop dbconsole
   - Connect to the Database using the SYS account AS SYSDBA:
   SET ECHO ON;
   SET SERVEROUTPUT ON;
   @emremove.sql
     Without the set echo and serveroutput commands you will not
     be able to follow the progress of the script.
**********************************************************************
**********************************************************************
Check Tag:     AMD_EXISTS
Check Summary: Check to see if AMD is present in the database
Fix Summary:   Manually execute ORACLE_HOME/oraolap/admin/catnoamd.sql script to remove OLAP.
**********************************************************************
Fixup Returned Information:
INFORMATION: --> OLAP Catalog(AMD) exists in database
     Starting with Oracle Database 12c, OLAP Catalog component is desupported.
     If you are not using the OLAP Catalog component and want
     to remove it, then execute the
     ORACLE_HOME/olap/admin/catnoamd.sql script before or
     after the upgrade.
**********************************************************************
**********************************************************************
Check Tag:     APEX_UPGRADE_MSG
Check Summary: Check that APEX will need to be upgraded.
Fix Summary:   Oracle Application Express can be manually upgraded prior to database upgrade.
**********************************************************************
Fixup Returned Information:
INFORMATION: --> Oracle Application Express (APEX) can be
     manually upgraded prior to database upgrade
     APEX is currently at version 3.2.1.00.12 and will need to be
     upgraded to APEX version 4.2.5 in the new release.
     Note 1: To reduce database upgrade time, APEX can be manually
             upgraded outside of and prior to database upgrade.
     Note 2: See MOS Note 1088970.1 for information on APEX
             installation upgrades.
**********************************************************************
**********************************************************************
                      [Pre-Upgrade Recommendations]
**********************************************************************
                        *****************************************
                        ********* Dictionary Statistics *********
                        *****************************************
Please gather dictionary statistics 24 hours prior to
upgrading the database.
To gather dictionary statistics execute the following command
while connected as SYSDBA:
    EXECUTE dbms_stats.gather_dictionary_stats;
^^^ MANUAL ACTION SUGGESTED ^^^
           **************************************************
                ************* Fixup Summary ************
 4 fixup routines generated INFORMATIONAL messages that should be reviewed.
**************** Pre-Upgrade Fixup Script Complete *********************
PL/SQL procedure successfully completed.

提出的建議如下:

  • 11g預設150的PROCESSES太小,建議修改為300
  • 發現了Enterprise Manager,在升級過程中會刪除EM庫,為了減少升級時間,可以先刪除。 (emremove.sql指令碼從12c環境複製過來)
  • 發現了OLAP Catalog元件,在12c中OLAP Catalog元件不再支援,可以在升級前或升級後使用catnoamd.sql指令碼刪除,這就是不刪除了,升級後再說。
  • 發現了APEX,APEX版本升級從3.2.1.00.12到4.2.5會佔用比較多的時間,Oracle建議可以手工升級,參考:1088970.1,這裡也不管了,一起升級
  • 建議執行EXECUTE dbms_stats.gather_dictionary_stats;收集資料字典統計資訊

2.5.2. CONNECT角色中許可權的回收

9i,10gR1非直接升到12c,會先升到中間版本。從10.2開始,CONNECT角色只包含CREATE SESSION許可權,其它許可權被回收了。9i中CONNECT角色中包含的許可權:

SQL> SELECT GRANTEE, PRIVILEGE FROM DBA_SYS_PRIVS WHERE GRANTEE='CONNECT';
GRANTEE                        PRIVILEGE
------------------------------ ----------------------------------------
CONNECT                        CREATE VIEW
CONNECT                        CREATE TABLE
CONNECT                        ALTER SESSION
CONNECT                        CREATE CLUSTER
CONNECT                        CREATE SESSION
CONNECT                        CREATE SYNONYM
CONNECT                        CREATE SEQUENCE
CONNECT                        CREATE DATABASE LINK
8 rows selected.

檢查有CONNECT角色的使用者:

SELECT grantee FROM dba_role_privs
WHERE granted_role = 'CONNECT' and
grantee NOT IN (
'SYS', 'OUTLN', 'SYSTEM', 'CTXSYS', 'DBSNMP',
'LOGSTDBY_ADMINISTRATOR', 'ORDSYS',
'ORDPLUGINS', 'OEM_MONITOR', 'WKSYS', 'WKPROXY',
'WK_TEST', 'WKUSER', 'MDSYS', 'LBACSYS', 'DMSYS',
'WMSYS', 'EXFSYS', 'SYSMAN', 'MDDATA',
'SI_INFORMTN_SCHEMA', 'XDB', 'ODM');

如果需要恢復,請參考Predefined Roles Evolution From 8i to 10gR2: CONNECT Role Change in 10gR2 (Doc ID 317258.1)

2.5.3. Access Control Lists 和Network Utility Packages包的說明

從Oracle 12c開始,訪問控制的UTL包(UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, and UTL_INADDR)使用Real Application Security實現,不再需要Oracle XML DB。
參考:http://docs.oracle.com/database/121/UPGRD/preup.htm#BABEDAFB

2.5.4. Network Utility Packages包的依賴性

SQL> SELECT * FROM DBA_DEPENDENCIES
WHERE referenced_name IN ('UTL_TCP','UTL_SMTP','UTL_MAIL','UTL_HTTP','UTL_
INADDR','DBMS_LDAP')
AND owner NOT IN ('SYS','PUBLIC','ORDPLUGINS');

升級後,引入了DBMS_NETWORK_ACL_ADMIN包

2.5.5. 備份DBLINK建立指令碼

SELECT 'CREATE '||DECODE(U.NAME,'PUBLIC','public ')||'DATABASE LINK '||CHR(10)
||DECODE(U.NAME,'PUBLIC',Null, 'SYS','',U.NAME||'.')|| L.NAME||chr(10)
||'CONNECT TO ' || L.USERID || ' IDENTIFIED BY "'||L.PASSWORD||'" USING
'''||L.HOST||''''
||chr(10)||';' TEXT
FROM SYS.LINK$ L, SYS.USER$ U
WHERE L.OWNER# = U.USER#;

2.5.6. 檢查TIMESTAMP WITH TIMEZONE資料型別

Oracle 12cR1預設的time zone檔案版本是18。
當前庫time zone版本

SQL> SELECT version FROM v$timezone_file;
   VERSION
----------
        14

參考如下文件,檢查是否需要進行DST升級
Note 1665676.1 Actions For DST Updates When Upgrading To Or Applying The 12.1.0.2 Patchset
Note 1522719.1 Actions For DST Updates When Upgrading To 12.1.0.1 Base Release

2.5.7. 資料字典統計資訊收集

$ sqlplus "/as sysdba"
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

2.5.8. 使用emdwgrd工具保留db control檔案和資料

Oracle 12c不支援Enterprise Manager,所以一般可以不處理

2.5.9. 確保物化檢視已經全部重新整理

檢查是否還有物化檢視正在重新整理

$ sqlplus '/ as sysdba'
SQL> select s.obj#,o.obj#,s.containerobj#,lastrefreshdate,pflags,xpflags,o.name,o.owner#, bitand(s.mflags, 8) from obj$ o, sum$ s
where o.obj# = s.obj# and o.type# = 42 AND bitand(s.mflags, 8) = 8;

如果查出來有資料,參考Note 1442457.1 : During 11g Upgrade, Mview refresh warning
其它檢查指令碼:

$ sqlplus '/ as sysdba'
SQL> select distinct(trunc(last_refresh)) from dba_snapshot_refresh_times;
或
SQL> select distinct owner, name mview, master_owner master_owner, last_refresh from dba_mview_refresh_times;

2.5.10. 檢查沒有檔案需要介質恢復

SQL> select * from v$recover_file;

2.5.11. 確認沒有資料檔案處理備份模式

SQL> select * from v$backup where status!='NOT ACTIVE';

2.5.12. 確認沒有分散式未決事務

SQL&amp;gt; select * from dba_2pc_pending;

如果有未決事務,處理如下:

select local_tran_id from dba_2pc_pending;
execute dbms_transaction.purge_lost_db_entry('');
commit;

2.5.13. 升級前清理回收站

SQL> PURGE DBA_RECYCLEBIN;

2.5.14. 如果有DataGuard,升級前先同步好備庫

SELECT SUBSTR(value,INSTR(value,'=',INSTR(UPPER(value),'SERVICE'))+1)
FROM v$parameter
WHERE name LIKE 'log_archive_dest%' AND UPPER(value) LIKE 'SERVICE%';

如果有返回結果,則在升級之前,要保證Standby和Primary是處於同步的狀態。

2.5.15. 禁用批處理和JOB

參考:Note 404238.1 : How to Disable an Entry from DBMS_SCHEDULER
Note 1335741.1 : How To Stop A Running Job Using DBMS_JOB
Note 67695.1 : PROCEDURE DBMS_JOB.BROKEN Specification
檢查crontab是否有批處理,並禁用

2.5.16. 確認SYS、SYSTEM使用者處於自已的表空間

SQL&amp;gt; select username, default_tablespace from dba_users
     where username in ('SYS','SYSTEM');
USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
SYSTEM                         SYSTEM
SYS                            SYSTEM

如果不是,修改如下:

alter user sys default tablespace SYSTEM;
alter user system default tablespace SYSTEM;

2.5.17. 檢查是否有外部SSL使用者

SELECT name FROM sys.user$
     WHERE ext_username IS NOT NULL
     AND password = 'GLOBAL';

2.5.18. 記住相關檔案資訊

SELECT name FROM v$controlfile;
SELECT file_name FROM dba_data_files;
SELECT group#, member FROM v$logfile;

2.5.19. 刪作Enterprise Manager Database Control資訊庫

Enterprise Manager Database Control在12c中被Oracle Enterprise Manager Express替代,所以就不再需要EMDC資訊庫。手工刪除EMDC的過程如下:
從12c的$ORACLE_HOME/rdbms/admin目錄中複製emremove.sql指令碼到原庫的$ORACLE_HOME/rdbms/admin,在升級前執行如下:
$emctl stop dbcontrol
SQL> @ ?/rdbms/admin/emremove.sql
如果以上指令碼沒有刪除EM的資訊庫,那在catuppst.sql指令碼執行階段會自動刪除。
如果是使用的Cloud Control,那沒有EM資訊庫,這個步驟就不用執行了。
其它:Is it Possible to Validate Invalid Objects related to DBControl Configuration in a Database Upgraded to 12c? (文件 ID 2118740.1)

2.5.20. 檢查Valut是否使用

如果了使用了OLS(Lable Security) 或者DV ( Database Vault),那在升級前需要執行olspreupgrade.sql指令碼,該指令碼在12c的$ORACLE_HOME/rdbms/admin目錄下,把該指令碼從12c複製到原環境的$ORACLE_HOME/rdbms/admin目錄下
SQL> @ ?/rdbms/admin/olspreupgrade.sql
參考:http://docs.oracle.com/database/121/UPGRD/preup.htm#UPGRD60015

2.5.21. 檢查使用者和角色是否被佔用

Oracle 12.1使用了新的使用者和角色,如果在原庫中已經存在,在升級前需要先刪除。
執行preupgrade工具檢查是否使用者名稱和角色有衝突,如果有衝突,升級過程會報:the upgrade will terminate will with "ORA-01722: invalid number"。

2.5.22. 刪除不必要的隱含引數

檢查隱含引數的指令碼如下:
SQL> SELECT name, value from SYS.V$PARAMETER WHERE name LIKE '\_%' ESCAPE '\' order by name;

2.5.23. 檢查XDB ACL是否有start_date和end_date屬性

升級前,執行如下指令碼檢查:
SQL> select aclid, start_date, end_date from xds_ace where start_date is not null;
如果檢查出有資料,參考以下文件處理
Upgrade to 12.1 fails with ORA-01830 date format picture ends before converting entire input string ORA-06512: at "SYS.XS_OBJECT_MIGRATION" (文件 ID 1958876.1)

2.5.24. 檢查是否應用了Mitigation Patch

在原ORACLE_HOEM中應用了Mitigation Patch,會禁用JAVA開發環境,需要在原庫中啟用java開發環境
Connect to the database as a SYSDBA user
SQL> exec dbms_java_dev.enable;
參考:Database Upgrade failed with Errors “ORA-02290: check constraint (SYS.JAVA_DEV_DISABLED) violated” & “ORA-04045: SYS.DBMS_ISCHED” (文件 ID 1985725.1)

2.5.25. 修改或選擇資料庫字符集

在Oracle 12c多租戶體系中,容器庫(CDB)中的所有可插拔庫(PDB),必須滿足如下條件:
PDB的NLS_CHARACTERSET必須與CDB一致或者是CDB的二進位制子集。
PDB的NLS_NCHAR_CHARACTERSET必須與CDB一致。
如果PDB有Unicode字符集,那推薦CDB的字符集為AL32UTF8。注意:不能使用DBU遷移CDB的字符集。
參考:Note 1968706.1 12c Multitenant Container Databases (CDB) and Pluggable Databases (PDB) Character set restrictions / ORA-65116/65119: incompatible database/national character set ( Character set mismatch: PDB character set CDB character set )
Note ID 225912.1 [Section E] Changing Or Choosing the Database Character Set ( NLS_CHARACTERSET )

2.5.26. 從10g升級的注意事項

檢查如下內容:

SQL&amp;gt; select DBMS_STATS.GET_PARAM('METHOD_OPT') from dual;
DBMS_STATS.GET_PARAM('METHOD_OPT')
-------------------------------------------------------------
FOR COLUMNS ID SIZE 1

如果返回值是:"FOR COLUMNS ID SIZE 1",升級過程可能碰到問題,處理如下:
SQL>exec DBMS_STATS.SET_PARAM('METHOD_OPT','FOR ALL COLUMNS SIZE AUTO');
參考:Unpublished BUG 22454765 - CARRYING METHOD_OPT = "FOR COLUMNS ID SIZE 1" FROM 10G WILL BREAK UPGRADE

2.5.27. 從11.2.0.3升級的注意事項

建議在12.1.0.2的ORACLE_HOME中打上patch 21550777,以避免升級過程中物化檢視的相關問題。

2.6. 目標庫的要求和建議

2.6.1. 檢查作業系統版本是否經過Oracle認證

2.6.2. 安裝Oracle 12c的軟體、PSU等

參考:Things to Consider to Avoid Poor Performance or Wrong Results on 12.1.0.2 (文件 ID 2034610.1)

2.6.3. 複製原庫的配置檔案到12c的ORACLE_HOME

引數檔案(spfile或pfile)
口令檔案(orapwsid)

2.6.4. 刪除廢棄初始化引數

參考:http://docs.oracle.com/database/121/UPGRD/deprecated.htm#UPGRD60057
注意:SEC_CASE_SENSITIVE_LOGON在12.1中已廢棄
DIAGNOSTIC_DEST引數替換了USER_DUMP_DEST、BACKGROUND_DUMP_DEST
因為Bug 8937877, CORE_DUMP_DEST仍舊存在
參考: Note 454442.1 11g Install : Understanding about Oracle Base, Oracle Home and Oracle Inventory locations

2.6.5. 修改CLUSTER_DATABASE=FALSE

如果是RAC,升級前設定CLUSTER_DATABASE=FALSE,升級後再恢復

2.6.6. 檢查引數檔案中使用的是全路徑,而不是相對路徑

2.6.7. 停止原庫的監聽

$ lsnrctl stop

2.6.8. 在12.1環境下建立新的監聽

2.6.9. 停止其它服務

如:dbconsole、isqlplus等等
$ emctl stop dbconsole
$ isqlplusctl stop

2.6.10. 停止原庫

$ sqlplus "/as sysdba"
SQL> shutdown immediate;

2.6.11. 修改環境變數

  • ORACLE_BASE
  • ORACLE_HOME
  • PATH, LD_LIBRARY_PATH and SHLIB_PATH

設定以上環境變數,指向Oracle 12.1環境
$ export ORACLE_HOME=
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_BASE=

2.6.12. 更新oratab檔案,設定新的ORACLE_HOME,並禁止自動啟動

Sample : cat /etc/oratab
            #orcl:/opt/oracle/product/11.2/db_1:N
            orcl:/opt/oracle/product/12.1/db_1:N

更新/etc/oratab檔案後,可以指行oraenv(/usr/local/bin/oraenv)設定環境變數

[oracle@localhost ~]$ . oraenv
ORACLE_SID = [orcl] ? orcl
The Oracle base for ORACLE_HOME=/opt/oracle/product/12.1/db_1 is /u01/app/oracle
[oracle@localhost ~]$

2.7. 升級12cR1過程

2.7.1. 在12cR1新環境啟動例項

$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus "/ as sysdba"
SQL&amp;gt; startup UPGRADE
SQL&amp;gt; exit

2.7.2. 執行升級指令碼

在12c中,升級指令碼catctl.pl代替了catupgrd.sql,升級指令碼執行方式也發生了變化
在Linux平臺執行catctl.pl:

Example: Where parallelism is 6 ( n=6)
$ cd $ORACLE_HOME/rdbms/admin
 $ $ORACLE_HOME/perl/bin/perl catctl.pl -n  6 -l $ORACLE_HOME/diagnostics catupgrd.sql

在Windows平臺執行

Example: Where parallelism is 6 ( n=6)
cd %ORACLE_HOME%\rdbms\admin
%ORACLE_HOME%\perl\bin\perl catctl.pl -n  6 -l %ORACLE_HOME%\diagnostics catupgrd.sql

catctl.pl的說明參考:Oracle Database 12c Release 1 (12.1) Upgrade New Features (文件 ID 1515747.1)
升級日誌,當前使用6並行度升級,Oracle使用了6個會話進行升級

$ pwd
/data/oracle/product/12.1.0/db_1/diagnostics
$ ls -l
total 55756
-rw-r--r--. 1 oracle oinstall 21683527 Feb  7 14:38 catupgrd0.log
-rw-r--r--. 1 oracle oinstall  4000201 Feb  7 14:35 catupgrd1.log
-rw-r--r--. 1 oracle oinstall  4232471 Feb  7 14:35 catupgrd2.log
-rw-r--r--. 1 oracle oinstall  4408497 Feb  7 14:35 catupgrd3.log
-rw-r--r--. 1 oracle oinstall  3001116 Feb  7 14:35 catupgrd4.log
-rw-r--r--. 1 oracle oinstall  3208239 Feb  7 14:35 catupgrd5.log
-rw-r--r--. 1 oracle oinstall      438 Feb  7 14:18 catupgrd_catcon_49000.lst
-rw-r--r--. 1 oracle oinstall       42 Feb  7 14:35 catupgrd_catcon_50957.done
-rw-r--r--. 1 oracle oinstall       42 Feb  7 14:35 catupgrd_catcon_50958.done
-rw-r--r--. 1 oracle oinstall       42 Feb  7 14:35 catupgrd_catcon_50959.done
-rw-r--r--. 1 oracle oinstall       42 Feb  7 14:35 catupgrd_catcon_50960.done
-rw-r--r--. 1 oracle oinstall       42 Feb  7 14:35 catupgrd_catcon_50961.done
drwxr-xr-x. 3 oracle oinstall       25 Feb  7 10:52 config
$ ps -ef | grep LOCAL
oracle   50962 50956 65 14:35 ?        00:01:11 oracletest (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   50963 50958  0 14:35 ?        00:00:00 oracletest (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   50964 50961  0 14:35 ?        00:00:00 oracletest (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   50965 50960  0 14:35 ?        00:00:00 oracletest (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   50966 50959  0 14:35 ?        00:00:00 oracletest (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   50967 50957  0 14:35 ?        00:00:00 oracletest (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

2.7.3. 執行Post-Upgrade Status Tool

升級完成後,可以執行Post-Upgrade Status Tool($ORACLE_HOME/rdbms/admin/utlu121s.sql),檢視升級的概況資訊。

$ sqlplus "/as sysdba"
SQL&amp;gt; STARTUP
SQL&amp;gt; @utlu121s.sql

重要:catuppst.sql指令碼是作為升級過程一部分執行的,除非升級過程碰到問題。檢查日誌檔案:"BEGIN catuppst.sql"以確認在升級過程中catuppst.sql正確執行。如果catuppst.sql沒有執行,檢查這個位置的資訊,處理並執行catuppst.sql,並且在catctl.pl升級過程當中也會有相應的警告資訊,表明catuppst.sql沒有執行。
執行catuppst.sql,指令碼位於:$ORACLE_HOME/rdbms/admin目錄下,不需要資料庫在UPGRADE模式下。
SQL> @catuppst.sql
執行完後,執行utlrp.sql編譯PL/SQL和JAVA程式碼
SQL> @utlrp.sql

2.7.4. 檢查升級後資料庫完整性

參考:Note 556610.1 Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)
如果dbupgdiag.sql檢查發現有INVALID物件,使用utlrp指令碼編譯

2.8. 完成升級階段

2.8.1. 檢查環境變數

 

  • ORACLE_BASE
  • ORACLE_HOME
  • PATH, LD_LIBRARY_PATH and SHLIB_PATH

 

確認這些環境變數都修改正確
確認/etc/oratab和客戶端的ORACLE_HOME已修改正確

2.8.2. 檢查初始化引數檔案

確認初始化引數檔案修改正確,如果是cluster_database,恢復為TRUE

2.8.3. 口令檔案

為了避免在升級過程中出現ORA-28017,可以使用orapwd重建口令檔案
參考:ORA-28017: The password file is in the legacy format (passwordfile new features in 12c) (文件 ID 2112456.1)

2.8.4. COMPATIBLE引數

COMPATIBLE引數控制資料庫相容性級別,如果確認不需要再降級到以前的版本,可以設定該引數。建議設定該引數前,對資料庫做個備份。
ALTER SYSTEM SET COMPATIBLE = '12.1.0' SCOPE=SPFILE;
重啟資料庫例項

2.8.5. Oracle新引入的使用者

在升級Oracle12c過程中,Oracle新建了一些使用者,Oracle建議鎖定這些使用者,除了SYS和SYSTEM
SQL> SELECT username, account_status FROM dba_users ORDER BY username;
SQL> ALTER USER username PASSWORD EXPIRE ACCOUNT LOCK;

2.8.6. 升級Recovery Catalog

如果當前庫上有RMAN Catalog,可以使用UPGRADE CATALOG升級
參考:http://docs.oracle.com/database/121/BRADV/rcmcatdb.htm#BRADV188

2.8.7. 升級Time Zone 檔案版本

在升級過程中會自動升級Time Zone File Version,檢查如下:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%' ORDER BY PROPERTY_NAME;
DST_PRIMARY_TT_VERSION在11.2.0.4中預設為14,在12.1.0.2中為18
參考:Scripts to automatically update the RDBMS DST (timezone) version in an 11gR2 or 12cR1 database . (文件 ID 1585343.1)

2.8.8. 升級統計資訊匯出表

在舊版本的資料庫中使用DBMS_STATS.CREATE_STAT_TABLE建立的統計資訊匯出表,可以使用如下命令升級:
EXECUTE DBMS_STATS.UPGRADE_STAT_TABLE('SYS','dictstattab');

2.8.9. 升級外部認證SSL使用者

如果是從9.2.0.x,10.1.0.x升級,並且有外部認證SSL使用者,需要用以下命令升級
ORACLE_HOME/rdbms/bin/extusrupgrade --dbconnectstring
--dbuser --dbuserpassword
-a
如果從10gR2以上版本升級,不需要執行
utluiobj檢查INVALID物件
當升級前,執行Pre-Upgrade Information Tool指令碼時,SYS和SYSTEM使用者下的 INVALID物件會記錄到registry$sys_inv_objs,其它使用者的INVALID物件會記錄到registry$nonsys_inv_objs
升級後可以執行utluiobj.sql指令碼比較差異
SQL> @?/rdbms/admin/utluiobj.sql

2.8.10. 其它

  • �0�2啟用JOB
  • 啟用Database Vault
  • 配置ACL,參考:Note 453786.1 ORA-24247 When Executing UTL_HTTP UTL_INADDR Packages
  • 升級APEX配置
  • 安裝Oracle Text Supplied Knowledge Bases




About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub( http://blog.itpub.net/26736162 )、部落格園( http://www.cnblogs.com/lhrbest )和個人weixin公眾號( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599 (滿) 、618766405

● weixin群:可加我weixin,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-03-01 06:00 ~ 2019-03-31 24:00 在魔都完成

● 最新修改時間:2019-03-01 06:00 ~ 2019-03-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書 http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班 http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁 https://lhr.ke.qq.com/

........................................................................................................................

使用 weixin客戶端 掃描下面的二維碼來關注小麥苗的weixin公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗weixin, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2639455/,如需轉載,請註明出處,否則將追究法律責任。

相關文章