記一次資料庫事故-ORA-15038

abstractcyj發表於2020-04-20

        背景:客戶有兩套較大的資料庫(一套為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:

$GI_HOME/bin:>  kfed read <OS ASM device path>

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:

SQL> ALTER DISKGROUP ACFS MOUNT /* asm agent *//* {1:52280:1676} */
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 30 CLOSED MEMBER ONLINE NORMAL 245760 0 0 /dev/<asmdevices>/asm0
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章