記錄一次驚心動魄的誤操作(Oracle)
事件回顧:
某月週五晚上,馬上下班了,突然手機連續收到多條告警簡訊,提示我管理的其中一套資料庫的DG備庫無法連線。 突然想到昨天晚上對DG備庫擴容了+DATA磁碟組,本來預計新增30塊100G大小的新盤,擴容3000G空間,但是由於粗心大意,錯誤的多新增了5塊舊盤,一共新增了35塊盤。 新增完成後檢查磁碟容量發現多了5塊盤,資料已經在動態平衡了,第一時間想到這5塊舊盤有沒有問題,檢視ASM日誌,DB日誌沒有發現錯誤,第二天早上檢查資料已經動態平衡結束了,DB日誌沒發現問題。 第一時間連線DG備庫,檢視資料庫例項狀態為mount狀態,檢視DB日誌,顯示ASM磁碟頭損壞,多個資料檔案出現大量壞塊,+DATA磁碟組自動umount,無法掛載。
環境說明:
OS:AIX 7.1 DB:Oracle 11204 RAC + DG(RAC)
事件原因:
發現昨晚多擴容的5塊磁碟,居然是歸檔所使用的/arch 檔案系統盤,DG備庫的歸檔並沒有儲存在ASM儲存中,而是使用的本地檔案系統,最終導致歸檔資料和+DATA磁碟組資料重複寫入,資料大面積損壞,資料庫當機。 之前錯誤的認為已經在使用的磁碟,不會在v$asm_disk中header_status欄位顯示CANDIDATE,所以之前即使發現了擴容+DATA多加了5塊舊盤,也沒有想到會是檔案系統已經在使用的磁碟,單純的認為是5塊舊的新盤。 由於主庫生成歸檔的頻率較低,同時+DATA磁碟組有很多磁碟,所以DG備庫堅持了20多小時才當機。
解決方案:
由於多個資料檔案出現大量壞塊,ASM磁碟頭損壞,針對單個檔案進行恢復難度較大,時間較長,所以採取的辦法是重建DG備庫。
重建DG備庫的過程如下:
一:調整主庫log_archive_dest_state_2引數,由enable改成defer 。
alter system set log_archive_dest_state_2=defer;
二:將備庫/arch 檔案系統對應的5塊歸檔盤改成+ASM磁碟組
2.1 清空/arch對應的vg,lv,檔案系統資訊
2.2 建立新的+ARCH磁碟組,新增這5塊磁碟
三:重建備庫+DATA磁碟組資料
刪除+DATA磁碟組,新建+DATA磁碟組,新增磁碟。
注意:刪除磁碟組之前,先將引數檔案拷貝出來,便於DG備庫的搭建。
create pfile='/tmp/xxxpfile.ora' from spfile;
四:修改備庫pfile引數檔案,修改備庫歸檔位置
將歸檔位置由/arch改成+ARCH
五:啟動備庫為mount狀態,恢復DG同步關係
此時備庫+ARCH磁碟組可以正常接收主庫傳來的歸檔檔案。
六:禁用備庫刪除歸檔計劃
為了避免在備庫恢復期間歸檔完整,先禁用備庫刪除歸檔計劃
七:恢復主庫最新的控制檔案,傳到備庫端,備庫重新啟動到mount狀態
八:主庫進行全備
主庫全備大小2T,備份時間約2小時。
九:恢復DG備庫
備庫通過備份軟體進行rman全庫恢復。
restore和recover指定到全備份完成前最後一個SCN號。
主備庫物理位置距離約50KM,恢復了2T多資料,耗時6個多小時。
十:全庫恢復完成後,恢復主庫最新的控制檔案,傳到備庫端,備庫重新啟動到mount狀態
十一:備庫啟動mrp程式,應用最新的日誌
十二:備庫取消mrp,啟動open狀態,再次啟動mrp程式
十三:檢查redo log file和standby log file大小和狀態
十四:修改備庫spfile位置
之前spfile在另一個小磁碟組裡,為了方便管理,將spfile遷移到了另一個磁碟組內
14.1 修改pfile中記錄的spfile位置
14.2 修改OCR中記錄的spfile位置
srvctl config database -d cjcdb srvctl modify database -d cjcdb -p '+DATA/cjcdb/spfile/spfilecjcdb.ora'
十五:註冊新磁碟組位置+ARCH
srvctl註冊新歸檔磁碟組位置
srvctl config database -d cjcdb srvctl modify database -db cjcdb -diskgroup "DATA,ARCH,OTHER"
十六:清理舊磁碟組資訊
舊的磁碟組已經刪除了,清空資訊
$ srvctl disable diskgroup -diskgroup dgroup1 -node "mynode1,mynode2" $ srvctl remove diskgroup -diskgroup diskgroup_name -force
十七:crsctl檢視例項狀態不對,手動重新整理例項狀態
shutdown immediate startup srvctl stop database -d dbname -o immediate srvctl start instance -d dbname -i instance_name1 -o open srvctl start database -d dbname -o open
十八:啟用修改並測試自動刪除歸檔計劃
18.1 自動刪除指令碼里歸檔目錄由/arch改成了+ARCH
十九:resize tempfile (20M 到 30G)
備庫建立完成後,tempfile檔案大小隻有20M,修改為和主庫保持一致
select * from dba_temp_files; alter database tempfile '' resize 30G;
二十:啟動備庫監控
備庫出問題後,定位到原因後,解決問題的同時,臨時將備庫監控取消了,待備庫完成恢復後,在啟動對備庫的監控。
反思:
雖然此次誤操作發生在DG備庫,沒有對生產系統造成任何影響,但由於主庫是一套非常核心的資料庫,如果此次事件發生在主庫而不是備庫,後果會非常嚴重。 出現此次事故根本原因是對備庫操作不夠重視,從而導致關鍵性操作粗心大意。 根據墨菲定律,凡事如果有出錯的可能,在將來的某一天一定會出錯。 所以要做出改變,改變心態,改變安全意識,改變操作規範等。 記錄於此,引以為戒。
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!! !
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2739742/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《陰暗森林》:一條驚心動魄的歸家之路
- 伺服器神秘掛起:一場驚心動魄的核心探案伺服器
- 一次JVM FullGC的背後,竟隱藏著驚心動魄的線上生產事故!【石杉的架構筆記】JVMGC架構筆記
- 回顧2022加密市場!驚心動魄之下但尚存溫暖曙光?加密
- 記一次危險的操作——誤刪/usr/bin目錄
- 《星球大戰 絕地:隕落的武士團》GI 8.75 分:驚心動魄的冒險之旅
- 記錄一次誤刪操作,分享使用 Git 撤銷修改Git
- 記錄一次慘痛的“update”操作
- 記錄一次 Online DDL 操作
- JS錯誤記錄 – dom操作 – 排序JS排序
- 記錄一次一次監聽無法連線的錯誤
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- update誤操作後 通過undo記錄的scn找回原紀錄
- 記錄一次homestead意外關閉導致的錯誤
- 記一次mysql生產誤刪表搶救操作MySql
- 記錄一次錯誤的使用當前時間new Date()引發的錯誤
- 貪心模式記錄模式
- oracle truncate table recover(oracle 如何拯救誤操作truncate的表)Oracle
- 記錄一次電動維修遇到的坑
- 週末生產事故!一次心驚肉跳的伺服器入侵排查....伺服器
- 記錄一次數字和字串比較時候犯的錯誤字串
- 「貪心」做題記錄
- 記錄一次Anconda無法啟動的修復記錄:There is an instance of Anconda Navigator already running
- 對HashMap的一次記錄HashMap
- linux操作記錄Linux
- 記一次驚魂的Win10啟動卡死問題恢復過程Win10
- 【docker】記錄一次nginx啟動失敗的檢測DockerNginx
- 記錄 Laravel5.6 中使用 Notification 傳送郵件的一次錯誤Laravel
- SpringMVC錯誤記錄SpringMVC
- 記一次自己的蠢幣操作
- 記錄一次線上資料圖源本地化操作的過程
- 記錄一次Oracle 11.2.0.4 RAC異地恢復到單例項Oracle單例
- 記錄一次gcc的編譯GC編譯
- 記錄一下oracle 19c的叢集節點移除、新增操作Oracle
- 記錄一次測開面試題記錄面試題
- linux常用操作記錄Linux
- mongodb聚合操作記錄MongoDB
- 筆記:記錄一次面試筆記面試