1. 程式人生 > 實用技巧 >Oracle 19c - 使用 DBUA 升級資料庫到 Oracle Database 19c (19.x) 的完整核對清單 (Doc ID 2577574.1)

Oracle 19c - 使用 DBUA 升級資料庫到 Oracle Database 19c (19.x) 的完整核對清單 (Doc ID 2577574.1)

To Bottom

文件內容

用途
適用範圍
詳細資訊
Database Upgrade Assistant (DBUA)
關於只讀 Oracle Homes
升級路徑/19c 相容性矩陣
需要及推薦在源庫上完成的
推薦/需要在目標庫上完成的
在 Windows 上需要對 Oracle Home 做的準備及前提條件
升級前步驟
檢查源庫中失效的元件及物件
收集優化器統計資訊來減少資料庫停機時間
確認升級前物化檢視重新整理都已經完成
檢查 TIMESTAMP WITH TIMEZONE 型別的資料型別
確保沒有資料檔案需要介質恢復(media recovery)或處於備份的狀態
升級前清空回收站
使用了 Oracle Label Security 和 Oracle Database Vault 的資料庫
備份 Oracle EM DB Control 配置及資料 (對於低於 12.1 版本的資料庫)
單例項資料庫:
Oracle Real Application Clusters (Oracle RAC) 資料庫:
使用 emremove.sql 刪除 DB control (對於低於 12.1 版本的資料庫)
不再支援 OLAP Catalog (OLAP AMD) (對於低於 12.1 版本的資料)
複製 Transparent Encryption Oracle 錢包
檢查使用者使用了大小寫敏感的密碼的版本
關於密碼大小寫敏感
使用了 Oracle Warehouse Builder (OWB) 元件的資料庫的升級前要求
啟動 DBUA
DBUA ( 步驟1 )
DBUA ( 步驟2 )
DBUA ( 步驟3)
DBUA ( 步驟4)
DBUA ( 步驟5)
DBUA ( 步驟7)
DBUA ( 步驟8)
DBUA ( 步驟9)
升級後步驟
Known Issues

適用於:

Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Oracle Database Exadata Cloud Machine - 版本 N/A 和更高版本
Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本
Oracle Database Backup Service - 版本 N/A 和更高版本
Oracle Database Cloud Exadata Service - 版本 N/A 和更高版本
本文件所含資訊適用於所有平臺

用途

本文旨在提供使用 DBUA 把資料庫升級到 19c 的指南。

適用範圍

DBA, Support

詳細資訊

Database Upgrade Assistant (DBUA)

Database Upgrade Assistant (DBUA) 互動式的引導我們完成升級資料庫的步驟。

DBUA適用於CDB和非CDB資料庫系統。是推薦的升級資料庫主要版本或者補丁集的方式。

您可以使用DBUA升級多租戶架構容器資料庫(CDB),可插拔資料庫(PDB)和非CDB資料庫。

過程是相同的,但您必須做出的選擇和DBUA的行為是不同的,具體取決於升級型別。

它會自動執行為了升級資料庫所需的所有步驟。

在 Oracle RAC 環境下, DBUA 升級叢集中的所有節點上的資料庫以及配置檔案。

DBUA 需要在新安裝的資料庫 19c 軟體的 ORACLE_HOME 下執行。在 Windows 環境下,需要使用 administrator 使用者或者軟體的屬主使用者來執行 DBUA。

在真正開始升級前,DBUA 會執行 Pre-Upgrade Tool 來做先決條件檢查。
但是,為了減少停機時間,Oracle建議您在升級計劃中執行 Pre-Upgrade Tool,以便分析資料庫的先決條件檢查,並在計劃的升級日期之前採取主動措施。

當解決了所有預升級推薦/錯誤/警告後開始升級,DBUA 會顯示升級源庫各個元件的進展。

就像之前版本的DBUA,19c 的 DBUA 限制了對隱藏引數的設定。因為除了為了升級而由 Oracle 技術支援推薦的隱含引數外,Oracle 不推薦使用其它的隱藏引數。
要檢查資料庫中已設定的隱藏引數,可以使用 AS SYSDBA 許可權執行下面的命令:

SELECT name,description from SYS.V$PARAMETER WHERE name LIKE '\_%' ESCAPE '\';

DBUA 會在資料庫真正升級之前檢查一些專案;這些檢查也可以手工去做來減少升級的停機時間。

DBUA 提供下面的一些選項:

- 升級 timezone。19c 預設的 timezone 版本是 32。

- 在升級前收集資料字典的統計資訊。

- 把使用者表空間設定為只讀。

- 在升級前做 RMAN 備份。

- 為 Database Flashback 建立一個 Restore Point

- 可以恢復資料庫備份來回退升級。

- 可以在升級前或升級後執行自定義的指令碼。

- 顯示 alert log 和 DBUA log的路徑。

- 可以把已存在的 listener 升級到最新的 19c Home 下或者在 19c 目標庫 HOME 下建立一個新的 listener。

關於只讀 Oracle Homes

從Oracle Database 18c開始,您可以以只讀模式配置 Oracle Homes。
在只讀 Oracle Homes 中,所有配置資料和日誌檔案都位於只讀 Oracle Homes 之外。 此功能允許您將只讀 Oracle Homes 簡單的部署到多個伺服器上。

升級路徑/19c 相容性矩陣

可以直接升級到 19c 的版本
源資料庫 目標資料庫
11.2.0.4 及更高版本 19.x
12.1.0.2

19.x

12.2.0.1

19.x

18.1

19.x

以下的資料庫版本需要間接升級:

源資料庫 升級路徑 目標資料庫
11.2.0.1/11.2.0.2/11.2.0.3 --> 11.2.0.4 --> 19.x
11.1.0.6/11.1.0.7 --> 11.2.0.4 --> 19.x
10.2.0.2, 10.2.0.3, 10.2.0.4, 10.2.0.5 --> 11.2.0.4/12.1.0.2 --> 19.x
10.1.0.5 --> 11.2.0.4/12.1.0.2 --> 19.x
9.2.0.8 或之前版本 --> 11.2.0.4 --> 19.x

12.1.0.1 --> 12.1.0.2/12.2.0.1 --> 19.x

需要及推薦在源庫上完成的

- 在升級前確保所有 oracle 提供的元件和物件都是有效的。

- 在開始升級或者降級前,Oracle 推薦您先升級源資料庫和目標資料庫到最新的 Oracle bundle patch 或者 patch set update (BP 或者 PSU)。

- 確保在 sys 和 system schema 下沒有重複存在的物件。對於 1) 和 2),參照:
Doc Id 556610.1 - Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)
- dbupgdiag.sql 是可以在升級前或者升級後對資料庫的狀態進行診斷並提供使用者友好的輸出結果的一些 SQL 語句;它會建立一個名為 db_upg_diag_<sid>_<timestamp>.log的輸出檔案。

- 如果安裝了APEX,則建議先升級源資料庫中的APEX元件,然後再升級DB

- 源庫的 timezone 版本應當小於或等於目標資料庫 timezone 版本。

- 確保升級前擁有一個可用的源資料庫的備份。

- 禁用所有自定義的 before/after DDL 型別的觸發器,完成升級後再啟用它們。

- 在升級前檢查資料庫的升級/降級相容性矩陣。

- 推薦在升級前啟用 archive log 模式,這樣 DBUA 在升級過程中可以建立/更新 archive log。

- 如果使用 DBUA 升級的是 RAC 資料庫,那麼必須保持 CLUSTER_DATABASE 設定成 true。

- 在升級前確保運行了 pre-upgrade 工具。 檢查並且實施 preupgrade log 給出的建議。

- 在升級前原資料庫上的物化檢視應該被停掉

Doc ID 1406586.1 - How to Handle Materialized Views When You Upgrade or Clone a Database

- 禁止掉客戶的計劃作業以及 cron job。

-升級資料庫到19.1的 COMPATIBLE 引數最小的值是"11.2.0",確認資料庫 COMPATIBLE 引數已被設定為 11.2.0 或者更高

推薦/需要在目標庫上完成的

- 先檢查您的硬體平臺/作業系統是否相容 19c 版本。

- 下載安裝 19c 軟體到一個新的 ORACLE_HOME 並確認沒有編譯錯誤。

- 如果有最新的 RU 的話,下載並安裝它們。

- 確保設定 ORACLE_HOME, PATH, LD_LIBRARY_PATH, LIBPATH 等指向到 19c 目標庫 HOME。

- 檢視文章 "Patches to apply before upgrading Oracle GI and DB to 19c (Doc ID 2539751.1)" 中給出的補丁建議

在 Windows 上需要對 Oracle Home 做的準備及前提條件

在 Microsoft Windows 平臺上升級資料庫之前,必須滿足以下這些前提條件。基於安全的考慮,為不同的 Oracle Home 配置的不同的 Microsoft Windows 使用者,不允許共享同一個 Oracle Base。

- 資料庫升級對於源資料庫和目標資料庫的 ORACLE_HOME 使用相同的 Windows 使用者是支援的。

