DBUA升級至19C NON-CDB
一、前言

由于11G已經被Oracle淘汰,不再更新補丁,官方建議升級到最新穩定版 19C,因此了解下升級方式。
本文將介紹其中一種方式:DBUA
Complete Checklist to Upgrade the Database to 11gr2 Using DBUA(Doc ID 870814.1)
Complete Checklist for Upgrading to Oracle Database 12c Release 1 using DBUA(Doc ID 1516557.1)
Complete Checklist for Upgrading to Oracle Database 12c Release 2 (12.2) using DBUA(Doc ID 2189854.1)
Oracle 18c - Complete Checklist for Upgrading to Oracle Database 18c (18.x) using DBUA(Doc ID 2418576.1)
Oracle 19c - Complete Checklist for Upgrading to Oracle Database 19c (19.x) using DBUA(Doc ID 2545064.1)
參考MOS文檔:Oracle 19c - Complete Checklist for Upgrading to Oracle Database 19c (19.x) using DBUA (Doc ID 2545064.1)
**DBUA也支持靜默方式:Oracle 19c - DBUA In Silent Mode (Doc ID 2548985.1)?? ?**
參考文章:使用DBUA升級 Oracle 11.2.0.4到Oracle 19C的問題記錄
Database Upgrade Assistant (DBUA) provides a graphical user interface to guide you through the upgrade of Oracle Database.
Oracle對主機版本支持:
11GR2:
19C:
Notes:19C對操作系統支持最低要求為Linux7,如果11GR2主機版本為Linux 6,則需要一臺新主機Linux7安裝19C。
升級路線:
Direct Upgrade to 19.x:
19.x
19.x
19.x
Indirect Upgrade to 19.x:
二、環境準備
本次測試盡量按照生產環境升級進行模擬,故而使用2臺主機進行測試:
注意:源庫為生產環境,目標庫為升級環境,需要通過rman的將生產環境實例備份恢復到目標庫,保留生產環境用于失敗回退。
測試環境安裝過程忽略,可參考:
10分鐘!一鍵部署Oracle 11GR2單機
源庫
11GR2:
cd /soft ./OracleShellInstall.sh -i 10.211.55.100 `#Public ip`\ -n dbua11g `# hostname`\ -o lucifer `# oraclesid`\ -op oracle `# oracle user password`\ -b /u01/app `# install basedir`\ -s AL32UTF8 `# characterset`\ -opa 31537677 `# oracle psu number`
目標庫:
11GR2:
cd /soft ./OracleShellInstall.sh -i 10.211.55.100 `#Public ip`\ -n dbua19c `# hostname`\ -o lucifer `# oraclesid`\ -op oracle `# oracle user password`\ -b /u01/app `# install basedir`\ -s AL32UTF8 `# characterset`\ -opa 31537677 `# oracle psu number` \ -w Y
30分鐘!一鍵部署Oracle 19C單機CDB+PDB
19C:
cp /home/oracle/.bash_profile /home/oracle/.bash_profile_11G cd /soft ./OracleShellInstall.sh -i 10.211.55.100 `#Public ip`\ -n dbua19c `# hostname`\ -o lucifer `# oraclesid`\ -op oracle `# oracle user password`\ -b /u01/app `# install basedir`\ -s AL32UTF8 `# characterset`\ -m Y
手動安裝Oracle軟件和補丁:
##解壓替換OPatch包 unzip -o p6880880_190000_Linux-x86-64.zip -d /u01/app/oracle/product/19.3.0/db/ chown -R oracle:oinstall /u01/app/oracle/product/19.3.0/db/OPatch ##解壓DB RU補丁 unzip p32545013_190000_Linux-x86-64.zip chown -R oracle:oinstall 32545013 ##安裝19c Oracle軟件 cd $ORACLE_HOME ./runInstaller -applyRU /soft/32545013/
腳本使用和下載可參考Github:https://github.com/pc-study/InstallOracleshell
安裝結束。
源庫:
目標庫:
11GR2:
19C:
RMAN備份恢復到目標庫11GR2中:
#!/bin/sh source ~/.bash_profile backtime=`date +"20%y%m%d%H%M%S"` rman target / log=/backup/level0_backup_${backtime}.log< 恢復至目標庫11GR2: ##源端生成pfile參數文件 create pfile='/backup/11gpfile.ora' from spfile; ##拷貝備份至目標庫 scp * 10.211.55.100:/backup/ ##恢復至目標端11GR2中 mkdir -p /u01/app/oracle/fast_recovery_area/lucifer mkdir -p /u01/app/oracle/admin/lucifer/adump mkdir -p /oradata/lucifer/ chown -R oracle:oinstall /u01/app/oracle/fast_recovery_area chown -R oracle:oinstall /u01/app/oracle/admin/lucifer/adump chown -R /oradata/lucifer/ ##啟動數據庫實例到nomount狀態 su - oracle source .bash_profile_11G sqlplus / as sysdba startup nomount pfile='/backup/11gpfile.ora' ##rman進行恢復 restore controlfile from '/backup/backlv0_LUCIFER_20210518_1072888737_3_1'; alter database mount; ##注冊備份目錄 catalog start with '/backup/'; ##恢復數據 restore database; ##將源庫開啟到readonly模式 alter system switch logfile; shutdown immediate startup mount alter database open read only ##拷貝歸檔日志到目標端 cd /archivelog scp * 10.211.55.100:/backup ##注冊歸檔日志 catalog start with '/backup/'; recover database; ##打開數據庫 alter database open resetlogs; 至此,測試環境搭建完畢。 三、升級前準備 對源數據庫的要求和建議: 1.確保數據庫組件和對象均為有效。 --檢查無效對象和組件 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 ; BEGIN dbms_preup.invalid_objects; END; --ReBuild sqlplus / as sysdba @$ORACLE_HOME/rdbms/admin/utlrp.sql 2.確保源庫和目標庫補丁均升級為最新(包括APEX)。 Doc ID 556610.1-收集數據庫升級/遷移診斷信息的腳本(dbupgdiag.sql) Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) (Doc ID 556610.1) 3.如果已安裝APEX,則建議先升級源DB中的APEX,然后再升級DB。 下載APEX:?http://www.oracle.com/technetwork/developer-tools/apex/all-archives-099381.html 升級APEX: ##1.解壓APEX包 unzip apex_19.2.zip chown -R oracle:oinstall /soft/apex ##2.查看當前APEX版本 SELECT comp_name, status, version FROM dba_registry WHERE comp_name = 'Oracle Application Express'; --3.2.1.00.12 ##3.進入APEX解壓目錄進行升級 cd /soft/apex sqlplus / as sysdba @apexins.sql SYSAUX SYSAUX TEMP /i/ ##4.升級完后查看APEX版本 --19.2.0.00.18 ##5.編譯無效對象 sqlplus / as sysdba @$ORACLE_HOME/rdbms/admin/utlrp.sql 4.時區應小于或等于目標數據庫時區版本,19C為 32 SELECT version FROM v$timezone_file; --14 5.升級之前,請確保對源數據庫進行有效備份。 run { allocate channel c1 device type disk; allocate channel c2 device type disk; crosscheck backup; crosscheck archivelog all; sql"alter system switch logfile"; delete noprompt expired backup; delete noprompt obsolete device type disk; backup database include current controlfile format '/backup/backlucifer_%d_%T_%t_%s_%p'; backup archivelog all DELETE INPUT; release channel c1; release channel c2; } 6.禁用將在DDL語句之前/之后執行的所有自定義觸發器。 升級后重新啟用。 7.升級數據庫之前,請檢查數據庫服務器升級/降級兼容性列表。 8.開啟日志歸檔功能。 9.對于Oracle RAC,如果使用DBUA升級群集數據庫,則必須將CLUSTER_DATABASE初始化參數設置為TRUE。 ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE; 10.確保在升級數據庫之前運行升級前的檢查腳本,并按照建議進行調整。 How to Download and Run Oracle’s Database Pre-Upgrade Utility (Doc ID 884522.1) su - oracle export Earlier_release_Oracle_home=/u01/app/oracle/product/11.2.0/db export New_release_Oracle_home=/u01/app/oracle/product/19.3.0/db/ $Earlier_release_Oracle_home/jdk/bin/java -jar $New_release_Oracle_home/rdbms/admin/preupgrade.jar TERMINAL TEXT DIR /soft 根據 /soft/preupgrade.log列出的內容進行修復: alter system set processes=1500 scope=spfile; alter system set sga_max_size=4G scope=spfile; alter system set sga_target=2G scope=spfile; shutdown immediate startup select name from v$datafile; select name from v$tempfile; alter tablespace SYSAUX add datafile '/oradata/lucifer/sysaux02.dbf' size 200M autoextend off; alter tablespace SYSTEM add datafile '/oradata/lucifer/system02.dbf' size 600M autoextend off; alter tablespace UNDOTBS1 add datafile '/oradata/lucifer/undotbs02.dbf' size 300M autoextend off; alter tablespace TEMP add tempfile '/oradata/lucifer/temp02.dbf' size 200M autoextend off; sqlplus / as sysdba @?/rdbms/admin/catnoexf.sql 手動修復完后,執行preupgrade_fixups.sql腳本自動修復: cd /soft sqlplus / as sysdba @/soft/preupgrade_fixups.sql Notes:由于沒有物化視圖,所以忽略。 11.在升級之前,應停止源數據庫中的物化視圖。 Doc ID 1406586.1 - How to Handle Materialized Views When You Upgrade or Clone a Database Database Preupgrade tool check list. (Doc ID 2380601.1) SELECT o.name FROM sys.obj$ o, sys.user$ u, sys.sum$ s WHERE o.type# = 42 AND bitand(s.mflags, 8) =8; select owner, mview_name from all_mviews where staleness = 'STALE'; select owner, mview_name from all_mviews where staleness not in ('FRESH', 'STALE', 'UNKNOWN') or compile_state not in ('VALID'); SELECT u.name owner, o.name mview_name FROM sys.obj$ o, sys.user$ u, sys.sum$s WHERE o.type# = 42 AND o.owner# = u.user# and s.obj# = o.obj# and bitand(s.mflags, 8) = 8; 12.禁用計劃的數據庫自定義JOB和crontab計劃任務。 13.升級19.1的COMPATIBLE參數的最小值為“ 11.2.0”,請確保您將COMPATIBLE參數設置為11.2.0或更高。 show parameter compatible --11.2.0.4.0 14.收集數據字典統計信息以減少Oracle數據庫停機時間。 EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; 15.確保當前沒有備份或者恢復的文件。 --Execute below query to check for the status of the backup: SQL> SELECT * FROM v$backup WHERE status != 'NOT ACTIVE'; --Ensure that no files require media recovery: SQL> SELECT * FROM v$recover_file; 16.升級前清空回收站。 PURGE DBA_RECYCLEBIN; 17.使用emremove.sql刪除EM(適用于12.1之前的Oracle數據庫版本)。 ##停止em emctl stop dbconsole ##將以下腳本腳本從新安裝的Oracle主目錄(19c)復制到需要升級的數據庫的Oracle主目錄(11.2) ORACLE_HOME/rdbms/admin/olspreupgrade.sql ORACLE_HOME/rdbms/admin/emremove.sql ORACLE_HOME/olap/admin/catnoamd.sql ##執行腳本 sqlplus / as sysdba @?/rdbms/admin/emremove.sql 18.取消對OLAP目錄(OLAP AMD)的支持(適用于12.1之前的Oracle數據庫版本)。 ##執行腳本 sqlplus / as sysdba @?/rdbms/admin/catnoamd.sql 19.檢查用戶當前不區分大小寫的密碼版本。 --如果有10g版本,建議您參考Oracle文檔來修復10g版本,如果不這樣做,升級完成后具有LOCKED的用戶帳戶。 SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS; --查看隱含參數_optimizer_cartesian_enabled,確保設置為TRUE SELECT name,description from SYS.V$PARAMETER WHERE name LIKE '\_%' ESCAPE '\'; alter system set "_optimizer_cartesian_enabled"=TRUE; 20.PFILE參數文件去除所有隱含參數和event事件。 對目標數據庫的要求和建議: 1.驗證您的操作系統/平臺是否通過了19.x版本的認證。 2.在新的Oracle_Home中下載并安裝Oracle 19c(19,x),并確保沒有relink錯誤。 3.確保從My Oracle Support(MOS)下載并安裝最新的可用RU或RUR。 4.確保將ORACLE_HOME,PATH,LD_LIBRARY_PATH,LIBPATH等設置為19.x目標主目錄。 5.查看文章“在將Oracle GI和DB升級到19c或降級到以前的版本(文檔ID 2539751.1)之前要應用的補丁”中給出的補丁建議。 四、開始DBUA升級 因為19C已安裝RU補丁,升級完后README的腳本還需要跑一遍。 sqlplus / as sysdba @?/rdbms/admin/utlrp.sql 環境變量切換到19C并運行DBUA: echo $ORACLE_HOME /u01/app/oracle/product/19.3.0/db # dbua 如果按照上述步驟之后出現這種情況,通常是因為RMAN恢復的數據庫實例未注冊到/etc/oratab中,手動添加: cat < 添加后,點擊刷新即可。 選中需要升級的數據庫實例,點擊下一步。 以上警告可以忽略,點擊下一步。 點擊下一步。 這里由于已經有RMAN備份,故而選擇RMAN Backup,點擊下一步。 提前創建19C監聽,端口為1522,升級完之后記得改回1521,點擊下一步。 不安裝EM,點擊下一步。 點擊FINISH。 由于RMAN恢復的實例,不存在該目錄,需要手動創建并授權: mkdir -p /u01/app/oracle/admin/lucifer/dpdump chown -R oracle:oinstall /u01/app/oracle/admin/lucifer/dpdump 坑爹,需要重新啟動DBUA進行升級。 成功進入,等待自動升級完成。 執行 /soft/postupgrade_fixups.sql腳本: sqlplus / as sysdb @/soft/postupgrade_fixups.sql 更新后檢查和修復: 1、運行dbupgdiag.sql檢查19C數據庫情況: Doc ID 556610.1-收集數據庫升級/遷移診斷信息的腳本(dbupgdiag.sql) Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) (Doc ID 556610.1) chown -R oracle:oinstall /soft/dbupgdiag.sql su - oracle cd /soft sqlplus / as sysdba @dbupgdiag.sql --1.填寫輸出目錄:/soft 2、編譯無效對象 ##檢查無效對象 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 ; ##編譯無效對象 sqlplus / as sysdba @?/rdbms/admin/utlrp.sql 3.刪除原11GR2環境相關文件 rm -rf /home/oracle/.bash_profile_11G rm -rf /u01/app/oracle/product/11.2.0/db ##關閉11G監聽 ps -ef|grep tns kill -9 $spid 4.修改19C監聽端口號為1521 ##修改LOCAL_LISTENER alter system reset local_listener; shutdown immediate startup ##Notes:如果不將LOCAL_LISTENER設置為空,動態監聽無法注冊。 lsnrctl stop cd $TNS_ADMIN ##修改listener.ora文件: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dbua19c)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) lsnrctl start 5.配置sqlnet.ora cd $TNS_ADMIN cat < 6.檢查所有組件 select substr(comp_id,1,15) comp_id,substr(comp_name,1,30) comp_name,substr(version,1,10) version,status from dba_registry order by modified; 7.修改COMPATIBLE參數 ALTER SYSTEM SET COMPATIBLE="19.0.0" SCOPE=SPFILE; shutdown immediate startup Oracle 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。