ORACLE數據庫備份與恢復詳解


ORACLE數據庫備份與恢復詳解

學習過程中的總結,有興趣不妨看看,如果有不對的地方,高手不要留情!!

Oracle的備份與恢復有三種標准的模式,大致分為兩 大類,備份恢復(物理上的)以及導入導出(邏輯上的),而備份恢復又可以根據數據庫的工作模式分為非歸檔模式(Nonarchivelog-style) 和歸檔模式(Archivelog-style),通常,我們把非歸檔模式稱為冷備份,而相應的把歸檔模式稱為熱備份,他們的關系如下所示

wps24

  三種方式各有優點,我們做個比較(這個是用Fireworks畫的,有點糙):

wps25

熱備份和冷備份優缺點

熱備份的優點是:
  1.可在表空間或數據文件級備份,備份時間短。
  2.備份時數據庫仍可使用。
  3.可達到秒級恢復(恢復到某一時間點上)。
  4.可對幾乎所有數據庫實體作恢復。
  5.恢復是快速的,在大多數情況下在數據庫仍工作時恢復。
熱備份的不足是:
  1.不能出錯,否則后果嚴重。
  2.若熱備份不成功,所得結果不可用於時間點的恢復。
  3.因難維護,所以要特別仔細小心,不允許“以失敗而告終”。
冷備份的優點是:
  1.是非常快速的備份方法(只需拷貝文件)
  2.容易歸檔(簡單拷貝即可)
  3.容易恢復到某個時間點上(只需將文件再拷貝回去)
  4.能與歸檔方法相結合,作數據庫“最新狀態”的恢復。
  5.低度維護,高度安全。
冷備份不足是:
  1.單獨使用時,只能提供到“某一時間點上”的恢復。
  2.在實施備份的全過程中,數據庫必須要作備份而不能作其它工作。也就是說,數據庫必須是關閉狀態。
  3.若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設備上,速度會很慢。
  4.不能按表或按用戶恢復。

$A:   現在先來介紹一下邏輯備份方式的方法,利用Export可將數據從數據庫中提取出來,利用Import則可將提取出來的數據送回到Oracle數據庫中 去。理論基礎:Oracle提供的Export和Import具有三種不同的操作方式(就是備份的數據輸出(入)類型):

        1,表方式(T)    可以將指定的表導出備份;

        2,全庫方式(Full)    將數據庫中的所有對象導出;

        3,用戶方式(U)     可以將指定的用戶相應的所有數據對象導出;

   *在導入導出備份方式中,提供了很強大的一種方法,就是增量導出/導入,但是它必須作為System來完成增量的導入導出,而且只能是對整個數據庫進行實施。增量導出又可以分為三種類別:

        1,完全增量導出(Complete Export)     這種方式將把整個數據庫文件導出備份;exp system/manager inctype=complete file=20041125.dmp(為了方便檢索和事后的查詢,通常我們將備份文件以日期或者其他有明確含義的字符命名)

        2,增量型增量導出(Incremental Export)     這種方式將只會備份上一次備份后改變的結果;exp system/manager inctype=incremental file=20041125.dmp

        3,累積型增量導出(Cumulate Export)      這種方式的話,是導出自上次完全增量導出后數據庫變化的信息。exp system/manager inctype=cumulative file=20041125.dmp

  通常情況下,DBA們所要做的,就是按照企業指定或者是自己習慣的標准(如果是自己指定的標准,建議寫好計划說明),一般,我們采用普遍認可的下面的方式進行每天的增量備份:

        Mon: 完全備份(A)
        Tue: 增量導出(B)
        Wed:增量導出(C)
        Thu: 增量導出(D)
        Fri:   累計導出(E)
        Sat: 增量導出(F)
        Sun: 增量導出(G)

這樣,我們可以保證每周數據的完整性,以及恢復時的快捷和最大限度的數據損失。恢復的時候,假設事故發生在周末,DBA可按這樣的步驟來恢復數據庫:
        第一步:用命令CREATE DATABASE重新生成數據庫結構;
        第二步:創建一個足夠大的附加回滾。
        第三步:完全增量導入A:
                    imp system/manager inctype=RESTORE FULL=y FILE=A
        第四步:累計增量導入E:
                    imp system/manager inctype=RESTORE FULL=Y FILE=E
        第五步:最近增量導入F:
                    imp system/manager inctype=RESTORE FULL=Y FILE=F

  通常情況下,DBA所要做的導入導出備份就算完成,只要科學的按照規律作出備份,就可以將數據的損失降低到最小,提供更可靠的服務。另外,DBA最好對每次的備份做一個比較詳細的說明文檔,使得數據庫的恢復更加可靠。

