記一次資料庫事故-ORA-15038
背景:客戶有兩套較大的資料庫(一套為10T(A資料庫), 一套為20T(B資料庫))想遷移儲存,版本均為12.2.0.1, 採用了ASM管理磁碟,單例項。作業系統分別為linux 6, linux 7。客戶想將B資料庫的儲存遷移到較差的儲存,作為只讀用途。騰空B資料庫的儲存之後,將B資料庫佔用的效能較好的儲存分配給A資料庫,再將A資料庫的資料遷移到新分配的效能較好的儲存。
A資料庫的儲存為較好儲存與較差儲存的混搭,需要遷移兩次(第一次遷移騰出儲存空間,第二次遷移到新回收的儲存)。這裡總共就有3次遷移。因為資料庫較大與備份所需磁碟空間的問題,兩個資料庫均沒有備份。
4月17日,客戶告訴我,領導想要下週二能將兩個庫遷移好(我將將要寫遷移方案)。這樣就完全沒有時間寫方案。同時兩個資料庫需要同時遷移。於是我們負責儲存的同事趕過來,給兩個主機劃好了儲存。我做好了多路徑對映並建立了ASM磁碟組。同時停庫,開始做遷移。
4月18日晚上,A資料庫資料檔案拷貝完成。4月19日調整OCR,日誌檔案,臨時檔案等。在此期間,B資料庫通過RMAN做COPY已經完成了接近16T左右, 還剩餘大致4T資料檔案。A資料庫調整完成後,為了驗證修改正確與否,重啟了作業系統。
作業系統起來之後,發現資料庫起不來,同時新掛載的ASM磁碟組一直是offline。嘗試手動mount, 報錯:
ORA-15032: not all alterations performed
ORA-15038: disk '/dev/mapper/newdisk01' mismatch on 'Time Stamp' with target disk group [2434962992] [2434985720]
ORA-15038: disk '/dev/mapper/newdisk02' mismatch on 'Time Stamp' with target disk group [2434962992] [2434985720]
ORA-15038: disk '/dev/mapper/newdisk03' mismatch on 'Time Stamp' with target disk group [2434962992] [2434985720]
ORA-15038: disk '/dev/mapper/newdisk04' mismatch on 'Time Stamp' with target disk group [2434962992] [2434985720]
ORA-15038: di
通過谷歌,MOS搜尋, 可能是磁碟給其他ASM例項使用過,或者是多路徑配置的問題。嘗試修改asm_diskstring,嘗試手動mount, 這次錯誤變了:
WARNING: Disk Group NEWDATA containing spfile for this instance is not mounted
ORA-15032: not all alterations performed
ORA-15038: disk '/dev/mapper/3600c0ff0003af211de24985e01000000' mismatch on 'Time Stamp' with target disk group [2434985720] [2434962992]
可以看到提示的磁碟變了。這個盤我並未加入ASM磁碟組,為什麼也提示這個。我推測可能與原asm_diskstring='/dev/mapper/*'有關。雖然盤並未加入磁碟組,ASM例項啟動的時候,還是去掃描了磁碟頭。通過kfed, amdu等工具掃描ASM磁碟,都沒有問題。同時, amdu可以讀出資料檔案。這樣就沒有丟失資料的風險(這裡已經被嚇尿了)。
根據MOS文件, Doc ID 2643105.1, 也有類似的症狀,一個沒有加入到ASM磁碟組的磁碟,阻止了磁碟組的正常啟動,同時也是發生在主機重啟之後:
SQL> alter diskgroup ACFS mount;
alter diskgroup ACFS mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "ACFS" cannot be mounted
ORA-15040: diskgroup is incomplete
ORA-15038: disk '/dev/<asmdevices>/asm2' mismatch on 'Time Stamp' with target
disk group [2026420570] [2026683750]
ORA-15038: disk '/dev/<asmdevices>/asm1' mismatch on 'Time Stamp' with target
disk group [2026420570] [2026683750]
ORA-15038: disk '/dev/<asmdevices>/asm0' mismatch on 'Time Stamp' with target
disk group [2026420570] [2026683750]
A Disk at OS level has this diskgroup information in its header incorrectly:
kfdhdb.dskname: ACFS_4 ; 0x028: length=11
kfdhdb.grpname: ACFS ; 0x048: length=6 >>>>>>>>>>>>>>>>>>>Here
kfdhdb.fgname: ACFS_4 ; 0x068: length=11
Disks at OS level should not be updated manually after they have been added to a diskgroup. This will cause diskgroup to fail to mount. In this case, the bad disk was only on 1 node in the cluster. The Diskgroup mounted successfully on the other nodes.
ASM tried to mount the diskgroup with the bad OS disk:
NOTE: cache registered group ACFS number=1 incarn=0x47016be4
NOTE: cache began mount (not first) of group ACFS number=1 incarn=0x47016be4
NOTE: Assigning number (1,4) to disk (/dev/<asmdevices>/asm04) >>>>>>>>>>>>>>>>>>Here
However, only 3 disks at OS level are associated with this diskgroup in the ASM:
0 31 CLOSED MEMBER ONLINE NORMAL 245760 0 0 /dev/<asmdevices>/asm1
0 32 CLOSED MEMBER ONLINE NORMAL 245760 0 0 /dev/<asmdevices>/asm2
The device, /dev/<asmdevices>/asm04, is not listed.
MOS給出的方案是dd掉問題磁碟的磁碟頭。確實,我在dd磁碟頭之後,手動mount磁碟組成功。但是悲劇的是,B資料庫的RMAN Copy指令碼出錯了。
RMAN-03009: 位於 04/19/2020 19:13:28 的 c1 通道上的 backup 命令失敗
ORA-19502: 檔案 "+NEWDATA/TESTDB/DATAFILE/tbs_pdata.697.1038107047", 塊編號 165696 (塊大小=16384) 上出現寫入錯誤
ORA-15079: ASM 檔案已關閉
ORA-15079: ASM 檔案已關閉
ASM日誌:
NOTE: AMDU dump of disk group NEWDATA initiated at /u01/app/grid/diag/asm/+asm/+ASM/trace
Errors in file /u01/app/grid/diag/asm/+asm/+ASM/trace/+ASM_arb0_29651.trc (incident=14697):
ORA-15335: ASM metadata corruption detected in disk group 'NEWDATA'
ORA-15130: diskgroup "NEWDATA" is being dismounted
ORA-15066: offlining disk "NEWDATA_0011" in group "NEWDATA" may result in a data loss
ORA-15196: invalid ASM block header [kfc.c:29757] [endian_kfbh] [2147483659] [1] [0 != 1]
ORA-15196: invalid ASM block header [kfc.c:29757] [endian_kfbh] [2147483659] [1] [0 != 1]
在B資料庫主機上確認,dd掉的那個磁碟正好是B資料庫新加入的那個磁碟組的一個成員。
無法,只得讓儲存工程師將這個盤從A資料庫主機的對映斷開,同時檢查有無其它磁碟對映了多個主機。
B庫的遷移,只得重新建立磁碟組重新開始。
教訓:1. 這種很急,比較複雜的遷移,多半要出事。要學會拒絕。
2. 儲存對映好之後,應當確認兩個主機之間沒有對映同一個盤。
3. 必須做好備份。恢復慢是一碼事,但是至少資料不會丟失,擔驚受怕的程度能少點
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-2687088/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記一次 MySQL 資料庫單表恢復事故處理MySql資料庫
- 【MySQL】記一次線上重大事故:二狗子竟然把線上資料庫刪了!!MySql資料庫
- 記一次資料庫hang住了資料庫
- 記一次資料庫刪表事件資料庫事件
- 記一次mysql資料庫被勒索(中)MySql資料庫
- 記一次mysql資料庫被勒索(下)MySql資料庫
- 記一次刪庫到資料恢復資料恢復
- 記一次 MySQL 資料庫問題排查MySql資料庫
- 由hugepage設定導致的資料庫事故資料庫
- 我身邊的一些資料庫事故資料庫
- 記一次go中map併發引起的事故Go
- 記一次 Redis Cluster 當機引發的事故Redis
- 記一次客戶oracle資料庫崩潰Oracle資料庫
- 記一次資料庫索引引起的當機。。。資料庫索引
- 記一次記憶體溢位導致的生產事故記憶體溢位
- 記go中一次http超時引發的事故GoHTTP
- 一次JVM記憶體問題導致的線上事故JVM記憶體
- 記一次自定義starter引發的線上事故覆盤
- 【Golang+mysql】記一次mysql資料庫遷移(一)GolangMySql資料庫
- 記一次 Golang 資料庫查詢元件的優化。Golang資料庫元件優化
- 記一次開啟資料庫慢原因分析過程資料庫
- 記一次資料庫的分析和優化建議資料庫優化
- 記一次公司倉庫資料庫伺服器死鎖過程資料庫伺服器
- 記一次資料恢復資料恢復
- 記一次資料遷移
- 記一次Lombok的Setter過載方法造成的事故及思考Lombok
- 再記一次 應用伺服器 CPU 暴高事故分析伺服器
- 記一次資料庫恢復-ORA-01194資料庫
- 記一次 oracle 資料庫在當機後的恢復Oracle資料庫
- 記錄一次資料庫CPU被打滿的排查過程資料庫
- 記一次資料庫查詢超時優化問題資料庫優化
- 記一次資料庫高CPU佔用率處理過程資料庫
- ThreadLocal引起的一次線上事故thread
- 一次資料庫HANG處理資料庫
- 記一次RocketMQ消費非順序訊息引起的線上事故MQ
- 資料庫的一次資料恢復過程資料庫資料恢復
- 記一次生產資料庫“意外”重啟的經歷資料庫
- 記一次oracle資料庫redolog全部丟失的恢復Oracle資料庫