oracle 11.2.0.4 ADG+linux+補丁升級11.2.0.4.181016(28204707)


一        補丁升級實施方案

1.1        總體步驟

1.主庫禁用日志傳送到備庫,備庫停止MRP進程

2.關閉備庫應用補丁,但不執行腳本(catpatch.sql等),啟動到mount,不啟用日志恢復

3.關閉主庫應用補丁,執行腳本(run catpatch/catbundle/catcpu等)

4.啟動主庫,重新開啟日志傳送到備庫

5.備庫開啟實時應用

1.2        上傳補丁至主備上並解壓

上傳補丁包p28204707_112040_Linux-x86-64.zip至服務器/oracle/software上

unzip p28204707_112040_Linux-x86-64.zip

1.3        停止主庫日志傳輸

#停止DG同步,主庫停止傳輸日志

SQL> show parameter log_archive_dest_state_2

SQL> alter system set log_archive_dest_state_2=defer scope=both;

1.4        備份主備庫數據庫軟件

#備份主庫oracle及oraInventory目錄

$ echo $ORACLE_HOME

/oracle/app/oracle/product/11.2.0/db_1

 

tar -cvf /oracle/db_1`date+%y%m%d`.tar /oracle/app/oracle/product/11.2.0/db_1

 

cat /oracle/oraInventory/oraInst.loc

inventory_loc=/oracle/oraInventory

inst_group=oinstall

 

tar -cvf /oracle/oraInventory`date+%y%m%d`.tar /oracle/oraInventory

 

#備庫亦是如此

1.5        更新Opatch

#查看主備數據庫當前Opatch版本

$ $ORACLE_HOME/OPatch/opatch version

OPatch Version: 11.2.0.3.4

 

OPatch succeeded.

 

#官方建議Opacth至少11.2.0.3.6及以上版本,目前數據庫的Opatch為11.2.0.3.4,進行更新,上傳p6880880_112000_Linux-x86-64.zip至/oracle/software,解壓並更新Opatch

upzip p6880880_112000_Linux-x86-64.zip

mv /oracle/app/oracle/product/11.2.0/db_1/OPatch /oracle/app/oracle/product/11.2.0/db_1/Opatch.bak2018

mv /oracle/software/OPacth /oracle/app/oracle/product/11.2.0/db_1

 

$ $ORACLE_HOME/OPatch/opatch version

OPatch Version: 11.2.0.3.20

 

OPatch succeeded.

1.6        關閉備庫應用補丁不執行相關腳本

1.6.1        校驗補丁沖突

unzip p28204707_112040_Linux-x86-64.zip

cd 28204707

opatch prereq CheckConflictAgainstOHWithDetail -ph ./

1.6.2        關閉備庫數據庫服務

#停止備庫MRP進程

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

 

#停止監聽

$lsnrctl status

$lsnrctl stop

 

#檢查監聽狀態

$lsnrctl status

$ps -ef|grep tns

 

#停止數據庫

SQL> shutdown immediate;

 

#檢查數據庫告警日志

$tail -1000f /oracle/app/oracle/diag/rdbms/cdcadg/cdcadg/trace/alert_cdcdg.log

1.6.3        檢查oracle active進程,避免數據庫psu應用失敗

su – oracle

$ $ORACLE_HOME/OPatch/opatch prereq CheckActiveFilesAndExecutables -phBaseDir /oracle/software/28204707

 

注意:如果存在active.so的進程,則通過下面的方法將其kill掉,如:

fuser $ORACLE_HOME/歷史n/oracle

 

ps -ef|grep pid(上一步獲得的進程號,確認是什么進程)

 

kill -9 pid

 

然后再次執行active.so的檢查,直至沒有活動的進程。

1.6.4        補丁應用

cd 28204707

$ $ORACLE_HOME/OPatch/opatch apply

1.6.5        啟動數據庫服務

#啟動數據庫到mount狀態

SQL> startup mount

 

#啟動監聽

$ lsnrctl start

$ lsnrctl status

 

#檢查數據庫告警日志

$ tail -1000f /oracle/app/oracle/diag/rdbms/cdc/cdc/trace/alert_cdc.log

1.7        關閉主庫應用補丁並執行相關腳本

1.7.1        校驗補丁沖突

unzip p28204707_112040_Linux-x86-64.zip

cd 28204707

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./

1.7.2        檢查數據庫補丁信息,組件狀態及無效對象信息

#組件信息

col comp_id for a10

col comp_name for a40

col version for a20

col status for a7

select comp_id, comp_name, version, status from dba_registry;

 

#無效對象

col owner for a15

col object_name for a35

col object_type for a20

col status for a10

select owner,object_name,object_type,status from dba_objects where status='INVALID'

order by owner;

 

#補丁信息

col action format a10

col version format a25

col comments format a25

col action_time format a20

alter session set nls_timestamp_format = "yyy-mm-dd hh24:mi:ss";

select ACTION_TIME,ACTION,VERSION,COMMENTS from dba_registry_history;

1.7.3        檢查oracle active進程,避免數據庫psu應用失敗

su – oracle

$ $ORACLE_HOME/OPatch/opatch prereq CheckActiveFilesAndExecutables -phBaseDir /oracle/software/28204707

 

注意:如果存在active.so的進程,則通過下面的方法將其kill掉,如:

fuser $ORACLE_HOME/歷史n/oracle

 

