Oracle 19c - 手動升級 Oracle 12.x, 18c CDB 到 Oracle 19c (19.x)

lhrbest發表於2020-05-07


Oracle 19c - 手動升級 Oracle 12.x, 18c Container database (CDB) 到 Oracle 19c (19.x) 的完整核對清單 (Doc ID 2610728.1)



文件內容

用途
適用範圍
詳細資訊
關於手工升級
升級到資料庫 19c CDB 的升級路徑
Step 1: 需要及推薦在源 CDB / PDB 庫上完成的
Step 2: 推薦/需要在目標庫上完成的 
Step 3 升級前步驟
Step 3.1 執行 Preupgrade 指令碼
Step 3.2 檢查源庫中失效的元件及物件
Step 3.3 備份 Oracle 資料庫以進行升級。
Step 3.4 驗證 SYS 和 SYSTEM 預設表空間。
Step 3.5 收集最佳化器統計資訊以減少資料庫升級停機時間
Step 3.6 確認升級前物化檢視重新整理都已經完成
Step 3.7 檢查 TIMESTAMP WITH TIMEZONE 型別的資料型別
Step 3.8 確保沒有資料檔案需要介質恢復(media recovery)或處於備份的狀態
Step 3.9 升級前清空回收站
Step 3.10 升級前解決 Outstanding Distributed Transactions 
Step 3.11 從 12.2 開始,升級前可以不禁用 Oracle Database Vault 功能
Step 3.12 備份檔案以保留降級和恢復選項
Step 3.13 Schema-Only 的使用者以及升級密碼狀態為 EXPIRED 的使用者
Step 3.14 複製 Transparent Encryption Oracle 錢包
Step  3.15 理解密碼大小寫敏感
Step 3.16 Network Utility 包的依賴關係
Step 3.17 對只讀表空間升級
Step 3.18 禁止掉客戶的計劃作業以及 cron job。
Step 3.19 不推薦使用的引數和不支援的引數
Step 4 為升級新的Oracle Home做準備
Step 5 升級步驟
Step 6 升級後步驟

適用於:

Oracle Database - Enterprise Edition - 版本 12.1.0.2 到 19.3.0.0.0 [發行版 12.1 到 18]
本文件所含資訊適用於所有平臺

用途

本文的目的是使用手動升級方法將12c,18c容器資料庫(帶有一個或多個可插拔資料庫的CDB)升級到Oracle 19c版本。

適用範圍

資料庫管理人員, 技術支援

詳細資訊

關於手工升級

升級到資料庫 19c CDB 的升級路徑

能夠直接升級到 Oracle 19c 的資料庫最小版本

源資料庫 目標資料庫
11.2.0.4

19c

12.1.0.2

19c

12.2.0.1 19c
18.1 19c

 

可以手工升級Oracle 12.1.0.2或者更高版本到 19c。

源資料庫 目標資料庫
12.1.0.2 或者更高版本 19c

 

Step 1: 需要及推薦在源 CDB / PDB 庫上完成的

  • 在開始升級之前,請確保源 CDB 和所有 PDB 中 Oracle 提供的所有資料庫元件/物件都是有效的。

          Doc Id 556610.1 - Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)

          dbupgdiag.sql 是可以在升級前或者升級後對資料庫的狀態進行診斷並提供使用者友好的輸出結果的一些 SQL 語句。

          它會建立一個名為 db_upg_diag_<sid>_<timestamp>.log 的輸出檔案。

  • 確保在 sys 和 system schema 下沒有重複存在的物件。
  • 在開始升級過程之前,Oracle強烈建議應用最新的PSU或Proactive Bundle Patch / RU。參考  Refer Doc Id - 2118136.2  來下載這些補丁。
  • 確保升級前擁有一個可用的源資料庫的備份。
  • 禁用所有自定義的 before/after DDL 型別的觸發器,完成升級後再啟用它們。
  • 在升級前檢查資料庫的升級/降級相容性矩陣。
  • 如果要升級的是叢集資料庫,那麼需要在升級前修改引數 CLUSTER_DATABASE 為 FALSE 並在升級後改回 TRUE。
  • 在升級前確保執行了 pre-upgrade 工具(preupgrade.jar)。 檢查並且實施 preupgrade log 給出的建議(比如收集統計資訊,清空回收站等)。
  • 在升級前原資料庫上的物化檢視應該被停掉

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

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

 

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

  • 先檢查您的硬體平臺/作業系統是否相容 19c 版本。
  • 確認新安裝的 19c 軟體沒有編譯錯誤。
  • 如果有最新的 RU 的話,下載並安裝它們。參考下面的文件下載這些補丁:

          Doc ID 2118136.2 - Assistant: Download Reference for Oracle Database/GI Update, Revision, PSU, SPU(CPU), Bundle Patches, Patchsets and Base Releases

  • 檢視下面文章給出的補丁建議:

          Doc ID 2539751.1 - Patches to apply before upgrading Oracle GI and DB to 19c

 

