oracle 10g數據庫備份與還原總結(轉載)

1.數據庫歸檔模式:

        * 非歸檔模式:當數據庫數據只讀不會改變時,數據不會改變,數據庫適合用非歸檔模式,                     這樣提高性能

        * 歸檔模式:對於數據庫數據經常變動,數據庫最好用歸檔模式,這樣可以儘量避免數據庫                   數據丟失,使出現問題時災害降到最低

2.非歸檔模式與歸檔模式間的切換(在命令窗口下):

        @檢查當前日誌操作模式
              f:/>sqlplus sys/dba as sysdba
              連接數據庫
              sql>select log_mode from v$database;

        @關閉數據庫,後裝載數據庫,只能在mount狀態下改變日誌操作模式
              sql>startup mount

        @改變日誌模式
              sql>alter database achivelog;(變爲歸檔方式,否則爲nochivelog)
              sql>alter database open;
 
3.查看歸檔模式相關信息:

        @若採用默認設置,歸檔日誌位置在快速恢復區

        @配置歸檔日誌位置 log_archive_dest_n  (n=[1:10])
              sql>alter system set
                  log_archive_dest_1 = 'location =c:/demo/archive [optional]';
              sql>alter system set
                  log_archive_dest_2 = 'service =standby [mandatory] [reopen]';
         其中:location 是本地
              service  是遠程
              optional 無論歸檔是否成功,都會覆蓋重做日誌
              mandatory只有成功歸檔纔會覆蓋重做日誌
              reopen 重新歸檔時間間隔 默認是300s

        @顯示歸檔信息,即顯示顯示日誌操作模式
              sql>select name,log_mode from v$database;

        @顯示歸檔日誌信息
              sql>select name,sequence#,first_change# from v$archive_log;
         sequence#: 歸檔序列號
         first_change# : 起始SCN值

        @顯示歸檔日誌位置
              sql>select dest_name,destination,status from v$archive_dest;
         dest_name 歸檔位置參數名
         destination 位置

        @顯示日誌歷史信息
              sql>select * from v$loghist;
         threade# : 重做線程號
         sequence# : 日誌序列號
         first_change# : 起始SCN值
         first_time : 起始SCN發生時間
         switch_change : 切換SCN值
       
二.非歸檔模式下的備份與還原

   . 日誌採用覆蓋原有日誌的方式存儲

   . 出現介質失敗時,只能恢復到過去的完全備份點
   . 數據庫OPEN狀態是,不能備份數據庫

   . 必須先關閉數據庫,再備份,且必須備份所有數據,控制文件

  1.備份==冷備份

       @ 先關閉數據庫
             sql>shutdown immediate

       @ 拷貝所有數據文件,和控制文件

  2.恢復

       * 數據文件出現丟失,但備份以來的重做日誌內容尚未被覆蓋,此時可以完全恢復

           @裝載數據庫
               sql>startup force mount

           @複製數據文件備份

           @恢復數據文件
               sql>recover datafile 1

           @打開數據庫
               sql>alter database open;

       * 備份文件的重做日誌內容已經被覆蓋,則只能還原到備份點

           @關閉數據庫

           @複製所有數據和控制備份文件至原位置

           @裝載數據庫,執行恢復命令
               sql>startup mount
               sql>recover database until cancel
               提示控制文件不再使用原有重做日誌

           @用resetlogs選項打開數據庫
                sql>alter database open resetlogs;


