ORACLE RMAN備份及還原

ORACLE RMAN備份及還原

RMAN能夠進行增量備份:數據庫,表空間,數據文件sql

只有使用過的block能夠被備份成backup set數據庫

表空間與數據文件對應關係:dba_data_files / v$datafile_header安全

在noarchivelog模式下,可使用RMAN備份read-only和offline的表空間oracle

ORACLE RMAN停機備份:cors

備份測試

RMAN鏈接上ORACLE,WINDOWS下在命令模式下優化

RMAN TARGET /spa

鏈接本地數據庫用的是本地認證模式。RMAN鏈接數據庫必須在dedicate模式下。所以在share模式下的數據庫應配置一個dedicate的鏈接用於RMAN鏈接。rest

若是要把控制文件、參數文件也一塊兒備份日誌

configure controfile autobackup on;//打開autobackup 
configure controfile autobackup off;//關閉autobackup
關閉數據庫
RMAN>shutdown immediate
mount 數據庫RMAN的備份必須在MOUNT模式下,這也就是控制文件備份的重要。
RMAN>startup mount
最簡單的備份
RMAN>backup database
就這一句就OK了
這樣的備份,備份集在數據庫默認位置。%oracle_home%/ora92/database
固然你也能夠用run來靈活的定義你的備份。
RMAN>run{
>allocate chennel d1 type disk; //分配通道
>backup full database           //全備份數據庫
>include current controlfile    //包括當前的controlfile
>format 'e:\oracle\orders\db_%d_%s_%p_%t_%T'; //備份文件位置和文件名格式
>release channel d1;//釋放通道
>}

恢復
1、數據文件損壞,而控制文件是好,或者已經恢復
 RMAN連上數據庫
 startup mount
 restore database
 recover database noredo;
 alter database open resetlogs;
 recover database noredo該命令指示RMAN執行最後的恢復操做以準備打開這個數據庫。由於是在NOARCHIVELOG模式下而且不該用任何歸檔的重作日誌而且丟失了聯機重作日誌,因此要求在這條命令中使用noredo參數。

最後使用alter database open resetlogs打開數據庫。因爲已經還原了控制文件而且須要從新構建重作日誌,因此必須用resetlogs。
二、還原控制文件
startup nomount;
set dbid = <dbid>
restore controlfile from autobackup ;
alter database mount;
restore database;
recover database noredo;
alter database open resetlogs;
alter database open;
在這個例子中有一個DBID這個能夠
select * from v$database中查到。可是一個數據庫在控制文件壞掉了不能OPEN如何能看的到呢這就在平時把這個DBID記下來。
這是最簡單的用RMAN備份與恢復的例子,但從中能夠看到RMAN備份與恢復的梗概。

ORACLE RMAN在線備份:

1. ORACLE RMAN在線備份以前須要切換日誌方式爲歸檔日誌;

a. 關閉數據庫
SQL> shutdown immediate;

b. 啓動數據庫到mount狀態
SQL> startup mount;

c. 啓用歸檔模式
SQL> alter database archivelog;

d. 查看修改後的數據庫備份和恢復策略及歸檔文件的位置
SQL> archive log list;

注意:修改爲archive模式以後,以前全部的數據庫備份均無效。

e. 修改相應的初始化參數
Oracle10g以前,你還須要修改初始化參數使數據庫處於自動歸檔模式。
可用SQL> show parameter log_archive_start;查看
NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------
log_archive_start                    boolean     FALSE
SQL> alter system set log_archive_start=true scope=spfile;
重啓數據庫此參數生效,此時數據庫處於自動歸檔模式。

固然你也能夠不作第5步,直接
SQL>archive log start
使數據庫啓用自動歸檔,可是重啓後數據庫仍然處於手工歸檔模式。

2. 運行:RMAN target /

3. RMAN信息保存:默認保存在control file中,保存週期7天

調整:alter system set control_file_record_keep_time=天數;

4. 搭建獨立數據庫保存RMAN備份信息

因爲只有一個數據庫,就建在自己數據庫上

a. 建立表空間RC:create tablespace rc datafile size 10M autoextend on next 1M

b. 建立用戶RC:

CREATE USER rc IDENTIFIED BY rc TEMPORARY TABLESPACE temp DEFAULT TABLESPACE  rc QUOTA UNLIMITED ON rc;

c. 受權RC: GRANT RECOVERY_CATALOG_OWNER TO rc;

d. 搭建:

