oracle 快照過舊怎麼回退 儲存系統的快照技術

2021-10-11 17:19:59 字數 3671 閱讀 5945

趙二狗剛剛畢業,應聘進入了錘鈕匹科技****,成為了這裡的新員工。入司的第一天是分配宿舍(背景音:天哪,還有宿舍!羨慕嫉妒恨!)。跟他在同乙個宿舍的是公司的老員工王大拿,王大拿是該公司的架構師,對公司的情況基本上無所不知。請注意,這裡說的是公司的八卦新聞,哈哈!

趙二狗進了宿舍,王大拿正在那裡噼里啪啦的敲鍵盤... ...

趙二狗: 前輩,我是新報道的同事。

沒有任何反應。

「前輩」,趙二狗提高了嗓門。

還是沒有任何反應。

「前輩!」,趙二狗大喝一聲。

王大拿忽的從椅子上站了起來,「幹毛,嚇死老子了」,王大拿略帶怒氣的說。

「前輩,我是新入職的同事,跟您乙個宿舍,認識您很高興!」,趙二狗面帶笑容的說。

一聽這樣,王大拿笑了,「好說,好說,你隨便坐吧,我這忙著調程式呢」。

「週末還不休息!?」趙二狗小聲嘀咕著。

王大拿很憤憤,「是啊,娘的,遇到個bug,阻塞好幾天了。」

「什麼問題?」趙二狗問。

「說了你也不懂,小鮮肉」,王大拿不屑的說。

王大拿繼續說, 「你知道什麼是快照嗎?」

「切,不就是快照,那有什麼不懂的,我也是堂堂985的碩士研究生,之前專門搞儲存的」,趙二狗很不爽。

「好小子,那你講講」,王大拿突然提起了興趣。

於是趙二狗同學開始娓娓道來... ...

快照是儲存系統中的一種資料保護技術,主要是實現資料的邏輯保護。所謂邏輯保護,就是當資料出現誤刪除或者病毒等原因導致資料破壞的情況。通過快照技術,可以將資料恢復到某乙個時間點的資料。

「不錯,接著說」,王大拿覺得趙同學還有兩下子。

從名字上可以猜出來,快照就好像給資料拍了乙個**,就好像我們日常生活中給人拍**類似。以生活中拍**為例,比如給你家娃娃拍了他2歲的**,等他到5歲的時候,樣子變化很大。這個時候你想看看他2歲的時候長什麼樣,那你就可以拿出他2歲的**看看。

對於儲存中的快照技術也是類似,在某個時間點,你給某個磁碟(或者儲存中的lun)打乙個快照,相當於讓儲存系統給這個磁碟拍了乙個**。當之後的使用過程中發生了意外,比如病毒把資料搞壞了等等。這個時候你就可以通過快照知道原來的資料是什麼樣的,這樣資料就可以找回來了。

」不錯,不錯,那快照的實現原理是什麼呢?「,王大拿覺得有點小看小趙同學了,於是接著問。

快照可以在檔案系統或者塊裝置層面實現,我們以塊儲存為例。塊儲存從普通使用者的角度來看就是磁碟。從使用者的角度磁碟其實就是乙個線性空間,可以理解為乙個很大的陣列,比如512g或者4tb等。但磁碟的讀寫最小單位是乙個扇區,也就是512位元組。這樣可以不用關心,這個跟我們後面講的快照的原理也沒有太大關係。

有了磁碟的這個概念,那麼快照就比計較容易理解了。對於儲存系統而言,磁碟實際上是從儲存池劃分的一塊空間而已(這一點與我們普通pc的事物磁碟有所不同),如圖2所示,假設原始磁碟在儲存池中有如圖的一塊空間,而磁碟在儲存系統中其實就是乙個資料結構而已,只不過這個資料結構描述了磁碟在儲存池中的空間範圍。

磁碟是乙個資料結構,快照實際上也是乙個資料結構。對磁碟做快照,其實就是在儲存系統中建立乙個資料結構,讓其描述的資料範圍指向原始磁碟指向的儲存池的範圍即可。這樣快照的資料就和磁碟的資料一模一樣,具體可以參考圖2 a進行理解。

但是原始磁碟的資料是會變化的,也就是會被重新寫新資料的。這個時候怎麼保證快照的資料還是打快照那個時間點的資料呢?問題的關鍵就在磁碟對資料的描述和管理。在儲存系統中,將磁碟劃分為固定大小的塊(比如4kb),然後通過某種機制(比如位圖)對這些磁碟塊進行管理和標記。當有應用對磁碟寫新的資料的時候,磁碟管理軟體就會將原始資料拷貝到新的地方,然後讓快照的指向改為這個新位址,而磁碟原來的地方就可以將資料寫入。這樣對於磁碟而言,資料發生了變化;而對於快照而言,快照的資料還是打快照那個時間點的資料。