三.歸檔模式

   . 可以防止數據丟失

   . 數據處於OPEN狀態時可以進行備份

   . 當出現介質失敗時,除了SYSTEM表空間中的數據文件外其他的都可以在open狀態下恢復

   . 可執行完全恢復,也可以恢復到備份點與失敗點之間的某時刻
 
  1.備份

      1)冷備份
            shutdown後拷貝所需數據文件和控制文件

      2)熱備份
            @將數據庫設置爲歸檔模式
            @在數據庫上發出全局檢查點,在所有的數據文件頭塊上加鎖
                sql>alter database begin backup ;
            @備份數據文件及控制文件
                數據文件直接拷貝至其他目錄
                控制文件需使用alter database backup controlfile
                    sql>alter database backup controlfile to 'd:/backup/demo.ctl';
            @結束數據備份,爲確保數據文件備份的同步性,還應該歸檔當前日誌組
                    sql>alter database end backup;
                    sql>alter system archive log cuurent;

      3)備份表空間
            *脫機備份(表空間處於OFFLINE狀態,SYSTEM表空間和正在使用的UNDO空間不能脫機)
                 @確定表空間包涵的數據文件,如空間USERS
                      sql>select file_name from dba_data_files
                          where tablespace_name = 'users';
                 @設置表空間爲脫機狀態
                      sql>alter tablespace users offline;
                 @複製數據文件
                 @設置表空間聯機
                      sql>alter tablespace users online;
            *聯機備份
                 @確定對應關係
                 @設置表空間爲備份模式
                      sql>alter tablespace users begin backup ;
                 @複製數據文件
                 @設置表空間爲正常模式
                      sql>alter tablespace users end backup ;
            *處理聯機備份失敗
                當執行聯機備份時,若出現例程失敗,再次打開數據庫時,如果數據文件仍處於備                份狀態,則會出錯,此時需要結束備份
                 @裝載數據庫
                    sql>startup force mount
                 @查看處於聯機備份狀態的所有數據文件
                    sql>select file# from v$backup where status = 'active';
                 @結束聯機備份狀態
                    sql>alter tablespace end backup
                      或alter tablespace datafile backup;
                      或recover datafile 序號
                 @打開數據庫
                    sql>alter database open;
     2.還原
         1)完全恢復
             相關命令:
                recover database :恢復數據庫的多個數據文件(在MOUNT狀態下運行)
                recover tadaspace :恢復多個表空間的所有數據文件(在open狀態下運行)
                recover datafile :恢復一個或多個數據文件(在mount,open狀態下都可)
             *在mount狀態下恢復數據文件(用於SYSTEM表空間恢復)
                 @裝載數據庫 mount狀態
                 @確定需要恢復的數據文件
                     sql>select file#,error from v$recover_file
                 @拷貝備份至原位置
                 @恢復數據庫 recover..上述命令
                 @打開數據庫 alter database open;
             *在open狀態下恢復關閉後意外對視的數據文件,此時數據庫將無法打開
                 @裝載數據庫 mount
                 @確定需要恢復的數據文件
                 @使相應的數據文件脫機
                     sql>alter database datafile 4 offline;
                 @打開數據庫
                     sql>alter database open
                 @複製數據備份文件
                 @恢復數據文件
                 @是數據文件聯機 alter database datafile 4 online;
             *在open狀態下恢復打開時意外丟失的數據文件
                 @確定要恢復的數據文件
                 @使數據文件脫機
                 @複製數據文件
                 @恢復相應的表空間或數據文件
                 @使相應的表空間或數據文件聯機
             *在open狀態下恢復未備份的數據文件(要求在歸檔模式下,新建數據文件,其從簡歷              開始的所有歸檔日誌必須全部存在)
                 @裝載數據庫
                 @確定要恢復的數據文件
                 @是數據文件脫機
                 @打開數據庫
                 @重新建立數據文件
                     sql>alter database create datafile 'd:/demo/users01.dbf';
                 @恢復數據文件
                 @使數據文件聯機
       2)不完全恢復
           使用已備份的數據文件,歸檔日誌,和重做日誌,將數據庫恢復到備份點與失敗點之間           某個時刻的狀態
              *恢復分類
                  基於時間的恢復:誤刪除表,誤截斷表,提交了錯誤的數據
                  基於取笑恢復:恢復到某個日誌序列號之前的狀態
                  基於SCN的恢復:恢復到特定SCN值的狀態
                  基於備份控制文件恢復:表空間被意外刪除,或所有控制文件全部損壞
              *不完全恢復指令
                  recover database until time
                  recover database until change
                  recover database until cancel
                  recover database .. using backup controlfile
              *基於時間的恢復
                  @關閉數據庫(爲防止備份失敗,應備份當前數據庫所有文件
                  @裝載數據庫 startup mount
                  @複製所有備份數據文件,並確定備份文件的時間點
                      sql>select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss)
                          from v$recover_file;
                  @執行recover database until time
                      sql>recover database until time "2006-09-26 16:40:33'
                  @以resetlogs方式打開數據庫,並檢查恢復結果
                      sql>alter database open resetlogs;
                  @備份數據庫所有數據文件和控制文件,因爲當以resetlogs方式打開數據庫後                  會重新建立重做日誌,清空原有重做日誌的所有內容,並將日誌序列號復位爲1
                      sql>select name from v$datafile;
                      sql>alter database begin backup;
                      拷貝數據文件
                      sql>alter database end backup;
                      sql>alter database backup controlfile
                          to 'd:/backup/demo.ctl' reuse;
                      sql>alter system archive log cuurent;
               *基於SCN恢復
                   @關閉數據庫
                   @裝載數據庫 mount
                   @複製所有備份數據文件,確定備份文件SCN值
                       sql>select file#,change#, from v$recover_file;
                   @執行recover database until change
                       sql>recover database until change 675978;
                   @以resetlogs方式打開數據庫
                   @備份數據庫所有數據文件和控制文件
               *基於取消恢復
                   @關閉數據庫
                   @裝載數據庫
                   @複製所有備份的數據文件,確定備份文件的SCN值
                       sql>select file#,change# from v$recover_file;
                   @執行recover database until cancle
                       sql>recover database until cancel
                   @以resetlogs方式打開數據庫
                   @備份所有數據文件和控制文件
               *基於備份控制文件的恢復
                   @通過查看alert文件,確定誤操作時間
                   @關閉數據庫
                   @複製所有備份的數據文件,控制文件
                   @裝載數據庫
                   @執行recover database ..using backup controlfile
                       sql>recover database until time '2004-09-26 19:51:06'
                           using backup controlfile
                   @以resetlogs 方式打開數據庫
                   @備份所有數據文件和控制文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章