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...