Step 3 升級前步驟

Step 3.1 執行 Preupgrade 指令碼

$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 選項。

TEXT - 使用這個選項來指定輸出檔案是 Text 格式的。使用 XML 選項則輸出為 XML 格式。如果不指定,預設是 Text。

DIR - Log 會建立在指定的 <output_dir> 目錄裡。如果不指定那麼會建立 log 到預設的路徑: 如果定義了 ORACLE_BASE 環境變數,那麼日誌建立在 $ORACLE_BASE/cfgtoollogs/<dbname>/preupgrade/ 否則會建立在 $ORACLE_HOME/cfgtoollogs/db_name/preupgrade/。

執行下列步驟前請確保所有的 PDB 處於 open 的狀態:

源 Oracle Home : /refresh/app/oracle/product/12.2.0.1.0

目標 Oracle Home : /refresh/app/oracle/product/19.0.0.0

 

比如,

$ export ORACLE_HOME=/refresh/app/oracle/product/12.2.0.1.0
$ export PATH=/refresh/app/oracle/product/12.2.0.1.0/bin:$PATH
$ export ORACLE_SID=cdb12201
$ /refresh/app/oracle/product/12.2.0.1.0/jdk/bin/java -jar /refresh/app/oracle/product/19.0.0.0/rdbms/admin/preupgrade.jar FILE TEXT
PREUPGRADE SUMMARY
==================
/refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade.log
/refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups.sql
/refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups.sql

在整個CDB中執行 fixup 指令碼:

升級前:

1. 使用如下命令執行 preupgrade fixups 
$ORACLE_HOME/perl/bin/perl -I$ORACLE_HOME/perl/lib -I$ORACLE_HOME/rdbms/admin $ORACLE_HOME/rdbms/admin/catcon.pl -l /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ -b preup_cdb12201 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups.sql

2. 檢查 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ 下產生的日誌

升級後:

1. 使用如下命令執行 postupgrade fixups
$ORACLE_HOME/perl/bin/perl -I$ORACLE_HOME/perl/lib -I$ORACLE_HOME/rdbms/admin $ORACLE_HOME/rdbms/admin/catcon.pl -l /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ -b postup_cdb12201 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups.sql

2. 檢查 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ 下產生的日誌