rman catalog rc/rc@orcl

RMAN>create catalog;

RMAN>exit

rman target / catalog rc/rc@orcl

RMAN>register database;

e. 使用:

rman target / catalog rc/rc@orcl

這種鏈接方式後,數據就會在控制文件和catalog各存一份

5. 全局參數配置:

查看:show all;

修改:configure 參數名稱 具體設置

例如:修改是否自動保存control file:configure controlfile autobackup on;

恢復默認值:configure 參數名稱 clear;

關鍵參數:

a. 保存週期:retention policy

默認是redundancy 1:保留一個備份;

可用值:recovery window of 7 days:保留能夠知足7天恢復週期的備份

根據條件檢查:report obsolete:RMAN會根據保存週期參數來列出能夠刪除的備份

刪除多於備份:delete obsolete

b. 優化備份:backup optimization:RMAN會自動忽略已經備份過的內容(數據文件,歸檔日誌,備份塊)

前提:備份指定同一個channel

c. 默認備份渠道:default device type to disk:默認備份到磁盤,路徑爲flash recovery area

渠道類型:

disk:文件系統路徑

flash recovery area:默認路徑

sbt:磁帶設備

修改到磁盤其餘路徑:configure channel device type disk format '路徑/%U';

例如:configure channel device type disk format '/tmp/movedata/%U';

6. 備份結果

backupset:backup (as backupset) 備分內容,裏面分割成一個或多個backup piece,只有該類型備份能夠進行壓縮。

copy:backup as copy 備分內容

按類型查看:

backupset 查看:list backup summary(list backupset summary)

查看詳情:list backupset BS

copy查看:list copy

按內容查看:

整個數據庫:list backup of database;

tablespace:list backup of tablespace users;

數據文件:list backup of datafile n;

控制文件:list backup of controlfile;

歸檔日誌:list archivelog all;

按規則查看:

查看根據保存規則可刪除文件:report obsolete;

查看根據保存規則須要備分內容:report

RMAN和OS結合檢查:corsscheck 內容;

7. 備份方式

full:全備;

Incremental:增量備份

能夠增量備份的類型:數據庫,數據文件,表空間

a. 首先須要作level 0備份做爲基礎。例如:backup incremental level 0 備分內容;(備分內容:全部使用過的data block,和image copy不一樣)

b. 增量類型:

累計增量:backup cumulative level 1 備分內容;

差別增量:backup incremental level 1 備分內容;

區別:累計增量始終是基於level 0的備份;

第一次差別增量是基於level 0的備份;從第二開始就是基於前一次增量備份

c. Image備份增量方式:

第一次:以Image全備爲基礎;

第二次:基於全備,作增量備份;完成後合成成一個Image全備

第三次:基於第二次的Image全備,作增量備份;完成後合成成一個Image全備

實現:

例如:針對tablespace example

RUN {
   RECOVER COPY OF tablespace example WITH TAG 'incr_update';
   BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update'
       tablespace example;
   }

d. 開啓參數"block change tracking",能夠提升速度

查看狀態:SELECT status FROM v$block_change_tracking;

默認值:DISABLED

開啓:ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;(默認存放路徑OMF中的DB_CREATE_FILE_DEST)

設置文件路徑:

ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/oradata/MYSID/rman_change_track.f' REUSE;

關閉:ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

備份並檢查:bakcup check logical 備分內容;

不備份只是檢查文件:backup validate 備分內容;

若是檢查有報錯,查看:v$backup_corruption;v$copy_corruption

8. 備分內容:

整個數據庫:RMAN>backup database;

經典整庫備份:backup as compressed backupset database include current controlfile plus archivelog delete input;

tablespace:RMAN>backup tablespace 名字;

數據文件:RMAN>backup datafile n; (n:具體的數據文件編號select file_name,file_id,tablespace_name from dba_data_files;)

控制文件:RMAN>backup current controlfile;

或者RMAN>backup database include current controlfile;

日誌文件:RMAN>backup archivelog all;

或者RMAN>backup database plus archivelog;

參數文件:RMAN>backup spfile;

9. 還原

a. 徹底恢復

方法一:從最近的備份集恢復整個數據庫,數據庫會自動運行redo和archive日誌(徹底恢復):

SQL>shutdown immediate

SQL>startup mount

RMAN>restore database;

RMAN>recover database;

RMAN>sql 'alter database open';

方法二:從tag恢復整個數據庫,數據庫也會運行redo 和archive 日誌(徹底恢復),結果與上面的腳本同樣:

1. 查看標籤:

RMAN> list backupset summary;
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
25      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T104634
28      B  0  A DISK        25-JUL-11       1       1       NO         TAG20110725T104645
29      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T104711
30      B  F  A DISK        25-JUL-11       1       1       NO         TAG20110725T104713
31      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T105333
32      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T105350
33      B  1  A DISK        25-JUL-11       1       1       NO         TAG20110725T105353
34      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T105408
35      B  F  A DISK        25-JUL-11       1       1       NO         TAG20110725T105411
36      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T111403
37      B  1  A DISK        25-JUL-11       1       1       NO         TAG20110725T111405
38      B  A  A DISK        25-JUL-11       1       1       NO         TAG20110725T111421
39      B  F  A DISK        25-JUL-11       1       1       NO         TAG20110725T111423

2. 還原數據庫:

SQL>shutdown immediate;
SQL>startup mount;
RMAN>restore database from tag TAG20110725T104645;

RMAN> recover database from tag TAG20110725T104645;

RMAN> alter database open;

b. 不徹底恢復:

SQL>shutdown immediate;
SQL>startup mount;
RMAN>restore database from tag TAG20110725T104645;

RMAN>recover database until time "to_date('2011-08-04 15:37:25','yyyy/mm/dd hh24:mi:ss')";

RMAN>alter database open resetlogs;
注意:使用後全部的備份集都無效了,確保安全須要從新對數據庫進行全備(ORACLE10G以後,resetlog以前的備份仍是能夠用的)

關鍵表空間恢復(system / undotbs1 / sysaux):

SQL>shutdown abort

SQL>startup mount

RMAN>restore tablespace 名字;

RMAN>recover tablespace 名字;

RMAN>sql 'alter database open';

非關鍵表空間恢復(example / users ):

select * from v$datafile_header; 表空間與數據文件對應關係

SQL>alter database datafile 數字 offline;

RMAN>restore tablespace 名字;

RMAN>recover tablespace 名字;

SQL>alter database datafile 數字 online;

10. 刪除備份

全部backup備份集:delete backup;

全部copy備份機:delete copy;

特定備份機:delete backupset 19;

刪除根據保存規則可刪除文件:delete obsolete;

刪除過時的備份:

delete expired backupset;

delete expired copy;

11. RUN塊

例如:

RMAN> RUN {
          ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
          ALLOCATE CHANNEL c2 DEVICE TYPE sbt;
          ALLOCATE CHANNEL c3 DEVICE TYPE sbt;
          BACKUP
         INCREMENTAL LEVEL = 0
         FORMAT '/disk1/backup/df_%d_%s_%p.bak'
         (DATAFILE 1,4,5 CHANNEL c1)
         (DATAFILE 2,3,9 CHANNEL c2)
        (DATAFILE 6,7,8 CHANNEL c3);
          ALTER SYSTEM ARCHIVE LOG CURRENT;
       }
12. 外部變量:

語言:set nls_lang=american

日期:set nls_date_format=yyyy-mm-dd....

13. RMAN sciprt

前提條件:有catalog

寫法:(global表示能夠由多個數據庫調用)

create global script 名

comment "備註說明"

{腳本內容}

例如:

create global script abc

comment "test"

{backup current controlfile;}

調用:run {execute script 名}

例如:run {execute script abc;}

查看:print script 名

改寫:

replace global script 名

comment "備註說明"

{腳本內容}

刪除:delete script 名;

14. 永久保留備份

條件是備份不能保留在flash recovery area中;

a. 建立備份:

RUN


ALLOCATE CHANNEL c1 DEVICE TYPE disk format '/tmp/autobackup/%U';
BACKUP tablespace example;
}

b. 查找該備份:

list backupset of tablespace example;

c. 修改屬性爲永久

change backupset 編號 keep forever nologs;

15. 創建多個固定大小的備份

例如:example 測試備份大小是大於50M

run

{

allocate channel c1 device type disk maxpiecesize 10M format '/tmp/autobackup/%U';

backup tablespace example;

}

/tmp/autobackup目錄下有六個文件

16.運行腳本:backup recovery area

備分內容:

a. control file autobackup;

b. incremental backup sets

17.block change tracking

a. 針對整個數據庫;

b. 默認存放路徑:background_dump_dest

 

更多精彩Oracle  內容請關注我:

相關文章
相關標籤/搜索