ps -ef|grep pid(上一步獲得的進程號,確認是什么進程)

 

kill -9 pid

 

然后再次執行active.so的檢查,直至沒有活動的進程。

1.7.4        關閉主庫數據庫服務

#停止監聽

$lsnrctl status

$lsnrctl stop

 

#檢查監聽狀態

$lsnrctl status

$ps -ef|grep tns

 

#檢查剩余會話連接

$ ps -ef |grep LOCAL=NO | wc -l

 

#殺掉正在連接的會話

$ps -ef |grep LOCAL=NO |awk '{print $2}' |xargs kill -9

 

#停止數據庫

SQL> shutdown immediate;

 

#檢查數據庫告警日志

$tail -1000f /oracle/app/oracle/diag/rdbms/cdc/cdc/trace/alert_cdc.log

1.7.5        數據庫軟件補丁應用

cd 28204707

$ORACLE_HOM/OPatch/opatch apply

1.7.6        進入數據庫應用PSU升級腳本

#刷新數據字典

sqlplus /nolog

sql> connect / as sysdba

sql> startup

sql> @?/rdbms/admin/catbundle.sql psu apply

 

#無效對象修復

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

sql> quit

1.8        啟動數據庫服務並開啟日志傳輸

$lsnrctl start

$lsnrctl status

 

SQL> alter system set log_archive_dest_state_2=enable scope=both;

 

SQL>show parameter log_archive_dest_state_2

1.9        開啟備庫日志恢復

SQL> alter database recover managed standby database disconnect;

 

二        *實施完成后的驗證

2.1        檢查主備庫補丁信息,組件狀態及無效對象信息

#檢查數據庫軟件補丁應用情況

$ORACLE_HOME/OPatch/opatch lsinventory

 

#組件信息

col comp_id for a10

col comp_name for a40

col version for a20

col status for a7

select comp_id, comp_name, version, status from dba_registry;

 

#無效對象

col owner for a15

col object_name for a35

col object_type for a20

col status for a10

select owner,object_name,object_type,status from dba_objects where status='INVALID'

order by owner;

 

#補丁信息

col action format a10

col version format a25

col comments format a25

col action_time format a20

alter session set nls_timestamp_format = "yyy-mm-dd hh24:mi:ss";

select ACTION_TIME,ACTION,VERSION,COMMENTS from dba_registry_history;

 

2.2        確認DataGuard正常

#主庫檢查

set line 9999

col  DEST_NAME format a20

col DESTINATION format a15

col GAP_STATUS format a10

col DB_UNIQUE_NAME format a15

col error format a10

col APPLIED_SCN for 999999999999999

SELECT al.thread#,

       ads.dest_id,

       ads.DEST_NAME,

       (SELECT ads.TYPE || ' ' || ad.TARGET

          FROM v$archive_dest AD

         WHERE AD.DEST_ID = ADS.DEST_ID) TARGET,

       ADS.DATABASE_MODE,

       ads.STATUS,

       ads.error,

       ads.RECOVERY_MODE,

       ads.DB_UNIQUE_NAME,

       ads.DESTINATION,

       ads.GAP_STATUS,

       (SELECT MAX(sequence#) FROM v$log na WHERE na.thread# = al.thread#) Current_Seq#,

       MAX(sequence#) Last_Archived,

       max(CASE

             WHEN al.APPLIED = 'YES' AND ads.TYPE <> 'LOCAL' THEN

              al.sequence#

           end) APPLIED_SEQ#,

       (SELECT ad.applied_scn

          FROM v$archive_dest AD

         WHERE AD.DEST_ID = ADS.DEST_ID) applied_scn

  FROM (SELECT *

          FROM v$archived_log V

         WHERE V.resetlogs_change# =

               (SELECT d.RESETLOGS_CHANGE# FROM v$database d)) al,

       v$archive_dest_status ads

 WHERE al.dest_id(+) = ads.dest_id

   AND ads.STATUS != 'INACTIVE'

 GROUP BY al.thread#,

          ads.dest_id,

          ads.DEST_NAME,

          ads.STATUS,

          ads.error,

          ads.TYPE,

          ADS.DATABASE_MODE,

          ads.RECOVERY_MODE,

          ads.DB_UNIQUE_NAME,

          ads.DESTINATION,

          ads.GAP_STATUS

 ORDER BY al.thread#, ads.dest_id;

三        *回退措施

遇到風險:數據庫補丁應用失敗

回退措施:補丁回滾

#確認腳本的存在

$ORACLE_HOME/rdbms/admin/catbundle_PSU_<database SID>_ROLLBACK.sql

 

#關閉數據庫和監聽

$lsnrctl stop

SQL> shut immediate

 

#回滾補丁

opatch rollback -id 28204707

 

#啟動數據庫並應用腳本

cd $ORACLE_HOME/rdbms/admin

sqlplus /nolog

SQL> CONNECT / AS SYSDBA

SQL> STARTUP

SQL> @?/rdbms/admin/catbundle_PSU_<database SID>_ROLLBACK.sql

SQL> QUIT

  

四        參考文獻

How do you apply a Patchset,PSU or CPU in a Data Guard Physical Standby configuration (文檔 ID 278641.1)

Patch 28204707 - DATABASE PATCH SET UPDATE 11.2.0.4.181016 ReadMe.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM