Oracle11g備份與恢復-手工備份與恢復


第二章 手工備份與恢復

 一)常用命令

  1.備份和還原都會用到os命令,linux---cp

  2.恢復:recover

  二)備份前檢查

  1.檢查需要備份的數據文件

       SQL>col NAME FOR A100-----調整列顯示長度

  SQL>select name from v$datafile;----查看數據文件

         

      SQL> select file_id,file_name,tablespace_name from dba_data_files;

           dba_data_files-----數據庫數據文件信息表

  

 

     

 

   2)檢查要備份的控制文件

  SQL> select name from v$controlfile;

 

 

 

 

   3)在線redo日志可以不做備份

    如果是在線備份,肯定是歸檔模式
      1、在線日志里面的內容,最后都會到歸檔日志里面的。所以只要備份歸檔日志就OK了。
      2、所以,RMAN也不提供備份和RESTORE在線日志的命令。
       如果是數據庫關閉后備份,又是非歸檔模式的,沒有干凈shutdown的話,倒是應該備份在線日志的。

 三)dbv檢查壞塊

  在手工備份前,需要檢查datafile是否存在壞塊,在備份完成后也要對備份進行檢查。

  對某一個datafile進行壞塊檢查

  1.沒有參數,簡單檢查

    

 

 

   2.帶有參數

    

 

 

     LOGFILE---可以指定輸出日志,使用edit進行查看(ed 輸出日志名)

 四)冷備份的注意事項

   1)必須要將數據庫關閉干凈,以保證數據的一致性;

     SQL>shutdown immediate;

     2)在os下必須備份所有的數據文件(完整備份)

     3)在os下必須備份控制文件(至少備份一個)

     4)非歸檔備份還原策略

        恢復時還原所有的備份,重建所有在線日志,沒有recover步驟

   SQL>startup mount

     SQL>alter database clear unarchived logfile group n;n為所有在線日志組)查看有幾個日志組select * from v$log;

     SQL>alter database open;

 五)手工非一致性備份(熱備份)

  1)在備份之前需要進入熱備模式,備份后要結束熱備模式

    執行begin backup設置備份模式(在數據文件上生成檢查點,寫入scn,將來恢復的時候以這個寫入的scn為起點)

    對只讀的表空間不能做熱備份,臨時表空間不需要進行備份,特別強調:NOARCHIVE模式下不支持手工熱備

    對整個數據庫設置熱備模式:alter database begin backup;

    對整個數據庫結束熱備模式:alter database end backup;

    對單個表空間設置熱備模式:alter tablespace users begin backup;

    對單個表空間結束熱備模式:alter tablespace users end backup;

  2)手工熱備利用v$backup監控

    例子:首先創建名為test_space的表空間以及名為test_user的用戶,並將test_user用戶的表空間指向test_space,之后將表空間test_space進行備份。

    創建test_space表空間

    SQL> create tablespace test_space datafile '/ora/oracle/oradata/orcl/test_space01.dbf' size 100M autoextend on next 10M;

    查看創建的表空間

 

     (PS:區別:v$tablespace (v$視圖) :是動態性能視圖,存在於controlfile中,數據庫在mount狀態下可以查詢;dba_tablespace (dba_數據字典) :是靜態視圖,存在於數據庫中,只能在open時查詢相同點:都是表示空間信息的)

    創建用戶並授權

  SQL> create user test_user identified by 123123 default tablespace test_space

       SQL> grant connect to test_user;

 

   使用新建用戶連接數據庫,查看默認表空間個用戶

     接下來將表空間test_space置於聯機備份模式

    SQL> alter tablespace test begin backup; 

    此時報錯:ORA-01123: cannot start online backup; media recovery not enabled

    原因是目前數據庫處於非歸檔模式,所以無法進行在線備份,只有在歸檔模式的時候才可以進行在線備份,首先將數據庫設置成歸檔模式。具體步驟參考博客:

    https://blog.csdn.net/alen_liu_sz/article/details/77992430

    

     

     

     

    SQL> select file#,checkpoint_change# from v$datafile_header;

    在備份期間,SCN被凍結,當檢查點發生時不受影響,他是恢復階段運用日志的起點。

    

    SQL> select * from v$backup;  

    這里的STATUS是ACTIVE,證明是可以備份相應的數據文件。

     此時就可以到服務器上,相應的數據文件路徑下將文件進行備份。

    [oracle@oracle orcl]$ cp test_space01.dbf /ora/test_space01.dbf.bak

    備份完畢后,就可以關閉聯機在線備份,需要盡快執行endbackup。

    如果再end backup之前發生數據庫abort(終止),那么可以在下次啟動到mount時end backup,從而完成實例恢復。

    

 

  六)split block(fractured block)問題

  一個Oracle block一般包含多個OS block,當手工熱備時,OS的cp單位不是Oracle block而是OS block,而Oracle的DBWR又可能不時從內存中刷新Oracle block(臟塊)到磁盤上,如此,OS的級的拷貝可能造成:一個Oracle block是由不同的版本組成,比如,未被DBWR刷新Header block加上另一部分被刷新的foot block,這樣cp出來的Oracle block就是split block。

  數據庫的一致性是不允許oracle block是split的,split block實際上屬於logical corruption Oracle采取的辦法是:在backup mode后,如果發現首次DBWR要寫臟塊,則將該塊被刷新之前的鏡像數據記錄到redo buffer,這樣,雖然cp后的文件里仍然含有split block,而當需要恢復的時候,日志會前滾該塊的前鏡像,以保證所有被恢復的oracle block最終是一個完整的版本。

  這也是我們常常發現在熱備的時候日志文件會急劇增大的原因。

  RMAN備份不會造成split block。RMAN備份時以oracle block為讀取單元,並查驗塊的一致性,如果不一致會重復讀,三次失敗,將標注該塊為邏輯壞塊。

    

 

 

   

  

 

 

 

 

    

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM