成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊數據庫的IO丟失問題

數據庫 其他數據庫
一般來說這些處置手段都是作為最后的處置手段,如果數據庫存在備份,而且備份中丟失的數據在合理的范圍內,通過備份恢復數據庫可能是更好的做法。

昨天晚上一個朋友打電話咨詢一個Oracle數據庫無法啟動的問題,是因為之前出現的異常宕機引發的。這是一個因為數據庫IO丟失引發的數據庫不一致問題,Oracle在數據庫啟動的 時候發現了一些比較嚴重的不一致問題,就會無法打開數據庫。在數據庫原理中,數據庫通過Write Ahead Log(WAL)機制來確保數據庫在實例宕機之后不會出現數據的不一致問題,不會丟失已經提交過的事務。從基礎原理上,似乎數據庫能夠自己保證自己的一致性,為什么還會出現類似的問題呢?

實際上這種設計是有一個前提的,那就是每個已經寫盤的IO,都真實地物理落盤了。這是數據庫的數據永遠保持一致性的前提,如果這個前提出現了漏洞,那么這個理論上的永遠一致性就不存在了。

事實上,數據庫的IO鏈路很長,操作系統、RAID卡、HBA卡、SAN交換機緩沖區、集中式存儲機頭、集中式存儲的寫緩沖、磁盤的寫緩沖、磁盤,等等。我可能還沒有羅列完整,因為在不同的環境中,這個鏈路還會略微不同。在很多層面,IO都會被優化,因此真實的IO落盤并非和我們想象的一樣。如果在云環境中,這個IO路徑就更為復雜了。

當IO在這些環節中的某個緩沖中丟失了,那么數據庫的底層就會丟失IO了,這個IO丟失會引發一系列的數據不一致。比如一個8K的數據塊,前半部分已經寫盤,但是后半部分的寫IO丟失了,這樣就會出現“塊斷裂”,一個數據塊的數據不一致了。

MySQL等數據庫使用DOUBLE WRITE BUFFER來解決這個問題,PG則采用FULL PAGE WRITE LOG的機制。Oracle則比較粗獷,完全不管這個問題,讓底層存儲系統來確保寫IO的原子性。究其原因,Oracle自從出生開始,就是和高端硬件關聯的,和MySQL/PG這些草根的設計思路完全不同。

數據庫面對復雜的底層環境,所以無法確保其基礎理論的實現,這個可能會出乎一些朋友的意料。Michael Stonebraker老爺子要搞DBOS,其目的是為數據庫提供一個完全以數據庫的設計理念為基礎的底層環境。這個理想很宏大,實現起來恐怕也是困難重重的。因為這些違背數據庫設計理念的設計都是為了優化。一個通用的DBOS可能無法適應不同的數據庫產品的通用優化需求。DBOS作為一個數據庫SAAS服務的基礎平臺是可行的,成為一個通用的數據庫底座任重道遠。

當底層IO出現丟失的時候,Oracle處置起來是最為麻煩的,我想很多Oracle的老DBA也都因此賺了不少錢,昨晚我那個朋友就因為幫人打開了一個出現ORA-600[2662]的數據庫而賺了1萬塊錢的外快。這是因為Oracle的控制文件、REDO、UNDO、數據文件一旦因為IO丟失而出現不一致會引發數據庫無法打開的問題。

ORA-01113、ORA-600[2662]、ORA-600[3020]、ORA-600 [4000]、ORA-600[4193]、ORA-600[4194]等錯誤的出現往往就與這些有關。20年前我在ORACLEFANS網站上也發過不少處置類似問題的文章,在微信公眾號里我也寫過一篇《如何強制打開無法啟動的Oracle數據庫》,里面簡單地介紹了一些處理方法。    

