Oracle補丁就該這麼打

2021-10-09 11:22:30 字數 4139 閱讀 1713

oracle補丁就該這麼打

[關於備份

]軟體的備份:備份重於一切,這是我們做變更的基礎,一定要給自己留後路。在做補丁更新前,我們必須需對oracle軟體進行備份(gi和db)。

以下給出命令示例:

–關閉集群crs,各個節點依次關閉

su – oracle

srvctl stop database -d ***x ==>手工停所有節點例項

su - root

crsctl stop crs

crsctl start crs ==》該步驟選做,驗證crs能否正常啟動

crsctl stop crs

ps -ef | grep grid ==> 有程序kill掉

ps -ef | grep oracle ==> 有程序kill掉

db資訊的備份

使用grid使用者檢查當前gi的補丁情況,監聽狀態

crsctl status res -t > /home/grid/crs.txt

$oracle_home/opatch/opatch lsinventory >> /home/grid/grid_patch.txt

$oracle_home/opatch/opatch lsinv -detail -oh $oracle_home >> /home/grid/grid_patch.txt

$oracle_home/opatch/opatch lspatches >> /home/grid/grid_patch.txt

lsnrctl status >> /home/grid/crs.txt

使用oracle使用者檢查當前oracle的補丁情況

su - oracle

$oracle_home/opatch/opatch lsinventory > /home/oracle/oracle_patch.txt

$oracle_home/opatch/opatch lsinv -detail -oh $oracle_home >> /home/oracle/oracle_patch.txt

$oracle_home/opatch/opatch lspatches >> /home/oracle/oracle_patch.txt

使用oracle使用者,在其中乙個節點登入到所有例項當中進行查詢,記錄補丁、無效物件相關資訊

sqlplus / as sysdba

spool /home/oracle/db0813.txt

set lines 200 pages 2000;

show parameter name;

col comp_id for a20;

col version for a20;

col status for a30;

select comp_id,version,status from dba_registry;

select owner,object_type,object_name from dba_objects where status<>『valid』;

select patch_id,patch_uid,status,action_time from dba_registry_sqlpatch;

spool off

[

關於optach工具

]主要呼叫該工具opatchauto和datapatch這2個命令。簡單的可以理解為opatchauto更新軟體相關檔案,datapatch用於更新資料庫字典(dba_registry_sqlpatch)。

詳細的資訊我們可以參考如下文章:

datapatch:database 12c or later post patch sql automation (doc id 1585822.1)

datapatchuser guide (doc id 2680521.1)

[關於readme

]下面提取今年7月份發布的19.8的gi補丁集的readme中的關鍵主題來分析下:

adg是否可以先更打

readme中會有明確的字眼提示adg是否可以先更打,如下圖:

補丁集資訊

下圖中有4個patchnumber,其中gi_home都要更打,db_home只要更打2個。從這裡大致應該就能估算出打gi補丁的時間要比db補丁多一半,可以估算出要停機的時間。

opatch 工具資訊

readme中會有明確的字眼要求opatch的最低版本,如下圖:

補丁衝突檢測

readme中給出具體命令,如下圖,我們補全拿到環境中執行就行。

我們主要關注跑出來的結果,如果提示成功沒報錯,那這一環節就可以不做處理。如果有報錯,那就需要提前準備解決方案,比如下面這個示例:

注:執行該命令對現有環境不影響,需要提前執行,以便有報錯提前準備解決方案,避免和維護視窗時間衝突。

空間檢測

提前檢查空間是否足夠,如下圖,我們補全拿到環境中執行就行。

衝突檢查解決方案

這裡的衝突可以是小補丁和小補丁之間的衝突,也可以是小補丁和補丁集之間的衝突。有2個解決思路,乙個是提sr申請衝突小補丁的merge補丁,這個等待時間可能比較久。另外乙個思路,就是更打較新的補丁集,一般最新發布的補丁集都會包含之前小補丁,那這塊就需要拿補丁集去確認了。

小補丁和補丁集之間的衝突:這塊處理起來比較方便,比如說當前安裝的是4月份補丁集,我們現在要更打到7月份的補丁集。那現在可以將4月份補丁集上的小補丁先回滾掉,待7月份的補丁集更打完成後,再更打基於7月份補丁集的這個小補丁。

opatchauto

使用opatchauto命令去更打補丁,一般gi和db都分開更打。可以根據readme中提供命令進行補全(如下圖),整合出適合自己環境的命令。

以下給出命令示例:

gi各個節點依次執行打補丁命令

loading modified sql files into the database

關於資料字典更新操作,根據補丁的readme中提供的命令補全即可:

下圖是補丁集更打後的操作:

下圖是ojvm補丁更打後的操作:

以下命令是補丁集+ojvm的資料字典更新(也是說只跑一次datapatch)的示例(adg端不跑),更參考:

####loading modified sql files into the database

sqlplus /nolog

sql> connect / as sysdba

sql> startup nomount

sql> alter system set cluster_database=false scope=spfile;

sql> shutdown immediate

sqlplus /nolog

sql> connect / as sysdba

sql> startup upgrade

sql> exit

$ cd $oracle_home/opatch

$ ./datapatch -verbose

sqlplus /nolog

sql> connect / as sysdba

sql> alter system set cluster_database=true scope=spfile;

sql> shutdown immedite

$srvctl start database -db ***

[關於troubleshotting

]其實做好前期準備工作,基本是成功的機率就很高了,如果還有報錯,可能就是遇到bug或者其他問題了。那就只能臨時去找解決方案了,如果最終拖的時間比較長,維護視窗時間有限,最後也就只能回退了。分享2個簡單報錯示例:下圖是乙個程序占用報錯的示例,可以通過fuser命令來確認占用程序,kill掉就行:

下圖是乙個節點間互信問題的報錯示例:[總結

]做好打補丁前準備工作,工作量就已完成了大半。這裡粗略做以下總結:

備份重於一切,一定要對軟體進行備份。

集群間通訊檢查,確認命令為:crsctl check cluster -all

grid、oracle節點間互信檢查

補丁包許可權檢查、opatch版本檢查、補丁衝突檢查

臨時問題解決要依託第一案場「證據」順藤摸瓜

《Linux就該這麼學》

本書是由全國多名紅帽架構師 rhca 基於最新linux系統共同編寫的高質量linux技術自學教程,極其適合用於linux技術入門教程或講課輔助教材,目前是國內最值得去讀的linux教材,也是最有價值的linux實驗手冊。章節包括有 第0章 咱們先來談談學習方法和紅帽系統。第1章 部署虛擬環境安裝l...

Linux就該這麼學

用於集中儲存linux使用者的資料資訊,如賬號密碼 使用者組 hosts檔案 services等等 etc passwd 提供使用者帳號 uid gid 家目錄所在 shell 等等 etc group 提供群組資料以及 gid 的對應,還有該群組的加入人員 etc hosts 主機名稱與ip的對應...

tensorflow就該這麼學 3

一 張量及操作 1 張量介紹 1 tensor型別 dt float dt double dt int64 dt int32 dt int16 dt int8 dt string dt bool 2 rank 階 維度 a 1,2,3 4,5,6 7,8,9 表示為2階,看幾層中括號就行 3 sha...