- 資料庫升級對於源資料庫使用 Windows 自帶賬戶是支援的。Oracle Database 12c 之前的版本 (release 11.2 或者之前的版本) 在 Windows 上只支援使用 Windows 自帶的使用者來作為 Oracle Home 使用者。

- Oracle home 使用者可能無法訪問在它自己的 Oracle Base 和 Oracle home 之外的檔案。如果出現這樣的情況,那麼在升級時選擇不同的 Oracle Base,可能會出現 Oracle 資料庫服務無法訪問舊 Oracle Base 的情況。使用 DBUA 升級,需要確保 Oracle Home 使用者可以訪問它自己的 Oracle Base 和 Oracle Home 之外的檔案。

升級前步驟

$Earlier_release_Oracle_home/jdk/bin/java -jar $New_release_Oracle_home/rdbms/admin/preupgrade.jar [FILE|TERMINAL] [TEXT|XML] [DIR output_dir]


FILE|TERMINAL - 使用 FILE 選項把指令碼輸出定向到一個檔案。使用 TERMINAL 選項把指令碼輸出列印到螢幕上。如果沒有指定,那麼預設是 FILE 選項。
DIR - Log 會建立在指定的目錄裡。如果不指定那麼會建立 log 到預設的路徑:如果定義了 ORACLE_BASE 環境變數,那麼日誌建立在 $ORACLE_BASE/cfgtoollogs/<dbname>/preupgrade/ 否則會建立在 $ORACLE_HOME/cfgtoollogs/db_name/preupgrade/。

比如,

源Oracle Home : /refresh/home/oracle/ora_base/product/18.1

目標Oracle Home : /refresh/home/oracle/ora_base/product/19.0.0.0

$ export ORACLE_SID=orcl
$ export ORACLE_BASE=/refresh/home/oracle/ora_base
$ export ORACLE_HOME=/refresh/home/oracle/ora_base/product/18.1

$ $ORACLE_HOME/jdk/bin/java -jar/refresh/home/oracle/ora_base/product/19.0.0.0/rdbms/admin/preupgrade.jar TERMINAL TEXT FILE

==================

PREUPGRADE SUMMARY

==================

/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/preupgrade.log

/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/preupgrade_fixups.sql

/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/postupgrade_fixups.sql

執行 fixup 指令碼:

升級前:

登入資料庫並執行 preupgrade fixups

@/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/preupgrade_fixups.sql

升級後:

執行 postupgrade fixups

@/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/postupgrade_fixups.sql

Preupgrade complete: 2019-05-22T05:14:05

檢查 preupgrade.log 並且實施推薦

最新的19c對應的 preupgrade 工具可以參照如下文件獲取 :

How to Download and Run Oracle's Database Pre-Upgrade Utility (Doc ID 884522.1)

檢查源庫中失效的元件及物件

set pagesize500
set linesize 100
select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version from dba_registry order by comp_name;

select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type from dba_objects where status='INVALID' order by owner,object_type;

select owner,object_type,count(*) from dba_objects where status='INVALID' group by owner,object_type order by owner,object_type ;

或者

SET SERVEROUTPUT ON;

EXECUTE DBMS_PREUP.INVALID_OBJECTS;

如果發現了任何無效元件或者物件,則執行下面的操作以使資料庫中的無效物件變為有效:

執行 utlrp.sql 以編譯資料庫中的無效物件。 您可以多次執行utlrp.sql指令碼以編譯無效物件。

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

收集優化器統計資訊來減少資料庫停機時間

Oracle 強烈推薦升級前收集統計資訊。Oracle 推薦使用 DBMS_STATS.GATHER_DICTIONARY_STATS 來收集統計資訊,比如,執行下面的 SQL:

SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

確認升級前物化檢視重新整理都已經完成

用下面的語句檢查當前是否有物化檢視正在重新整理。在升級資料庫前,我們需要確認所有的物化檢視都已經完成了重新整理。

SQL> SELECT o.name FROM sys.obj$ o, sys.user$ u, sys.sum$ s WHERE o.type# = 42 AND bitand(s.mflags, 8) =8;

How to Handle Materialized Views When You Upgrade or Clone a Database (Doc ID 1406586.1)

檢查 TIMESTAMP WITH TIMEZONE 型別的資料型別

Oracle Database 19c 自帶的 time zone 檔案版本是 32

情況1 源資料庫的 Timezone 版本等於或者小於 32。

如果源資料庫的 Timezone 版本小於 32,那麼不需要打 DST 補丁到源資料庫 Home 或者目標 19c home。

情況2 源資料庫的 Timezone 版本高於 32。

如果源資料庫的 Timezone 版本高於 32,升級前必須打補丁把目標 19c $ORACLE_HOME 升級到源庫的 Timezone 版本一致。

確保沒有資料檔案需要介質恢復(media recovery)或處於備份的狀態

執行下面的語句檢查備份的狀態:

SQL> SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';

確保沒有檔案需要介質恢復:

SQL> SELECT * FROM v$recover_file;

升級前清空回收站

SQL> PURGE DBA_RECYCLEBIN;

DBUA 也可以清空回收站。

使用了 Oracle Label Security 和 Oracle Database Vault 的資料庫

Audit Table 升級前準備

如果要升級使用了 Oracle Label Security (OLS) 和 Oracle Database Vault 的低於 12.1 版本的資料庫,必須執行 OLS preprocess 指令碼, olspreupgrade.sql,來處理 aud$ 表的內容。 它會把 AUD$ 從 SYSTEM 使用者遷移到 SYS 使用者下。

如果要升級的資料庫低於12.1,並且使用了 Oracle Label Security (OLS) 和 Oracle Database Vault,那麼在升級前執行 olspreupgrade.sql 是必須的。一旦資料庫升級到了12.1,那麼就不需要執行OLS preprocessing 步驟了。

升級前在 11.2 資料庫上執行 OLS preprocess 指令碼:

如果在要升級的早期版本中安裝了Oracle Label Security,則將DV_PATCH_ADMIN角色授予SYS。


1. 從 19c 的 $ORACLE_HOME/rdbms/admin 下拷貝如下指令碼到 11.2 源庫的 $ORACLE_HOME/rdbms/admin 下。

ORACLE_HOME/rdbms/admin/olspreupgrade.sql
ORACLE_HOME/rdbms/admin/emremove.sql
ORACLE_HOME/rdbms/olap/catnoamd.sql


2. 使用 DVOWNER 使用者通過 SQL*Plus 連線至源資料庫。

3. 執行下面的 SQL:

SQL> GRANT DV_PATCH_ADMIN to SYS;


4. 執行下面的 SQL:

CONNECT SYS AS SYSDBA


5. 執行 preprocess 指令碼

ORACLE_HOME/rdbms/admin/olspreupgrade.sql
ORACLE_HOME/rdbms/admin/emremove.sql
ORACLE_HOME/rdbms/admin/catnoamd.sql



6. 在 OLS 預處理指令碼成功執行後,使用 DVOWNER 使用者通過 sqlplus 登入資料庫。

7. 執行下面的 SQL:

SQL> REVOKE DV_PATCH_ADMIN from SYS;

對於使用了Database Vault的12.1資料庫,賦予SYS以DV_PATCH_ADMIN的角色

如果啟用了Database Vault,那麼也需要做對應的檢查,檢查步驟需要執行下面的SQL指令碼 - olspreupgrade.sql, emremove.sql, catnoamd.sql

以 DVOWNER 登陸要升級的資料庫

執行下面的SQL:

SQL> GRANT DV_PATCH_ADMIN to SYS;

備份 Oracle EM DB Control 配置及資料 (對於低於 12.1 版本的資料庫)

如果在升級資料庫到 19c 版本後,有需要再降級,那麼我們必須在升級前使用 emdwgrd 工具備份 Database Control 的檔案,這樣在降級後可以恢復這些檔案。

備份資料的步驟:

1. 安裝 19c 的資料庫軟體。
2. 設定 ORACLE_HOME 到舊的資料庫版本。
3.設定 ORACLE_SID 為要升級的資料庫 SID。
4. 設定 PATH, LD_LIBRARY_PATH 和 SHLIB_PATH 到舊的 ORACLE_HOME 相關的目錄下。
5. 切換目錄到目標資料庫軟體。
6.執行 emdwgrd

單例項資料庫:

emdwgrd[sh|bat] -save -sid old_SID -path save_directory

Oracle Real Application Clusters (Oracle RAC) 資料庫:


需要跨節點遠端拷貝。定義一個環境變數 EM_REMCP 來指向遠端拷貝的命令,比如: export EM_REMCP /usr/bin/scp

emdwgrd -save -cluster -sid old_SID -path save_directory

7. 提供要升級的資料庫的 SYS 密碼。

使用 emremove.sql 刪除 DB control (對於低於 12.1 版本的資料庫)

警告:
下面的步驟不能在升級 Enterprise Manager Cloud Control Repository 時操作,否則 EM Cloud Control Repository 資料庫會不可用。


從 Oracle Database 12c 版本1 (12.1) 開始,作為升級的一部分,DB Control 會被刪除。

停掉DB Console:

emctl stop dbconsole

執行 emremove.sql 指令碼。指令碼存放在目標 19.x 的 OH/rdbms/admin/。

SQL>SET ECHO ON
SQL>SET SERVEROUTPUT ON
SQL>@emremove.sql >> 指令碼放在新的 19c ORACLE_HOME/rdbms/admin

在 emremove.sql 執行完畢後,必須從系統中手工刪除 ORACLE_HOME/HOSTNAME_SID 和 ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_HOSTNAME_SID 目錄。

不再支援 OLAP Catalog (OLAP AMD) (對於低於 12.1 版本的資料)

從 Oracle Database 12c 開始,OLAP Catalog (OLAP AMD) 不再支援,並且作為升級的一部分會從資料庫中刪除。為了減少停機時間,也可以在升級前手工刪除它。可以執行指令碼 $ORACLE_HOME/olap/admin/catnoamd.sql 來刪除它。請不要在 UPGRADE 模式下執行這個指令碼。

複製 Transparent Encryption Oracle 錢包

如果使用了帶 Oracle 錢包的 Transparent Data Encryption (TDE),並且要使用 Database Upgrade Assistant (DBUA) 來升級資料庫,那麼拷貝 thesqlnet.ora 和 wallet 檔案到新的 19c Oracle home。

在升級前需要手工拷貝 sqlnet.ora 和 wallet 檔案。
1. 以授權使用者身份登入。
2. 手工拷貝 sqlnet.ora,wallet 檔案以及 ewallet.p12,到新的 Oracle home
3. 以 mount 模式開啟資料庫 wallet。

比如
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN;

檢查使用者使用了大小寫敏感的密碼的版本

以管理員賬號登陸 SQL*Plus 並執行下面的語句
SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;

如果存在 10g 版本的密碼,建議參照 Oracle 文件來解決 10g 版本問題,否則,升級完成後使用者會被鎖。

關於密碼大小寫敏感

確保沒有設定廢棄的引數 SEC_CASE_SENSITIVE_LOGON 為 FALSE。

使用了 Oracle Warehouse Builder (OWB) 元件的資料庫的升級前要求

必須單獨安裝Oracle Warehouse Builder。 從Oracle Database 12c開始,Oracle Warehouse Builder(OWB)未作為Oracle資料庫軟體的一部分安裝。可以從Oracle Technology Network 下載。早期版本中可能存在的OWB元件未作為Oracle資料庫升級過程的一部分進行升級。

啟動 DBUA

DBUA ( 步驟1 )

我們需要選擇要升級的資料庫的 SID,在這個例子裡是 test11204

DBUA ( 步驟2 )

DBUA會執行 preupgrade 指令碼(preupgrade.jar) 並且返回警告/錯誤。

DBUA ( 步驟3)

一旦 pre-upgrade 警告被解決,下一個螢幕會顯示各種選項,比如啟用並行升級,在升級後的步驟裡重新編譯失效物件,升級 timezone,升級前收集統計資訊,在升級中把使用者表空間設定為只讀。當然,您也可以指定在升級前後要執行的任何SQL指令碼。

DBUA ( 步驟4)

在選擇選項之後,下個螢幕會顯示一些 Recovery 選項,比如在哪裡建立 Guaranteed Restore Point,或者做一個 RMAN 備份或者已經在 DBUA 外建立了備份,那麼"I have my own backup and restore stratege "選項可以被選中。

DBUA ( 步驟5)

在這個螢幕裡,可以建立一個新的監聽或者升級當前的監聽到 19c

DBUA ( 步驟6)

這個螢幕來配置 EM express 或者註冊這個資料庫到 EM Cloud control。

DBUA ( 步驟7)

這是在真正的升級開始前顯示的彙總頁面,點選 Finish 來開始真正的升級。

DBUA ( 步驟8)

DBUA 開始升級 test11204 資料庫,它會完成升級前步驟,升級以及升級後步驟。

DBUA 會升級資料庫的元件比如 Oracle server, XML等。

DBUA ( 步驟9)

最後的螢幕會顯示升級的結果。

它會顯示日誌的路徑以及升級的各個步驟花費的時間。

升級後步驟

執行 dbupgdiag.sql 指令碼來驗證物件以及元件的狀態 。 如果存在失效物件,那麼執行 utlrp.sql 來編譯所有的失效物件:

sql> connect / as sysdba

sql> @?/rdbms/admin/utlrp.sql