$B 物理備份之冷備份(條件-NonArchiveLog):

     當數據庫可以暫時處於關閉狀態時,我們需要將它在這一穩定時刻的數據相關文件轉移到安全的區域,當數據庫遭到破壞,再從安全區域將備份的數據庫相關文件拷 貝回原來的位置,這樣,就完成了一次快捷安全等數據轉移。由於是在數據庫不提供服務的關閉狀態,所以稱為冷備份。冷備份具有很多優良特性,比如上面圖中我 們提到的,快速,方便,以及高效。一次完整的冷備份步驟應該是:

      1,首先關閉數據庫(shutdown normal)

      2,拷貝相關文件到安全區域(利用操作系統命令拷貝數據庫的所有的數據文件、日志文件、控制文件、參數文件、口令文件等(包括路徑))

      3,重新啟動數據庫(startup)

      以上的步驟我們可以用一個腳本來完成操作:

      su – oracle <      sqlplus /nolog
      connect / as sysdba
      shutdown immediate;
      !cp 文件   備份位置(所有的日志、數據、控制及參數文件);
      startup;
      exit;
     這樣,我們就完成了一次冷備份,請確定你對這些相應的目錄(包括寫入的目標文件夾)有相應的權限。

     恢復的時候,相對比較簡單了,我們停掉數據庫,將文件拷貝回相應位置,重啟數據庫就可以了,當然也可以用腳本來完成。

$C 物理備份之熱備份:(條件-ArchiveLog)

      當我們需要做一個精度比較高的備份,而且我們的數據庫不可能停掉(少許訪問量)時,這個情況下,我們就需要歸檔方式下的備份,就是下面討論的熱備份。熱備 份可以非常精確的備份表空間級和用戶級的數據,由於它是根據歸檔日志的時間軸來備份恢復的,理論上可以恢復到前一個操作,甚至就是前一秒的操作。具體步驟 如下:

      1,通過視圖v$database,查看數據庫是否在Archive模式下:        SQL> select log_mode from v$database;
             如果不是Archive模式

             則設定數據庫運行於歸檔模式下:SQL>shutdown immediate
               SQL>startup mount
               SQL> alter database archivelog;
               SQL> alter database open;
如果Automaticarchival顯示為“Enabled”,則數據庫歸檔方式為自動歸檔。否則需要手工歸檔,或者將歸檔方式修改為自動歸檔,如:
                      正常shutdown數據庫,在參數文件中init.ora中加入如下參數
               SQL>shutdown immediate
             修改init.ora:
               LOG_ARCHIVE_START=TRUE
               LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(歸檔日值存放位置可以自己定義)
               SQL>startup
 然后,重新啟動數據庫,此時Oracle數據庫將以自動歸檔的方式工作在Archive模式下。其中參數LOG_ARCHIVE_DEST1是指定的歸 檔日志文件的路徑,建議與Oracle數據庫文件存在不同的硬盤,一方面減少磁盤I/O競爭,另外一方面也可以避免數據庫文件所在硬盤毀壞之后的文件丟 失。歸檔路徑也可以直接指定為磁帶等其它物理存儲設備,但可能要考慮讀寫速度、可寫條件和性能等因素。      

注意: 當數據庫處在ARCHIVE模式下時,一定要保證指定的歸檔路徑可寫,否則數據庫就會掛起,直到能夠歸檔所有歸檔信息后才可以使用。另外,為創建一個有效 的備份,當數據庫在創建時,必須履行一個全數據庫的冷備份,就是說數據庫需要運行在歸檔方式,然后正常關閉數據庫,備份所有的數據庫組成文件。這一備份是 整個備份的基礎,因為該備份提供了一個所有數據庫文件的拷貝。(體現了冷備份與熱備份的合作關系,以及強大的能力)

2,備份表空間文件:

                  a,首先,修改表空間文件為備份模式  ALTER TABLESPACE tablespace_name BEGIN BACKUP;

                  b,然后,拷貝表空間文件到安全區域 !CP tablespace_name D_PATH;

                  c,最后,將表空間的備份模式關閉    ALTER TABLESPACE tablespace_name END BACKUP;

            3,對歸檔日志文件的備份:

                  停止歸檔進程-->備份歸檔日志文件-->啟動歸檔進程

  如果日志文檔比較多,我們將它們寫入一個文件成為一個恢復的參考:$   files `ls <歸檔文件路徑>/arch*.dbf`;export files

           4,備份控制文件:
                 SQL> alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;

           當然,我們也可以將上面的東東寫為一個腳本,在需要的時候執行就可以了:

              腳本范例:

                 su – oracle <      sqlplus /nolog
                 connect / as sysdba
                 ALTER TABLESPACE tablespace_name BEGIN BACKUP

                 !CP tablespace_name D_PATH

                 ALTER TABLESPACE tablespace_name END BACKUP

                 alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;

                 !files `ls <歸檔文件路徑>/arch*.dbf`;export files

熱備份的恢復,對於歸檔方式數據庫的恢復要求不但有有效的日志備份還要求有一個在歸檔方式下作的有效的全庫備份。歸檔備份在理論上可以無數據丟失,但 是對於硬件以及操作人員的要求都比較高。在我們使用歸檔方式備份的時候,全庫物理備份也是非常重要的。歸檔方式下數據庫的恢復要求從全備份到失敗點所有的 日志都要完好無缺。
                恢復步驟:LOG_ARCHIVE_DEST_1
                               shutdown數據庫。
                               將全備份的數據文件放到原來系統的目錄中。
                               將全備份到失敗點的所有歸檔日志放到參數LOG_ARCHIVE_DEST_1所指定的位置。
                               利用sqlplus登陸到空實例。(connect / as sysdba)
                               然后  startup mount
                                       set autorecovery on
                                       recover database;
                                       alter database open;

  這樣,我們的熱恢復就算完工了,寫了好久,終於寫好,大家有什么補充就寫上來,不要客氣,這是這兩天學習的一些心得,希望大家多多交流,謝謝。


免責聲明!

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



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