手動升級到資料庫 12c 版本1(12.1)的完整核對清單 (文件 ID 2047701.1)
文件內容
|
用途 |
|
適用範圍 |
|
詳細資訊 |
第1步: 升級到 Oracle 12c 版本1(12.1)的升級路徑 |
第2步:推薦在源庫上完成的 |
第3步:檢查源庫的一致性 |
第4步:升級前步驟 |
4.1 棄用的 CONNECT 角色 |
4.2 更改 Access Control Lists 和 Network Utility 包 |
4.3 Network Utility 包的依賴關係 |
4.4 處理源庫帶密碼的 DBLINK |
4.5 檢查 TIMESTAMP WITH TIMEZONE 型別的資料 |
4.6 最佳化器統計資訊 |
4.7 使用 emdwgrd 工具備份 Database Control 的檔案及資料 |
4.8 在升級資料庫前確認所有的物化檢視都已經完成了重新整理 |
4.9 在升級資料庫前確認沒有資料檔案需要介質恢復 |
4.10 在升級資料庫前確認沒有資料檔案處於備份狀態 |
4.11 在升級前把未決的分散式事務處理掉 |
4.12 在升級前清空資料庫的 Recycle Bin |
4.13 同步 standby 資料庫 |
4.14 禁用所有的 cron job |
4.15 檢查 SYS 和 SYSTEM 使用者的預設表空間 |
4.16 檢查資料庫是否有外部驗證的的 SSL 使用者(externally authenticated SSL users) |
4.17 記錄資料檔案,重做日誌和控制檔案的路徑 |
4.18 刪除 Enterprise Manager Database Control repository |
4.19 執行 olspreupgrade.sql |
4.20 如果源庫中存在 Oracle 12c 版本1自帶的使用者或者 Role,刪除它們 |
4.21 檢查並刪除不必要的隱藏引數 |
4.22 檢查 XDB ACLs 是否有 start_date and end_date ACE 屬性 |
4.23 如果 JVM 的 Mitigation patch 已應用至源庫,那麼 Oracle JVM 元件是被禁用的。您會在升級資料庫時碰到錯誤 |
4.24 修改或者選擇資料庫字符集 |
4.25 如果是對10g資料庫做升級 |
4.26 如果從11.2.0.3升級 |
第5步:推薦/需要在目標庫上完成的 |
第6步:升級資料庫到 12cR1 |
第7步:升級後步驟 |
7.1 環境變數及 oratab檔案 |
7.2 初始化引數檔案 |
7.3 密碼檔案 |
7.4 COMPATIBLE 引數 |
7.5 修改 Oracle 自帶使用者的密碼 |
7.6 在升級資料庫後升級 Recovery Catalog |
7.7 在升級資料庫後升級 Time Zone檔案版本 |
7.8 升級那些使用 DBMS_STATS 建立的統計資訊表(Statistics Tables) |
7.9 升級外部驗證的的 SSL 使用者 |
7.10 升級後安裝 Oracle Text Supplied Knowledge Bases |
7.11 更新 Oracle Application Express(APEX)的配置 |
7.12 對外部網路服務(External Network Services)配置細粒度的訪問控制 |
7.13 啟用 Database Vault |
7.14 使用 utluiobj 指令碼來發現失效物件 |
7.15 啟用之前在第4.14步驟停掉的所有 batch 和 cron job |
|
參考 |
適用於:
Oracle Database - Enterprise Edition - 版本 10.2.0.5 和更高版本Oracle Database - Standard Edition - 版本 10.2.0.5 和更高版本
本文件所含資訊適用於所有平臺
用途
本文件可用作手工將 Oracle 10gR2 (10.2),Oracle 11gR1 (11.1) 或者 Oracle 11gR2(11.2) 版本資料庫升級至 Oracle 12c 版本1 (12.1) 資料庫的指南與核對表。
適用範圍
資料庫管理人員/技術支援
詳細資訊
第1步: 升級到 Oracle 12c 版本1(12.1)的升級路徑
能夠直接升級到 Oracle 12c Release 1 的資料庫最小版本:
源資料庫 | 目標資料庫 |
---|---|
10.2.0.5 | 12.1.x |
11.1.0.7 | 12.1.x |
11.2.0.2 或者更高 | 12.1.x |
以下的資料庫版本需要間接升級:
源資料庫 | 升級路徑 | 目標資料庫 | ||
---|---|---|---|---|
11.2.0.1 | ----> | 11.2.0.2 或更高 | ----> | 12.1.x |
11.1.0.6 | ----> | 11.1.0.7 或 11.2.0.2 或更高 | ----> | 12.1.x |
10.2.0.4(或更低) | ----> | 10.2.0.5 或其它更高的可以直接升級的版本 | ----> | 12.1.x |
10.1.0.5(或更低) | ----> | 10.2.0.5 或其它更高的可以直接升級的版本 | ----> | 12.1.x |
9.2.0.8(或更低) | ----> | 9.2.0.8 --> 11.2.0.2 或更高 | ----> | 12.1.x |
比如:
- 如果源庫是 11.2.0.1 或者 11.1.0.6,那麼你需要先升級至 11.2.0.2。
- 如果源庫是 10.2.0.2,10.2.0.4 或者 10.1.0.5,需要先升級至 10.2.0.5 或更高。
- 對於 9.2.0.8 版本的資料庫,需要先升級至一箇中間版本,比如:9.2.0.8 -> 11.2.0.2 或 11.2.0.3 -> 12.1。
提醒:
參考下面的兩個文件來快速得到各個補丁集對應的 patch 號碼:
Note 438049.1 : How To Find RDBMS patchsets on My Oracle Support
Note 753736.1 : Quick Reference to Patchset Patch Numbers
第2步:推薦在源庫上完成的
- 對源庫做備份,冷備份或熱備份都可以(推薦冷備份)。
a) 做冷備份(如果使用的是非歸檔模式)
或者
b) 使用 rman 做備份
rman "target / nocatalog"
RUN
{
ALLOCATE CHANNEL chan_name TYPE DISK;
BACKUP DATABASE FORMAT '<db_backup_directory>%U' TAG before_upgrade;
BACKUP CURRENT CONTROLFILE TO '<controlfile_backup_directory>';
}
--> db_backup_directory >> 存放資料庫備份的目錄。
--> controlfile_backup_directory >> 存放控制檔案備份的目錄。
- 在升級前確保所有 oracle 提供的元件和物件都是有效的。
- 除了下面的物件外,確保在 sys 和 system schema 下沒有重複存在的物件。
下面的物件是允許重複的:
--------------------------- ------------------
AQ$_SCHEDULES TABLE
AQ$_SCHEDULES_PRIMARY INDEX
DBMS_REPCAT_AUTH PACKAGE
DBMS_REPCAT_AUTH PACKAGE BODY
- 禁用所有使用者自定義的 before/after DDL 型別的觸發器,完成升級後再啟用它們。
- 在11g,建立帶有 timestamp with timezone 資料型別的 ACL 不會失敗,但是在升級到 12c 後就會碰到"ORA-01830: date format picture ends before converting entire input string" 錯誤而失敗,請參照 Note 1958876.1 Upgrade to 12.1 fails with ORA-01830 date format picture ends before converting entire input string ORA-06512: at "SYS.XS_OBJECT_MIGRATION"。
- 要避免升級後執行datapump碰到ora-7445錯誤,請參照 Note 2017572.1 ORA-7445 [qcsIsColInFro] Querying After Upgrade to 12c,需要在升級前打這個patch
-
在升級前,如果統計資訊收集的'concurrent statistics gathering'沒有設定為 false,那麼必須修改它
在源庫,比如 11.2 上檢查當前的設定:
SQL> SELECT dbms_stats.get_prefs('CONCURRENT') from dual;如果 concurrent statistics gathering 沒有設定為 false,那麼在升級前把它改為 false。
BEGIN
DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT','FALSE');
END;
/
在 11.2 和 12.1 上,手工或者自動收集統計資訊時預設 concurrency 都是關閉的,如果需要啟用,那麼請在升級後再改回來。具體請參照文件 Note 2037154.1 DBMS_STATS.GATHER_DICTIONARY_STATS Fails with "ORA-06502: PL/SQL: numeric or value error: character string buffer too small"
第3步:檢查源庫的一致性
在升級前從 My Oracle Support 文件下載並執行 dbupgdiag.sql 指令碼來檢查源庫的一致性:
如果 dbupgdiag.sql 指令碼報告了任何無效物件,則執行 $ORACLE_HOME/rdbms/admin/utlrp.sql(可能需要多次)以使資料庫中的無效物件變為有效,直至無效物件數目不發生變化為止:
$ sqlplus "/ as sysdba"
SQL> @utlrp.sql
如果有 Oracle 自帶的物件仍處於失效狀態,建議在 Oracle Community 上發帖或者開一個 SR 來進一步分析為什麼這些物件仍然有問題。
使無效物件有效之後,再次在資料庫中重新執行 dbupgdiag.sql,確保一切正常。
建議使用 hcheck.sql 指令碼對資料庫做一個健康檢查,請從下面的文件中下載指令碼。
Note 136697.1 hcheck.sql" script to check for known problems in Oracle8i, Oracle9i, Oracle10g and Oracle 11g
第4步:升級前步驟
- Pre-Upgrade Information Tool 需要在舊的資料庫上執行。
- 每個步驟都需要執行。
- 源資料庫必須處於正常執行的狀態。
如果是間接升級,下載並執行最新版本的 Pre-Upgrade Information Tool,參照下列文件
Note 884522.1 How to Download and Run Oracle's Database Pre-Upgrade Utility
或者
直接執行 Pre-Upgrade Information Tool 來收集安裝前需要檢查的資訊。
第1步:
* 使用新 12c 軟體的所有者使用者登入作業系統。
* 把 12c 的 $ORACLE_HOME/rdbms/admin 目錄中的 Pre-Upgrade Information Tool 工具(即 preupgrd.sql 和 utluppkg.sql 指令碼)複製到源庫的 $ORACLE_HOME/rdbms/admin 目錄下。
第2步:
* 執行 Pre-Upgrade Information Tool。比如,如果已經把 preupgrd.sql 指令碼複製到了源庫的 $ORACLE_HOME/rdbms/admin 目錄下。
preupgrade.log,preupgrade_fixups.sql 和 postupgrade_fixups.sql 檔案會建立在源庫的 $ORACLE_HOME/cfgtoollogs/$ORACLE_SID/preupgrade/ 目錄下。
4.1 棄用的 CONNECT 角色
在資料庫從 9.2 版本或 10.1 版本升級到 12.1 版本之後,CONNECT 角色就只包含 CREATE SESSION 許可權了;在低版本資料庫中賦予 CONNECT 角色的其它許可權在升級的過程中都被收回了。要在資料庫中找到哪個使用者或者角色被賦予 CONNECT 角色,可以使用下面的語句:
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');
如果這些使用者或者角色需要除了 CREATE SESSION 以外其它的許可權,可以在升級前顯式的賦予這些許可權。升級的指令碼會自動調整 ORACLE 自帶的使用者的相關許可權。
在 9.2.x 和 10.1.x 資料庫中, CONNECT 角色包含下面的許可權:
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
從 ORACLE 資料庫 10.2 開始,CONNECT 角色就只包含 CREATE SESSION 許可權了。
4.2 更改 Access Control Lists 和 Network Utility 包
從 12c 開始,UTL 包(UTL_TCP,UTL_SMTP,UTL_MAIL,UTL_HTTP,和 UTL_INADDR)的訪問控制由 Oracle Database Real Application Security 來實現,不再依賴 Oracle XML DB 功能。
參照
4.3 Network Utility 包的依賴關係
執行下面的語句:
WHERE referenced_name IN ('UTL_TCP','UTL_SMTP','UTL_MAIL','UTL_HTTP','UTL_
INADDR','DBMS_LDAP')
AND owner NOT IN ('SYS','PUBLIC','ORDPLUGINS');
具體的步驟參照安裝後步驟 7.12,因為需要使用的包 DBMS_NETWORK_ACL_ADMIN 是在升級後才有的,升級前沒有。
4.4 處理源庫帶密碼的 DBLINK
為 DBLINKs 建立指令碼(如果這個庫稍後還要被降級)。
在資料庫升級到 12c 版本時,所有 dblink 的密碼會被加密。
在需要降級資料庫到之前版本的時候, 所有擁有加密的密碼的 dblink 都需要在降級前被刪除掉,因此降級後的資料庫中就沒有 dblink 了。
如果有預感這個資料庫還要被降級到之前的版本,那麼從 SYS.LINK$ 表儲存受到影響的 dblink 的資訊,這樣在降級後可以重建這些 dblink:
||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#;
4.5 檢查 TIMESTAMP WITH TIMEZONE 型別的資料
資料庫 12c 版本1的預設 time zone 檔案版本是 18。
要檢查是否需要更新 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
4.6 最佳化器統計資訊
Oracle 推薦在升級前夜收集統計資訊來減少升級時間。
為了減少在升級過程中收集統計資訊所花的時間,Oracle 推薦在真正升級資料庫前收集統計資訊。
如果要升級的庫是 10.1,Oracle 推薦使用 DBMS_STATS.GATHER_DICTIONARY_STATS 來收集統計資訊,比如:
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
4.7 使用 emdwgrd 工具備份 Database Control 的檔案及資料
如果在升級資料庫到 12c 版本後,有需要把 Oracle Enterprise Manager Database Control 降級,那麼我們必須在升級前備份 Database Control 的檔案才可以。
emdwgrd 可以用來在升級前儲存 Database Control 的資料,這個工具存在於 12c 版本的資料庫的 ORACLE_HOME/bin 目錄下。
1. 設定 ORACLE_HOME 到舊的資料庫版本
2. 設定 ORACLE_SID 為要升級的資料庫 SID
3. 設定 PATH, LD_LIBRARY_PATH 和 SHLIB_PATH 到舊的 ORACLE_HOME 相關的目錄下
4. 切換目錄到 12c 資料庫軟體的 ORACLE_HOME/bin
5. 執行 emdwgrd 命令
a. 對於單資料庫例項 (非 RAC) 執行下面的命令:
old_SID 是要升級的那個資料庫的 SID, save_directory 是用來存放 Database Control 檔案和資料的目錄。
b. 對於 RAC 資料庫,需要跨節點遠端複製。定義一個環境變數來指向遠端複製的命令。如 setenv EM_REMCP /usr/bin/scp
注意,如果 10g 資料庫的 ORACLE_HOME 是放在共享儲存上的,那麼上面的命令還需要指定 -shared 引數。
上面的命令可能會在 HPUX 上失敗,這是一個已知問題,請參照下面的文件:
6. 輸入 SYS 使用者的密碼。
注意:在 RAC 資料庫上,還需要在每個節點上執行'/tmp/racdwgrd_dbctl.sh' 。
4.8 在升級資料庫前確認所有的物化檢視都已經完成了重新整理
在升級資料庫前,我們需要確認所有的物化檢視都已經完成了重新整理,並且複製已經停止。
用下面的語句檢查當前是否有物化檢視正在重新整理:
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 來操作。
4.9 在升級資料庫前確認沒有資料檔案需要介質恢復
確保沒有資料檔案需要介質恢復:
4.10 在升級資料庫前確認沒有資料檔案處於備份狀態
執行下面的語句確保沒有資料檔案處於備份狀態
4.11 在升級前把未決的分散式事務處理掉
要處理未決的分散式事務:
1. 執行下面的語句:
2. 如果它有返回行,那麼用下面的命令處理掉未決的分散式事務:
SQL> EXECUTE dbms_transaction.purge_lost_db_entry('');
SQL> COMMIT;
4.12 在升級前清空資料庫的 Recycle Bin
要清空資料庫的 Recycle Bin,使用下面的命令:
注意:必須要清空資料庫的 recycle bin 來避免可能的 ora-600 錯誤及減少升級時間。
4.13 同步 standby 資料庫
檢查是否配置了 standby 資料庫:
1. 執行下面的命令:
FROM v$parameter
WHERE name LIKE 'log_archive_dest%' AND UPPER(value) LIKE 'SERVICE%';
2. 如果上面的語句有返回行,那麼把相應的 standby 資料庫與主庫進行同步。
- 確保最後一次 log switch 之後的所有日誌都已經傳輸到 standby 庫中。
- 在 standby 庫中,使用 NODELAY 的選項來恢復 standby 庫。
4.14 禁用所有的 cron job
對於 Oracle 資料庫的 job,可以使用 DBMS_JOB,DBMS_SCHEDULER 去停掉它們。
對於 cron job(由 OS 控制的 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
4.15 檢查 SYS 和 SYSTEM 使用者的預設表空間
確保 sys 和 system 使用者的預設 tablespace 是 SYSTEM。
必須確保 system tablespace 裡有足夠的空間或者設定成 extents 無限制。
FROM dba_users
WHERE username in ('SYS','SYSTEM');
default_tablespace 的值應該是 SYSTEM, 如果不是的話,可以用下面命令糾正:
SQL> ALTER user SYSTEM default tablespace SYSTEM;
4.16 檢查資料庫是否有外部驗證的的 SSL 使用者(externally authenticated SSL users)
執行下面的語句:
WHERE ext_username IS NOT NULL
AND password = 'GLOBAL';
If any SSL users are found then Step 7.9 has to be followed after the upgrade.
4.17 記錄資料檔案,重做日誌和控制檔案的路徑
記下資料檔案,重做日誌和控制檔案的路徑,並且備份所有的配置檔案,如 listener.ora, tnsnames.ora 等等。
SQL> SELECT file_name FROM dba_data_files;
SQL> SELECT group#, member FROM v$logfile;
4.18 刪除 Enterprise Manager Database Control repository
因此我們不再需要 Database Control repository。
使用下面的方式手工刪除 Database Control repository。
注意:你可以從 Oracle 12c 的 Home 裡找到 emremove.sql 指令碼。
從 12c 的 $ORACLE_HOME/rdbms/admin 下複製 emremove.sql 指令碼到源庫的 $ORACLE_HOME/rdbms/admin 下並在升級前在源庫執行下面的命令:
$emctl stop dbcontrol
SQL> @ ?/rdbms/admin/emremove.sql
如果 EM repository 未被刪除,那麼在升級後執行 catuppst.sql 時會被自動刪除。
也可以參照文件 Is it Possible to Validate Invalid Objects related to DBControl Configuration in a Database Upgraded to 12c? (Doc ID 2118740.1)
注意:如果資料庫中存在EM元件,這步才是需要的。並且如果使用了Cloud Control,但是EM不存在,那麼這步就不需要了。
4.19 執行 olspreupgrade.sql
- 它會把 AUD$ 從 SYSTEM 使用者遷移到 SYS 使用者下。
- 它會處理 audit 的記錄來減少停機時間。
- 它會把記錄移動到另一個臨時表中。
關於更多資訊,請參照 Requirements for Upgrading Databases That Use Oracle Label Security and Oracle Database Vault。
4.20 如果源庫中存在 Oracle 12c 版本1自帶的使用者或者 Role,刪除它們
在 Oracle 12.1 存在一些新的自帶的使用者和 Role,如果同名的使用者或者 Role 已經在源庫存在,那麼升級前必須刪除它們。
執行 preupgrade tool 檢查源庫中是否有和 12.1 自帶的使用者和 Role 同名的使用者及 Role。
注意:如果這樣的使用者存在,那麼在刪除這些使用者前,可以把它所擁有的資料先移動到另一個使用者下。
必須清理這樣的使用者,否則升級會碰到"ORA-01722: invalid number"並失敗。
4.21 檢查並刪除不必要的隱藏引數
在升級前請檢查並刪除不必要的隱藏引數,除非應用提供商或者 Oracle 技術支援特意要求,Oracle 推薦刪除隱藏引數。
要檢查資料庫中已設定的隱藏引數,可以使用 AS SYSDBA 許可權執行下面的命令:
SQL> SELECT name, value from SYS.V$PARAMETER WHERE name LIKE '\_%' ESCAPE '\' order by name;
4.22 檢查 XDB ACLs 是否有 start_date and end_date ACE 屬性
在升級至 12c 前,使用 SYS 使用者執行下面的查詢:
如果查詢有返回資料,那麼按照文件 Note 1958876.1 Upgrade to 12.1 fails with ORA-01830 date format picture ends before converting entire input string ORA-06512: at "SYS.XS_OBJECT_MIGRATION" 操作來避免 XDB 升級失敗。
4.23 如果 JVM 的 Mitigation patch 已應用至源庫,那麼 Oracle JVM 元件是被禁用的。您會在升級資料庫時碰到錯誤
注意:此步驟僅適用於源庫已經打了Mitigation patch的情況
在升級資料庫前啟用 JVM 元件:
SQL> exec dbms_java_dev.enable;
請參照文件 Note 1985725.1 Database Upgrade failed with Errors “ORA-02290: check constraint (SYS.JAVA_DEV_DISABLED) violated” & “ORA-04045: SYS.DBMS_ISCHED”。
4.24 修改或者選擇資料庫字符集
在12c資料庫多租戶架構下,同一個CDB內的所有的PDB的
國家字符集(NLS_NCHAR_CHARACTERSET)必須和CDB的一致
如果pdb要使用Unicode的字符集,那麼推薦CDB的字符集為AL32UTF8。請注意我們無法使用DMU來遷移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 )
4.25 如果是對10g資料庫做升級
如果是對10g資料庫做升級,確認下面的資訊
SQL> 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');
參照非公開BUG 22454765 - CARRYING METHOD_OPT = "FOR COLUMNS ID SIZE 1" FROM 10G WILL BREAK UPGRADE
4.26 如果從11.2.0.3升級
建議在12.1.0.2的ORACLE_HOME中打 ,來解決升級前與物化檢視有關的問題。
第5步:推薦/需要在目標庫上完成的
- 在下載安裝 12cR1 軟體之前,需要先檢查軟體版本與您的硬體平臺/作業系統是否相容。您可以透過 網站來確認這一點。
- 下載安裝 Oracle 12c 版本1 軟體到一個新的 ORACLE_HOME 並確認沒有編譯錯誤。
- 如果有的話,安裝最新的補丁集(PatchSet)。
- 如果有的話,安裝最新的 OPatch(要安裝跟作業系統平臺及資料庫版本一致的 OPatch)。
- 如果有的話,安裝最新的 Critical Patch Update。
- 請參照文件: Things to Consider to Avoid Poor Performance or Wrong Results on 12.1.0.2 (Doc ID 2034610.1)來獲知 12.1.0.2 上的和效能相關的問題。
- 把如下配置檔案從源庫的 $ORACLE_HOME 下複製至 12c 軟體的 $ORACLE_HOME 下
- 引數檔案(spfile 或者 pfile)
- 密碼(orapwsid)
- 刪除或者註釋掉被廢棄的引數
註釋掉被廢棄的引數並且修改所有不推薦的引數().
SEC_CASE_SENSITIVE_LOGON 在 12.1 已經不推薦使用,請參照 。
- DIAGNOSTIC_DEST 初始化引數替換掉了 USER_DUMP_DEST,BACKGROUND_DUMP_DEST 兩個初始化引數。
根據 Bug 8937877,CORE_DUMP_DEST 並沒有被廢棄。
要理解 11g 的目錄結構和 DIAGNOSTIC_DEST 引數,請參考下面的文件:
Note 454442.1 11g Install : Understanding about Oracle Base, Oracle Home and Oracle Inventory locations
-
如果升級的是 RAC 資料庫,那麼在升級前把 CLUSTER_DATABASE 設定成 false 並在升級後改回成 true。
如果源庫是 RAC 資料庫,那麼兩個節點的 init<SID>.ora 檔案需要一致。 - 確保引數檔案中的路徑名是完整正確的,引數檔案中的路徑名不能是相對路徑。
- 停掉資料庫的 listener。
- 建立一個 12.1 的 listener
之前版本的 listener 不能用在 12c 的資料庫上,但是 12c 的 listener 可以用在之前版本的資料庫上。
如果是從 10.2.0.5 升級或者手工升級,那麼需要在升級 RAC 資料庫之前執行 netca。
它包含兩個步驟:
需要先執行舊的 Oracle_home 裡的 netca 刪除當前的 listener。
- 執行 Netca
- 選擇配置 => 選擇 Listener Configuration
- 選擇刪除選項 => Delete
- 選擇要刪除的 listener 來刪除它
然後在新的 12cR1 ORACLE_HOME 裡執行 netca 來新增新 listener。
- 執行 Netca
- 選擇配置 => 選擇 Listener Configuration
- 選擇新增選項 => Add
- 提供詳細資訊來新增 listener
必須在新增新 listener 之前刪掉舊的,如果新 listener 和舊 listener 用到了相同的名字或者埠號,netca 會返回錯誤。
注意:如果要手工升級 RAC 資料庫,那麼這一步是必須要做的。
- 停掉其它的相關程式,如 dbconsole, isqlplus 等。
$ isqlplusctl stop
-
停掉資料庫。
SQL> shutdown immediate;
- 對於 Windows 作業系統,建立一個新的 SID(這一步僅適用於 Windows)
如果你的作業系統是 Windows,那麼需要做這一步,如果不是那麼可以忽略掉這一步。
設定相應的環境變數對應到源庫上(10.2/11.1)
停掉要升級的那個資料庫的服務 OracleServiceSID, SID 是 instance 的名字。比如,如果 SID 是 ORCL,那麼執行下面的命令:
a). 停掉資料庫服務。
b). 使用 ORADIM 命令刪掉源庫的服務:
c). 用新庫的 ORADIM 工具建立一個 12c 版本1 的資料庫 servicese:
比如:
C:\> ORADIM -NEW -SID ORCL -INTPWD <PASSWORD> -STARTMODE AUTO -PFILE %ORACLE_HOME%\DATABASE\INIT<SID>.ORA
- 確認下面的環境變數指向了新版本資料庫的目錄:
- ORACLE_BASE
- ORACLE_HOME
- PATH, LD_LIBRARY_PATH and SHLIB_PATH
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_BASE=<Oracle_Base set during installation>
注意: 如果不知道 ORACLE_BASE, 在 PATH 變數包含了 12cR1 的 Oracle Home 之後,執行 'orabase' 會提示 ORACLE_BASE 的值。
/uo1/app/oracle
- 更改 /etc/oratab 檔案,讓 ORCL 指向新的 ORACLE_HOME 並且禁用自動啟動。
#orcl:/opt/oracle/product/11.2/db_1:N
orcl:/opt/oracle/product/12.2/db_1:N
注意:在改掉 /etc/oratab 之後可以使用 oraenv(/usr/local/bin/oraenv)來設定新的環境變數,需要輸入 /etc/oratab 中的指向 12cR1 的那個 SID。
比如:
ORACLE_SID = [orcl] ? orcl
The Oracle base for ORACLE_HOME=/opt/oracle/product/12.1/db_1 is /u01/app/oracle
[oracle@localhost ~]$
第6步:升級資料庫到 12cR1
在 OS 裡,進入 12cR1 的 $ORACLE_HOME/rdbms/admin 裡:
$ sqlplus "/ as sysdba"
SQL> startup UPGRADE
SQL> exit
在新的 Oracle Home 下執行 catctl.pl 指令碼。
在這個版本下,新的升級工具 catctl.pl 替代了catupgrd.sql。
在 Linux 下執行 catctl.pl:
cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl -n 6 -l $ORACLE_HOME/diagnostics catupgrd.sql
在 Windows 下執行 catctl.pl:
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 Note 1515747.1
執行 Post-Upgrade Status Tool $ORACLE_HOME/rdbms/admin/utlu121s.sql 它會提供一個關於升級的總結。
它會顯示升級後各個資料庫元件的狀態和各個元件升級花費的時間。任何在升級中碰到的錯誤也會被列出,這些錯誤必須得到妥善的處理。
SQL> STARTUP
SQL> @utlu121s.sql
重要:catuppst.sql 指令碼會作為升級過程的一部分而執行,除非這個過程碰到錯誤而終止。檢查升級的日誌中是否包含"BEGIN catuppst.sql"來驗證是否這個指令碼 catuppst.sql 已執行。
如果 catuppst.sql 並沒有得到執行,那麼按照下面的步驟執行它。如果 catuppst.sql 並未得到執行,那麼 catctl.pl 也會報錯。
執行 $ORACLE_HOME/rdbms/admin 目錄下的 catuppst.sql,完成不需要在資料庫處於 UPGRADE 模式下操作的其它升級的動作:
這個指令碼可以和 utlrp.sql 並行執行。在另一個 session 裡執行 utlrp.sql 來重新編譯剩下的 PL/SQL 和 Java 程式碼:
執行從下面文件中得到的 dbupgdiag.sql 來檢查升級後資料庫的完整性。
如果 dbupgdiag.sql 發現了一些失效物件,那麼多次執行 $ORACLE_HOME/rdbms/admin/utlrp.sql 來重新編譯這些失效物件,直到失效物件的數目不再變化。
在重新編譯這些失效物件之後,再次執行 dbupgdiag.sql 確認一切都是正常的。
退出 SQL*Plus。
如果升級的是版本 10.2,11.1 或者 11.2 的 RAC 資料庫,那麼在叢集軟體中更新資料庫的配置:
這裡 db-unique-name 是資料庫的名字(不是例項名字),oraclehome 是資料庫的 ORACLE_HOME 路徑。
第7步:升級後步驟
7.1 環境變數及 oratab檔案
- 確認下面的環境變數指向了新的 Oracle 12c Release 1 (12.1) 目錄
- ORACLE_BASE
- ORACLE_HOME
- PATH, LD_LIBRARY_PATH and SHLIB_PATH
- 並且檢查 oratab 檔案和其它的客戶端指令碼,確認是指向了正確的 12c 的路徑。
7.2 初始化引數檔案
編輯 init.ora
- 如果在升級前改動過 CLUSTER_DATABASE,那麼需要再把它改回來。
- 把 pfile 檔案改回到 spfile。
從 pfile 建立 spfile:
它會根據 $ORACLE_HOME/dbs(UNIX)或者 %ORACLE_HOME%\database (Windows)目錄下的 pfile 產生一個新的 spfile。
7.3 密碼檔案
a) 如果 REMOTE_LOGIN_PASSWORDFILE 引數設定為 exclusive 或者 shared,使用 ORAPWD 建立密碼檔案。
b) 參照下面的文件來避免在執行post upgrade時碰到ORA-28017錯誤
ORA-28017: The password file is in the legacy format (Doc ID 2112456.1)
7.4 COMPATIBLE 引數
COMPATIBLE 引數控制了資料庫的相容版本(compatibility level)。
如果你確定不會再降級資料庫到之前的版本
- 那麼在加大COMPATIBLE引數之前備份資料庫(可選項)。
- 如果使用的是 spfile,那麼執行下面的步驟:
a. 更改 spfile 來設定或者改變 COMPATIBLE 引數的值
比如,設定 COMPATIBLE 引數為 12.0.0,執行下面的命令:
b. 關閉並重新啟動例項。
- 如果使用的是 pfile,那麼執行下面的步驟:
a. 如果例項正在執行,那麼關閉它:
b. 更改 pfile 來設定或者改變 COMPATIBLE 引數的值。
比如,設定 COMPATIBLE 引數為 12.1.0,修改下面的引數:
COMPATIBLE = 12.1.0
c. 使用 STARTUP 命令啟動資料庫。
7.5 修改 Oracle 自帶使用者的密碼
根據升級前資料庫的版本,可能會存在一些 Oracle 自帶的使用者。Oracle 推薦把除了 SYS 和 SYSTEM 之外的這樣的使用者都鎖住並讓它們的密碼過期。
這樣再把這些使用者解鎖的時候就會提示重新設定新密碼。
可以用下面的命令檢查所有帳號的狀態:
使用下面的命令鎖定使用者並讓它的密碼過期:
7.6 在升級資料庫後升級 Recovery Catalog
可以透過命令 UPGRADE CATALOG 來升級 Recovery catalog。
關於具體的步驟資訊,請參照 。
7.7 在升級資料庫後升級 Time Zone檔案版本
如果 Pre-Upgrade Information Tool 要求我們在升級資料庫後升級 time zone 檔案,那麼使用 DBMS_DST PL/SQL package 來升級 RDBMS DST(timezone)版本
(Note 1585343.1 : Scripts to automatically update the RDBMS DST (timezone) version in an 11gR2 or 12cR1 database . )
注意:即使升級了 DST 版本,在執行 postupgrade_fixups.sql 後仍然可以看到下面的錯誤:
Check Tag: OLD_TIME_ZONES_EXIST
Check Summary: Check for use of older timezone data file
Fix Summary: Update the timezone using the DBMS_DST package after upgrade is complete.
*******************************************************************************************
請直接忽略這個錯誤,它是由於一個已知的 bug 導致的: : UPGRADE DATABASE FROM 11.1.0.7 TO 12.1.0.1, "OLDER TIMEZONE IN USE" OCCURRED
如果這些錯誤出現了,那麼執行下面的語句:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%' ORDER BY PROPERTY_NAME;
如果返回的不是 DSTv18,此時請升級 DST 版本;否則就是因為 bug 17303129 導致的,可以忽略這些錯誤。
7.8 升級那些使用 DBMS_STATS 建立的統計資訊表(Statistics Tables)
如果我們使用 DBMS_STATS.CREATE_STAT_TABLE 手工建立了一些統計資訊表(statistics tables),那麼執行下面的命令來升級這些表(如果沒有建立過統計資訊表,那這一步驟可以忽略)。例如:
EXECUTE DBMS_STATS.UPGRADE_STAT_TABLE('SYS','dictstattab');
在上面的例子裡, 'SYS' 是統計資訊表的 owner, 'dictstattab' 是統計資訊表的表名。對每個統計資訊表都要執行一遍上面的命令。
7.9 升級外部驗證的的 SSL 使用者
如果資料庫是從 9.2.0.x 或 10.1.0.x 升級上來的並且之前使用了外部驗證的的 SSL 使用者,那麼需要執行下面的命令來升級這些使用者:
<hostname:port_no:sid> --dbuser <db admin> --dbuserpassword
<password> -a
如果是從 10.2.0.x(或更高)升級上來的,那麼這個步驟可以忽略。
7.10 升級後安裝 Oracle Text Supplied Knowledge Bases
Oracle Text-supplied knowledge bases 是 12c 的 companion products 的一部分,並且不會在升級後立刻可用。
升級後所有依賴 supplied knowledge bases 的 Oracle Text 特性都不能正常工作。
要啟用這些特性,必須安裝 Oracle Text supplied knowledge bases。
升級後,Oracle Text supplied knowledge bases 相關的使用者擴充套件都必須重新生成。這個問題影響 $ORACLE_HOME 下所有的資料庫。
7.11 更新 Oracle Application Express(APEX)的配置
如果源庫安裝的的 APEX 是版本 3.2 或更高,那麼不需要額外的配置。
如果源庫安裝的 APEX 低於 3.2,那麼在升級的過程中會自動安裝最新版本的 APEX。
要在新的 Oracle 12c 裡執行 APEX,必須完成一系列的安裝後步驟來配置 APEX。
7.12 對外部網路服務(External Network Services)配置細粒度的訪問控制
為了避免在執行和網路相關的 UTL 程式包的時候引發 "ORA-24247: network access denied by access control list (ACL)"的錯誤,訪問許可權需要賦給使用這些程式包的使用者。
下面的例子先查詢當前已經分配給 host_name 的訪問控制列表(ACL), 如果發現了就賦給 user_name CONNECT 的許可權(如果它沒有的話)。
如果沒有訪問控制列表(ACL)存在,就建立叫做 ACL_name 的訪問控制列表(ACL),並且把 CONNECT 許可權賦給 user_name,然後把這個 ACL 分配給 host_name。
acl_path VARCHAR2(4000);
BEGIN
SELECT acl INTO acl_path FROM dba_network_acls
WHERE host = 'host_name' AND lower_port IS NULL AND upper_port IS NULL;
IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(acl_path,'principal','privilege') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl_path,'principal', is_grant, 'privilege');
END IF;
EXCEPTION
WHEN no_data_found THEN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('ACL_name.xml','ACL description', 'principal', is_grant, 'privilege');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('ACL_name.xml','host_name');
END;
COMMIT;
acl_name.xml => 指定訪問控制列表的 XML 檔案的名字,
ACL description => '檔案的描述',
principal => '使用者或者角色',
is_grant => TRUE|FALSE,
privilege => 'connect|resolve',
host_name => 主機名
關於如何使用 DBMS_NETWORK_ACL_ADMIN 程式包並避免 ORA-24247 : network access denied by access control list (ACL)。
請參照下面的文件:
7.13 啟用 Database Vault
如果資料庫之前使用了 Database Vault,那麼參考下面的文件來啟用 Database Value:
Note 453902.1 - Enabling and Disabling Oracle Database Vault in WINDOWS
7.14 使用 utluiobj 指令碼來發現失效物件
升級前,Pre-Upgrade Information Tool 工具會把所有失效的 SYS/SYSTEM 物件寫入
registry$sys_inv_objs,把所有失效的非 SYS/SYSTEM 物件寫入 registry$nonsys_inv_objs。
升級後,可以執行 $ORACLE_HOME/rdbms/admin/ 下的 utluiobj.sql 來比較升級導致的新失效物件。
7.15 啟用之前在第4.14步驟停掉的所有 batch 和 cron job
參考
NOTE:1585343.1 - Scripts to automatically update the RDBMS DST (timezone) version in an 11gR2 or 12cR1 database .
- UPGRADE DATABASE FROM 11.1.0.7 TO 12.1.0.1, "OLDER TIMEZONE IN USE" OCCURRED
NOTE:1565816.1 - Upgrading to a higher release throws ORA-01031: insufficient privileges
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31393455/viewspace-2129643/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MOS】手動升級到資料庫 12c 版本1(12.1)的完整核對清單 (文件 ID 2047701.1)資料庫
- Oracle DB 18c - 手動升級到 18c 的完整核對清單 (文件 ID 2469647.1)Oracle
- 手動升級到 Oracle Database 11gR2 (11.2)的完整核對清單 (文件 ID 1674333.1)OracleDatabase
- Oracle 19c - 手動升級到 Non-CDB 19c 的完整核對清單 (Doc ID 2577572.1)Oracle
- Oracle Database 12c 版本 1 (12.1) 升級新增功能 (文件 ID 1602865.1)OracleDatabase
- 升級到資料庫到10.2.0.5.0版本資料庫
- Oracle Database 12c 版本 1 (12.1) DBUA 的靜默模式 (文件 ID 1602878.1)OracleDatabase模式
- 如何將 12c 資料庫降級為以前的版本 (文件 ID 1602889.1)資料庫
- AndroidSqlite資料庫版本升級管理初探AndroidSQLite資料庫
- Android版本升級同時Sqlite資料庫的升級及之前資料的保留AndroidSQLite資料庫
- android資料庫如何進行版本升級?架構之資料庫框架升級Android資料庫架構框架
- 除錯核對清單除錯
- 動手為王 | Oracle 資料庫跨版本升級遷移實踐Oracle資料庫
- 探索Oracle之資料庫升級二 11.2.0.3升級到11.2.0.4完整步驟Oracle資料庫
- Oracle 12c資料庫升級實戰Oracle資料庫
- 資料庫升級之-Dataguard滾動升級資料庫
- oracle資料庫升級11.2.0.3升級到11.2.0.4Oracle資料庫
- 【MOS】從 11.2.0.N 版本非原地手動升級到最新的 11.2.0.N (文件 ID 1602485.1)
- 資料庫 升級/降級 相容性矩陣 (文件 ID 1577660.1)資料庫矩陣
- RAC資料庫升級到10.2.0.5資料庫
- rac 升級crs 升級資料庫軟體,升級資料庫資料庫
- 【資料庫升級】Oracle指令碼升級12c CDB to 19c CDB資料庫Oracle指令碼
- 升級到12c的題庫1z0-060是靠譜的
- 升級失敗後對資料庫進行恢復 (1)資料庫
- 軟體升級配置清單
- 12c 的 Cascaded Standby 資料庫 (文件 ID 2179701.1)資料庫
- ABP Framework 手動升級指南:從6.0.1升級到7.0.0Framework
- 12. Oracle版本、補丁及升級——12.1. 版本體系Oracle
- win10系統如何手動更新升級到1903版本Win10
- 開發安全的 API 所需要核對的清單API
- 針對 Oracle Database 12.1 單機安裝的更改 (文件 ID 1602861.1)OracleDatabase
- Android升級資料庫的最佳寫法Android資料庫
- 資料庫升級資料庫
- ♀♀資料庫升級♀♀資料庫
- 資料庫的升級和降級[轉載wisdomone1 ]資料庫
- 做 Web 開發必備的安全核對清單Web
- RAC 資料庫升級 10.2.0.1.0 到 10.2.0.2.0 之升級catalog資料庫
- android 自動檢測版本升級Android