OracleDatabase Backup資料缺失的問題,oracleDatabase Backup

來源:互聯網
上載者:User

OracleDatabase Backup資料缺失的問題,oracleDatabase Backup

項目中一直在使用Oracle資料庫,由於我之前更多的是關注ORM映射架構,幾乎沒有關注過Oracle特性的東西,很多東西都不知道,而且項目中換資料庫的機率幾乎為零,所以有必要好好研究一下Oracle。正所謂,不怕不知道,就怕不知道嘛。不然遇到問題,都不知道從哪裡下手。


這兩天的Oracle學習,收穫不小。前幾天測試中遇到很多的稀奇古怪的問題,都被很好的解釋了。這裡就一個典型的例子談一談。


就是在測試階段,看著經理熟練的操作Oracle的各個指令,內心就已經有了一點不平靜。經理就是經理,這都是多少年不寫代碼的人了,這些Oracle指令還記的那麼清楚。

系統首次測試的時候,報出了一堆莫名其妙的bug。結果發現是備份的資料庫不完整。結果導致測試環境中的資料庫中缺少不少表和視圖。


PS:當時我的想法是,Oracle這東西,為啥非要往虛擬機器裡裝啊,暈菜~~~  可是事實證明,往虛擬機器裡裝Oracle是沒問題的~~~


我們找到問題後,都感覺很莫名其妙,Oracle資料庫怎麼會有這樣的問題呢?一定不是資料庫的問題,可是備份的步驟很固定啊,不會有問題啊。而且之前gxpt項目中,Database Backup還原度時候,也沒有這問題啊。不應該在gxpt還原中沒問題,在tky項目就有了問題啊。

現在才發現,這是由於Oracle的閃回技術造成的。Oracle資料庫也跟windows系統一樣,有一個資源回收筒。執行一般的刪除表操作後,其實並沒有執行真刪除,而是將它們放在了資源回收筒裡面。放在資源回收筒有一個好處,就是隨時都能把刪除的表還原。

你可以在sql plus視窗中執行"select * from tab" 操作,查看資料庫中的表。這裡會查詢上來所有的表,以及一些長編碼的東西,這些東西就是你刪除表的痕迹。


但是閃回也有一些弊端。就是在Database Backup的時候,如果資源回收筒中未清除,就有可能造成備份資料不完整的情況。

這就解釋了備份失敗的原因。而gxpt項目中,是使用的JPA映射,自然而然就屏蔽了這些資料庫特性的東西。


oracle資料庫問題,如果資料庫系統不小心丟失了沒有備份的資料檔案,該怎恢複資料庫的正常狀態?

那資料是肯定丟失了的。你可以選擇將丟失的資料檔案offline掉,再試圖開啟資料庫。
 
oracle資料庫在備份時有人正錄入新的資料會不會出現資料丟失的現象???

這個肯定不會出現資料丟失的問題。

因為oracle資料庫裡是做了鎖的,資料在更新的時候會使用獨佔鎖定,資料在查詢的時候會使用共用鎖定。

所謂的獨佔鎖定就是指A在使用資料X的時候,B不能更新。。。
所謂的共用鎖定就是指A在使用資料X的時候,B也能查詢。。。

在備份的時候,資料庫會把此時的資料全部備份起來,如果正在這時有人向資料庫寫入資料,資料庫可能會先寫入緩衝,等資料備份完成以後,在寫到資料庫裡,你要備份新的資料就要重新備份一次。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.