preupgrade.jar 會為 CDB$ROOT,PDB$SEED 和 pluggable databases建立 fixup 指令碼,可以在目錄 /u01/app/oracle/cfgtoollogs/cdb12102/preupgrade/*.sql 下找到這些指令碼
[oracle@celvpvm14867 preupgrade]$ ls -ltr /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/*upgrade*
-rw-rw-r-- 1 oracle oracle 7884 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_driver.sql
-rw-rw-r-- 1 oracle oracle 455876 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_package.sql
-rw-rw-r-- 1 oracle oracle 100166 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_messages.properties
-rw-rw-r-- 1 oracle oracle 9855 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_CDB_ROOT.sql
-rw-rw-r-- 1 oracle oracle 9259 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_CDB_ROOT.sql
-rw-rw-r-- 1 oracle oracle 7780 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_CDB_ROOT.log
-rw-rw-r-- 1 oracle oracle 8005 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_PDB_SEED.sql
-rw-rw-r-- 1 oracle oracle 9258 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_PDB_SEED.sql
-rw-rw-r-- 1 oracle oracle 7317 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_PDB_SEED.log
-rw-rw-r-- 1 oracle oracle 7093 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_PDB12201.sql
-rw-rw-r-- 1 oracle oracle 9258 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_PDB12201.sql
-rw-rw-r-- 1 oracle oracle 6578 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_PDB12201.log
-rw-rw-r-- 1 oracle oracle 7077 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_PDB1.sql
-rw-rw-r-- 1 oracle oracle 9242 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_PDB1.sql
-rw-rw-r-- 1 oracle oracle 6570 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_PDB1.log
-rw-rw-r-- 1 oracle oracle 7077 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_PDB2.sql
-rw-rw-r-- 1 oracle oracle 9242 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_PDB2.sql
-rw-rw-r-- 1 oracle oracle 6570 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_PDB2.log
-rw-rw-r-- 1 oracle oracle 32106 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups.sql
-rw-rw-r-- 1 oracle oracle 33554 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups.sql
-rw-rw-r-- 1 oracle oracle 34815 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade.log

 

 

檢查 preupgrade.log 檔案並且實施推薦。在所有或者相關 pdb 上執行 preupgrade_fixups_<pdb_name>.sql。

如下命令會在所有的 PDB 中執行 preupgrade_fixups.sql。

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 2 -e -b preupgrade_fixups /refresh/app/oracle/cfgtoollogs/cdb12201/preupgradepreupgrade_fixups.sql

要在某個特定的PDB上執行 preupgrade fixups script,執行下面的命令:

 $ORACLE_HOME/perl/bin/perl catcon.pl -c 'CDB$ROOT' -n 2 -e -b /preupgrade_fixups_cdbroot /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_CDB_ROOT.sql

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

執行以下針對資料庫和所有可插拔資料庫的查詢。

set pagesize 500
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 ;

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

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

在源庫下,對CDB以及所有的PDB執行 utlrp.sql 

cd $ORACLE_HOME/rdbms/admin/
$ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlrp -d '''.''' utlrp.sql

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

 

Step 3.3 備份 Oracle 資料庫以進行升級。

建議在執行 Pre-Upgrade Information Tool 之後備份資料庫。備份資料庫或者建立 guaranteed flashback restore point。測試備份,確保出現問題後有回退方案。

 

Step 3.4 驗證 SYS 和 SYSTEM 預設表空間。

確保使用者 SYS 和 SYSTEM 的預設表空間為 'SYSTEM'。

您必須在 'SYSTEM' 表空間中有足夠的空間,或者將 extents 設定為 unlimited。

SQL> alter session set container=<PDB_Name>;

SQL> SELECT username, default_tablespace

FROM dba_users

WHERE username in ('SYS','SYSTEM');

如果 DEFAULT_TABLESPACE 是 SYSTEM 表空間以外的其他 tablespace,請使用以下命令將使用者 SYS 和 SYSTEM 的預設表空間修改為 SYSTEM:

SQL> alter user SYS default tablespace SYSTEM;

SQL> alter user SYSTEM default tablespace SYSTEM;

 

 

Step 3.5 收集最佳化器統計資訊以減少資料庫升級停機時間

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

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -b gatherstats -- --x"exec dbms_stats.gather_dictionary_stats"

上面的命令會在所有的PDB上執行收集資料字典統計資訊。

要在某個特定的PDB上收集統計資訊:

 

對於 PDB pdb_1 :

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -c 'PDB_1' -b pdb_1_gatherstats -- --x"exec dbms_stats.gather_dictionary_stats"

對於 CDB$ROOT:

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -c 'CDB$ROOT' -b root_gatherstats -- --x"exec dbms_stats.gather_dictionary_stats"

 

 

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

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

 $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -b mview_refresh -- --x"SELECT o.name FROM sys.obj$ o, sys.user$ u, sys.sum$ s WHERE o.type# = 42 AND bitand(s.mflags, 8) =8"

上面的命令會在所有的PDB上執行語句或者使用下面的語句只針對某個 PDB 做查詢:

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

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

 

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

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

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

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

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

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

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

 

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

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

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

SQL> SELECT * FROM v$recover_file;

Step 3.9 升級前清空回收站

下面的命令可以在所有的pdb中執行清空的動作:

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -b purge_recyclebin -- --x"PURGE DBA_RECYCLEBIN"

或者

SQL> PURGE DBA_RECYCLEBIN;

Step 3.10 升級前解決 Outstanding Distributed Transactions 

要解決 outstanding distributed transactions:

1. 執行下面的語句:

SQL> Select * from dba_2pc_pending;

2. 如果上一步中的查詢返回任何行,則執行以下語句:

SQL> select local_tran_id FROM dba_2pc_pending;

SQL> execute dbms_transaction.purge_lost_db_entry('');

SQL> commit;

 

Step 3.11 從 12.2 開始,升級前可以不禁用 Oracle Database Vault 功能

如果目標Oracle資料庫版本為12.2或更高版本,則可以在不禁用Oracle Database Vault的情況下進行升級。如果在源Oracle資料庫發行版中啟用了Oracle Database Vault,則可以在不先禁用Oracle Database Vault的情況下將Oracle資料庫升級到Oracle Database 18c及更高版本。升級後,如果源Oracle資料庫版本是Oracle Database 12c第1版(12.1)或更高版本,則使用與升級之前相同的設定啟用Oracle Database Vault。

例如,如果源資料庫是Oracle資料庫版本12.1,並且在該版本中禁用了Oracle Database Vault,則在升級後它將保持禁用狀態

如果源Oracle Database Database 12.1資料庫在升級之前已啟用Oracle Database Vault,則升級後將啟用Oracle Database Vault。

如果在升級之前手動禁用Oracle Database Vault,則必須在升級後手動啟用Oracle Database Vault

Step 3.12 備份檔案以保留降級和恢復選項

Oracle Data Guard Broker配置檔案和降級

升級到Oracle Database 19c及更高版本後,要保留降級到早期版本的功能,必須備份Data Guard broker 配置檔案。

在Oracle Database 19c之前的版本中,Oracle Data Guard broker 的屬性在Oracle Data Guard broker 配置檔案中維護,並且可以使用DGMGRL 命令進行修改。 但是,從Oracle Database 19c開始,這些資料庫設定不再儲存在 broker 配置檔案中。 作為此更改的結果,儘管您可以繼續使用DGMGRL修改這些屬性,但您修改的值不再儲存在Oracle Data Guard broker 配置檔案中。 相反,DGMGRL命令直接修改這些Oracle Data Guard Broker 屬性對映到的Oracle資料庫初始化引數。

由於對屬性設定的管理方式進行了此更改,因此,如果使用Oracle Data Guard broker,則Oracle建議您在開始升級之前將早期版本的Oracle Data Guard broker 配置檔案匯出到安全的備份位置。 如果在升級之前未備份Oracle Data Guard broker配置檔案,則在升級之後,您無法降級到早期版本並保留先前為Oracle Data Guard選擇的屬性設定。

 

Step 3.13 Schema-Only 的使用者以及升級密碼狀態為 EXPIRED 的使用者

在開始升級之前,請確定是否要對密碼處於EXPIRED狀態且其帳戶處於LOCKED狀態的預設Oracle資料庫帳戶使用密碼身份驗證。

在升級到 Oracle Database 19c 之後,預設的 Oracle 賬號(沒有設定密碼並且處於 EXPIRED 和 LOCKED 狀態)會被置為  NO AUTHENTICATION 狀態。

由於此新功能,這些預設賬號會變為 schema-only 帳戶,並無法使用密碼驗證。此功能的好處是管理員不再需要定期修改這些Oracle預設賬號的密碼。此功能還可以降低未授權者使用預設密碼侵入這些帳戶的安全風險。

如果要在升級期間阻止將這些Oracle帳戶設定為僅 schema-only 帳戶,則必須在開始升級之前為該帳戶設定有效的強密碼,或者在升級後為這些帳戶設定有效的強密碼, 或者在升級前解鎖帳戶。

升級後,管理員還可以為僅 schema-only 啟用密碼身份驗證。 但是,為了更好的安全性,Oracle建議您將這些帳戶保留為 schema-only 賬號。

Step 3.14 複製 Transparent Encryption Oracle 錢包

如果使用了帶 Oracle 錢包的 Transparent Data Encryption (TDE),那麼複製 thesqlnet.ora 和 wallet 檔案到新的Oracle home。在升級前需要手工複製 sqlnet.ora 和 wallet 檔案。

 

1. 以授權使用者身份登入。
2. 手工複製 sqlnet.ora,wallet 檔案以及 ewallet.p12,到新的 Oracle home。

開啟資料庫 wallet

例如:

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

Step  3.15 理解密碼大小寫敏感

從 Oracle Database 12c release 2 (12.2) 開始,預設的基於密碼驗證的協議排除了大小寫不敏感的 10g 版本的密碼。預設的SQLNET.ORA檔案中引數SQLNET.ALLOWED_LOGON_VERSION_SERVER被設定成了 12 (排他模式)。

為了安全起見,Oracle建議使用大小寫敏感的密碼驗證。這是預設的設定。但是在升級資料庫的時候可以短暫的關閉大小寫敏感的密碼驗證。在升級後,可以再決定是否啟用大小寫敏感的密碼驗證。

在升級前,Oracle建議您檢查是否新的密碼驗證會影響您的應用。可以做下面的檢查:

  • 檢查是否有使用者使用了 10g 大小寫不敏感的密碼驗證方式。
  • 檢查是否使用了尚未安裝 CPUOct2012 補丁的11.2.0.3或者更早版本的客戶端,或者應用了這個補丁但尚未啟用大小寫敏感的密碼版本。
  • 確認您並未設定SEC_CASE_SENSITIVE_LOGON成FALSE。設定SEC_CASE_SENSITIVE_LOGON為FALSE就無法啟用大小寫敏感的密碼版本了(11G和12C的密碼版本)

Step 3.16 Network Utility 包的依賴關係

執行 preupgrade 指令碼後,檢查 preupgrade 日誌

WARNING: --> Database contains schemas with objects dependent on network packages.
.... Refer to the Database Upgrade Guide for instructions to configure Network ACLs.
.... USER WKSYS has dependent objects.
.... USER SYSMAN has dependent objects.
.... USER FLOWS_010600 has dependent objects.

執行下面的語句

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');

在升級測試中,確保使用新的訪問控制。在升級後確保這些包是可用的,在升級後,根據源庫的使用情況賦予正確的許可權。

Step 3.17 對只讀表空間升級

以 -T 引數使用 Parallel Upgrade Utility 可以在升級時把使用者表空間置為只讀。 因為資料庫可以讀取之前版本建立的資料檔案 header, 所以在升級時我們不需要做額外的操作。當升級完成後,表空間被置為讀寫時,檔案 header 會自動被更新。如果升級失敗,無法把表空間重新 online,那麼檢查升級日誌。日誌中包含把表空間重新 online 的語句。可以在資料庫中或者每個pdb裡手工執行來 online 表空間。

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

對於Oracle發起的 job,可以使用 DBMS_JOB, DBMS_SCHEDULER 來停掉。

對於 OS 發起的 cron jobs 需要 Unix 管理員來停掉 cron jobs。

參考:

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

 

Step 3.19 不推薦使用的引數和不支援的引數

刪除不支援的初始化引數並調整已棄用的初始化引數。 在新版本中,某些引數不再被支援,有些引數已經被廢棄。 從啟動新Oracle資料庫例項的任何引數檔案中刪除所有不支援的引數。 不受支援的引數可能會導致新的Oracle資料庫版本出錯。

Pre-Upgrade Information Tool 會在“不推薦使用的引數”和“不支援的引數”部分顯示任何已棄用的引數和不支援的引數。

 

Step 4 為升級新的Oracle Home做準備

  • 從要升級的資料庫 Home 複製配置檔案到新的版本的Oracle Home中。
  • 如果您有一個 password 檔案,那麼把它從舊的 Oracle home 複製到新的 Oracle home。
  • 從引數檔案中刪除所有廢棄的引數。在新的版本的資料庫裡有一些引數已經被廢棄。從要啟動新版本的資料庫的引數檔案中刪除所有被廢棄的引數,否則會在啟動時產生錯誤。同時,修改那些在新版本里格式已經被改變的引數。
  • 如果要升級的是叢集資料庫,那麼需要在升級前修改引數 CLUSTER_DATABASE 為 FALSE 。

Step 5 升級步驟

透過 SQL*Plus 中啟動例項

啟動 CDB 到 ugprade 模式

 

SQL> startup upgrade pfile=<pfile location>

啟動所有 PDB 到 ugprade 模式

SQL> alter pluggable database all open upgrade;

執行下一個步驟前退出 SQL*Plus 

SQL> exit;

 

使用 Parallel Upgrade Utility (catctl.pl, 透過 shell 命令 dbupgrade) 開始升級資料庫,這裡 -d 指定目錄的路徑
 

cd $ORACLE_HOME/rdbms/admin

dbupgrade -d $ORACLE_HOME/rdbms/admin

 Seed和沒有 PDB 都會生成單獨的 catupgrade logs

注意: 除非升級過程中返回錯誤,否則catuppst.sql指令碼將作為升級過程的一部分執行。 檢查日誌檔案中的"BEGIN catuppst.sql",以驗證catuppst.sql在升級過程中是否已執行。

檢視upg_summary.log以確認升級是否成功,如果有必要,檢查其它的logs。

Step 6 升級後步驟

對 CDB 和所有可插拔資料庫執行 utlrp.sql 以編譯無效物件。

cd $ORACLE_HOME/rdbms/admin/
$ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlrp -d '''.''' utlrp.sql

修改 /etc/oratab 中對應的條目來指向 Oracle 19c ORACLE_HOME。

然後執行生成的 postupgrade_fixups.sql 指令碼:

$ORACLE_HOME/perl/bin/perl -I$ORACLE_HOME/perl/lib -I$ORACLE_HOME/rdbms/admin $ORACLE_HOME/rdbms/admin/catcon.pl -l /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ -b postup_cdb12201 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups.sql

執行 Post-Upgrade Status Tool, utlusts.sql 並且檢查日誌。這個指令碼會確認是否所有的問題都已經被解決。

SQL> @$ORACLE_HOME/rdbms/admin/utlusts.sql

對於 Oracle RAC 環境,把 CLUSTER_DATABASE 改回 TRUE,之後執行 19c home 的 srvctl 命令來升級資料庫配置。比如: 

ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE;
$ORACLE_HOME/bin/srvctl upgrade database -db name -o ORACLE_HOME

 

升級 Recovery Catalog 

如果使用的recovery catalog版本低於rman客戶端的版本,我們必須升級它。可以透過命令 UPGRADE CATALOG 來升級 Recovery catalog。

關於具體的步驟資訊,請參照Oracle文件中的 "Upgrading the Recovery Catalog" 部分

 


在升級資料庫後升級 Time Zone檔案版本

如果 Pre-Upgrade Information Tool 要求我們在升級資料庫後升級 time zone 檔案,那麼使用 DBMS_DST PL/SQL package 來升級 RDBMS DST(timezone)版本

關於最新的 latest DST patch 請參考 Note 412160.1.

以下指令碼隨Oracle Database 18c及以上版本一起提供

$ORACLE_HOME/rdbms/admin/utltz_countstats.sql
指令碼使用統計資訊提供在資料庫中TIMESTAMP WITH TIME ZONE資料的數量。 無需重啟。

$ORACLE_HOME/rdbms/admin/utltz_countstar.sql
指令碼使用COUNT(*)查詢每個具有TSTZ列的表來計算資料庫中的TIMESTAMP WITH TIME ZONE資料的數量。 使用DBMS_DST包或utlz_upg_check.sql和utlz_upg_apply.sql指令碼時,此指令碼非常有用。

$ORACLE_HOME/rdbms/admin/utltz_upg_check.sql
時區升級檢查指令碼

?/rdbms/admin/utltz_upg_apply.sql
時區應用指令碼。 警告:此指令碼將重新啟動資料庫並調整時區資料。





About Me

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

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

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( DB寶)上有同步更新

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

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

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

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

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

● DBA寶典今日頭條號地址:

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

● QQ群號: 230161599 、618766405

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

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

● 於 2020-05-01 06:00 ~ 2020-05-30 24:00 在西安完成

● 最新修改時間:2020-05-01 06:00 ~ 2020-05-30 24:00

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

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

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

小麥苗的微店

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

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

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

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

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

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

歡迎與我聯絡

 

 



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

相關文章