「嗯,懂得很多嘛,小趙」,王大拿似乎很滿意趙二狗同學的答案。「問題是這種方式需要在底層複製資料,會影響原始磁碟的效能」。快照的2種實現

是的,目前快照有2中實現方式,一種是我上面介紹的方式,稱為cow,全稱為copy-on-write。也就是在原始磁碟寫資料的時候會將原始資料拷貝到新的地方。當然,並不是每次寫資料都會拷貝,而是第一次寫資料的時候才會拷貝。這裡有乙個位圖記錄著已經拷貝過的資料,如果已經拷貝過,則下次再寫資料的時候將不會再拷貝了。

另外一種實現方式成為row,全稱為redirect-on-write,也就是寫時重定向。這種實現方式的基本原理是當原始磁碟寫資料的時候並不在原始位置寫入資料,而是分配乙個新的位置。這種情況下就需要維護磁碟邏輯位址與實際資料位置的對應關係。如圖3是row的原理示意圖。

「你剛才說的快照可以防止資料被病毒破壞,還有其它應用場景嗎?」,王大拿問。

「很多啊」, 趙二狗接著說。

「比如在資料庫應用領域,使用關係型資料庫的業務通常是關鍵業務。因此,需要保證資料庫在出現資料損壞或者丟失的情況下能夠恢復到某個時間點。這樣,通過快照,比如每個小時打乙個快照,這樣即使出現問題,最多丟失1個小時的資料,從而保證資料的安全。」

「資料庫為了提公升效能可能會同時使用好幾個磁碟,比如oracle資料庫會用不同的磁碟存放不同的資料。比如資料檔案會單獨放在乙個磁碟,redo日誌又會放在另外乙個磁碟。並且,oracle資料庫會校驗兩者的一致性,任何差異可能會導致整個資料庫的不一致,這個怎麼解決?」,王大拿問。

趙二狗回答:「這種情況下就需要一種稱為「一致性組」的技術了,「一致性組」相當於將磁碟打包成為一組磁碟,做快照的時候可以保證這一組磁碟的資料是在同乙個時間點的。」

王大拿若有所思:「嗯嗯,但是還有一點,如果我們做了快照,在恢復的時候資料庫是否可以直接恢復?」

趙二狗:「應該可以的啊,因為資料我們都保護了,資料恢復到該時間點後,資料庫可以直接啟動。」

「不一定」,王大拿繼續說「我們舉個例子,資料庫通常是要保證事務性的,為了保證資料的事務性,資料庫對於乙個寫資料通常不是簡單的寫,而是要寫一大堆各種日誌,因此對於乙個寫資料操作,到我們儲存系統就會變成很多個io。」

「在我們儲存層面我們是不知道那些io是某乙個事務的,而我們做快照是以io為粒度進行的。換而言之,也就是我們做了乙個快照,可能對於資料庫而言正在處於中間過程。這樣的話,當我們恢復到這個時間點的時候,資料庫並不能直接啟動,而是處於一種資料不一致的狀態,需要手動做恢復處理。」

趙二狗露出了驚訝的表情: 「大拿就是大拿, 那怎麼辦?」

「涼拌,這個沒招啊,臣妾做不到」,王大拿說。

"應用層面上的問題只能在應用層面上解決了,儲存系統本身處於下層,無法感知應用的差異。oracle層面本身也有資料保護的機制,比如資料備份,或者rac等。好了,時間不早了,吃飯去吧。」

「好的,大拿,今天我請客,學到不少新東西。」

Error ORA 01555 快照過舊

錯誤資訊 error ora 01555 快照過舊 回退段號47 名稱為 syssmu47 1286521707 過小 可能原因 sql語句執行時間太長,或者undo表空間過小,或者事務量過大,或者過於頻繁的提交,導致執行sql過程中進行一致性讀時,sql執行後修改的前映象 即undo資料 在und...

Oracle ORA 01555 快照過舊

一 引言 oracle yft yft oerr ora 01555 01555,00000,snapshot too old rollback segment number s with name s too small cause rollback records needed by a rea...

原創 ORA 01555 快照過舊

問題描述 在執行下面語句時曝出了標題所示的錯誤ora 01555。insert into super.sb kpxx com select from super.sb kpxx a where kprq to date 20130101 yyyymmdd and kprq to date 20131...