如果出現ORA-600[2662],整個處理過程會麻煩一些,因為數據庫啟動的時候發現某個數據文件的SCN已經高于數據庫的當前SCN。早期我們可以通過adjust_scn事件來往前推進數據庫的當前SCN,從而解決這個問題。Oracle 11.2.0.2.6以后,adjust_scn等待事件被廢棄了,如果遇到這種情況,用oradebug 修改內存中的CURRENT SCN也可以起作用。從Oracle 12c開始廢棄了這種做法,Oracle又提供了一個EVENT 21307096來解決這個問題(詳情請參考《Force Open Database after applying Patch 21307096 (Doc ID 2674196.1)》)。

實際上Oracle數據庫IO丟失在SYSTEM表空間中才是最麻煩的,因為在SYSTEM表空間中存在bootstrap objects,還有一個system rollback segment。

如果這些對象丟失了IO,那么就需要使用BBED這樣的工具去修復才能避開問題,強行打開數據庫。強行打開了丟失IO的數據庫之后,大部分數據可以順利導出,如果某些表上還是存在壞塊,需要通過跳過壞塊的技術來導出表中的數據。一般來說這個數據庫已經不能作為生產庫使用了,導出數據后重建數據庫是最好的做法。

一般來說這些處置手段都是作為最后的處置手段,如果數據庫存在備份,而且備份中丟失的數據在合理的范圍內,通過備份恢復數據庫可能是更好的做法。遇到這樣問題的客戶往往是比較慷慨的,因此DBA掌握這些技術,還是有價值的。    

責任編輯:武曉燕 來源: 白鱔的洞穴
相關推薦

2011-05-24 10:26:12

Oracle數據庫日志文件

2022-11-08 08:11:52

PG數據庫防誤

2023-02-01 13:22:00

數據庫表連接SQL

2023-01-06 08:31:53

數據庫基準測試

2024-10-12 15:29:56

2023-01-26 00:18:53

云原生數據庫云資源

2021-10-28 19:28:04

數據庫開發Spring

2022-09-23 07:44:48

時序數據庫物聯網

2022-09-21 07:30:12

數據庫勒索病毒企業

2023-10-11 08:09:53

事務隔離級別

2011-06-01 09:42:53

數據庫IO

2011-08-25 17:36:23

并發數據庫丟失修改問題

2020-03-27 16:05:49

數據庫數據MySQL

2019-02-12 11:45:05

Java數據庫開發

2024-09-13 08:59:20

2018-07-16 11:16:59

MYSQL磁盤IO數據庫

2009-02-01 13:33:13

Oracle數據庫配置

2015-10-28 17:39:04

ORACLE AIO異步IO

2015-10-28 14:45:35

ORACLE AIO異步IO

2011-03-23 13:34:18

數據庫轉化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线一区 | 欧美日韩成人影院 | a级黄色片在线观看 | 91视频在线观看免费 | 欧美91| 91av在线影院| 超碰日韩 | 国产精品久久久久久久久久久新郎 | 激情福利视频 | 午夜免费在线观看 | 超级乱淫av片免费播放 | 国产一级电影在线观看 | 久久99精品久久久久久国产越南 | 久久精品女人天堂av | 成人av一区二区三区 | 一区二区三区国产 | 日韩在线视频免费观看 | 在线免费观看一区二区 | 在线播放91 | 成人性视频免费网站 | 黄网站免费在线 | 天天插天天搞 | 午夜精品久久久久久久星辰影院 | 亚洲成人www | 国产乱码高清区二区三区在线 | 亚洲一区二区免费看 | 一区二区三区久久久 | 日韩精品一区二区三区 | 色偷偷888欧美精品久久久 | 欧美一级黄色片免费观看 | 中文字幕av网站 | 亚洲国产18 | 免费一区二区三区 | 日韩免费在线 | 91性高湖久久久久久久久_久久99 | 中文在线a在线 | 国产激情免费视频 | 九九久久精品 | 欧美亚洲第一区 | 国产精品亚洲一区 | 高清国产午夜精品久久久久久 |