RMAN備份與恢復


🔗參考鏈接:

https://www.cnblogs.com/WoLykos/p/11585744.html
https://www.oraclejsq.com/oraclebf/010400846.html
https://www.linuxidc.com/Linux/2018-11/155178.htm
http://blog.itpub.net/29785807/viewspace-2704547/
http://blog.itpub.net/30126024/viewspace-2145041/
https://www.cnblogs.com/wukc/p/13380580.html

 

RMAN是物理備份,可以做到任意時間點的恢復。

歸檔模式下,RMAN既可以冷備,也可以熱備

非歸檔模式下,RMAN只能冷備。


一、創建並注冊恢復目錄

  1. SQL窗口中創建恢復目錄所使用的表空間

SQL> create tablespace rman_tbsp datafile '/u01/app/oracle/oradata/orcl/rman_tbsp.dbf' size 1G autoextend on;
Tablespace created.

 

  2. 創建RMAN用戶並授權

SQL> create user rman_user identified by 123456 default tablespace rman_tbsp temporary tablespace temp;
SQL> grant connect,recovery_catalog_owner,resource to rman_user;

 

  3. shell窗口打開恢復管理器

rman target sysdba/123456 catalog rman_user/123456;

 

  4. 在RMAN模式下,創建恢復目錄

create catalog tablespace rman_tbsp;

 

  5. 在RMAN模式下,使用register命令注冊數據庫

register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

 

二、在歸檔模式下和非歸檔模式下備份數據庫(一致性與非一致性)

2.1一致性備份

數據庫一致性備份是指關閉了數據庫后備份所有數據文件和控制文件的方法。當使用SHUTDOWN 命令正常關閉了數據庫之后,所有數據庫文件的當前SCN 值完全一致,所以關閉后的數據庫備份被稱為數據庫一致性備份或者冷備份。 數據庫一致性備份既適用於ARCHIVELOG 也適用於NOARCHIVELOG

2.2非一致性備份

數據庫非一致性備份是指在OPEN 狀態下備份數據庫所有數據文件和控制文件的方法。

因為在OPEN 狀態下數據庫內容隨時都會改變,從而導致不同數據庫文件的當前SCN值完全不同,所以打開時的數據庫備份被稱為數據庫非一致性備份。進行數據庫一致性備份會中斷業務操作。而數據庫非一致性備份不會影響業務操作,因此建議你在實際環境中應該使用數據庫非一致性備份。

數據庫非一致性備份只適用於ARCHIVELOG模式

 

三、使用RMAN備份數據庫文件和歸檔日志

3.1 非一致性備份整個數據庫(打開狀態下全庫備份

  1. 啟動RMAN並連接到目標數據庫,輸入backup database命令備份數據庫。 在命令中可以指定format參數,為RMAN生成的每個備份片段指定一個唯一的名稱和存儲位置。

rman target sysdba/123456 catalog rman_user/123456;   #連接RMAN
RMAN> backup database format '/data/ora_bak/oradb_%Y_%M_%D_%U.bak'; 

--%U代表“一個唯一的文件名” unique
--等價於%u_%p_%c
-- %u 一個八個字符的名稱代表備份集與創建時間 
-- %p 該備份集中的備份片號,從1開始到創建的文件數
-- %c 備份片的拷貝數 

 

 

  2. 對於非一致性備份,必須在備份完畢后,手工對當前的redo-log進行歸歸檔。 因為在使用備份恢復數據庫時,需要使用當前重做日志中的重做記錄。(是不是與備份過程中發生的數據變化相關???)

RMAN> sql 'alter system archive log current';

sql statement: alter system archive log current


  3. 在RMAN中執行如下命令,查看建立的備份集與備份片段的信息

RMAN> list backup of database;


List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
663     Full    1.92G      DISK        00:00:09     15-NOV-21      
        BP Key: 665   Status: AVAILABLE  Compressed: NO  Tag: TAG20211115T105908
        Piece Name: /data/ora_bak/oradb_2021_11_15_010e7rjs_1_1.bak
  List of Datafiles in backup set 663
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/system01.dbf
  2       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/sysaux01.dbf
  3       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/undotbs01.dbf
  4       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/users01.dbf
  5       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/example01.dbf
  6       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/test01.dbf
  7       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/undotbs02.dbf
  8       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/testtbs01.dbf
  9       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/rman_tbsp.dbf

 

3.2 一致性狀態下的全庫備份(脫機全庫備份)

RMAN> shutdown immediate
RMAN> startup mount
RMAN> backup database format '/data/cool_bak/oradb_%d_%s.bak';
RMAN> alter database open;

3.3 非一致性備份表空間

  1. 如果RMAN在聯機狀態下,進行表空間備份,不需要在備份前執行alter tablespace xxx begin backup;將表空間設置為備份模式。

RMAN> backup tablespace testtbs,tb1 format '/data/tbs_bak/%d_%p_%t_%c.dbf';

-- 注:不是表空間物理文件的名字,而是庫中tablespace_name

 

  2. 查看建立的表空間備份信息

RMAN> list backup of tablespace testtbs,tb1;


List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
663     Full    1.92G      DISK        00:00:09     15-NOV-21      
        BP Key: 665   Status: AVAILABLE  Compressed: NO  Tag: TAG20211115T105908
        Piece Name: /data/ora_bak/oradb_2021_11_15_010e7rjs_1_1.bak
  List of Datafiles in backup set 663
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  6       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/test01.dbf
  8       Full 6782909    15-NOV-21 /u01/app/oracle/oradata/orcl/testtbs01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
707     Full    1.91G      DISK        00:00:08     15-NOV-21      
        BP Key: 712   Status: AVAILABLE  Compressed: NO  Tag: TAG20211115T112027
        Piece Name: /data/cool_bak/oradb_ORCL_3.bak
  List of Datafiles in backup set 707
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  6       Full 6785408    15-NOV-21 /u01/app/oracle/oradata/orcl/test01.dbf
  8       Full 6785408    15-NOV-21 /u01/app/oracle/oradata/orcl/testtbs01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
709     Full    2.04M      DISK        00:00:00     15-NOV-21      
        BP Key: 714   Status: AVAILABLE  Compressed: NO  Tag: TAG20211115T113955
        Piece Name: /data/tbs_bak/ORCL_1_1088681996_1.dbf
  List of Datafiles in backup set 709
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  6       Full 6788370    15-NOV-21 /u01/app/oracle/oradata/orcl/test01.dbf
  8       Full 6788370    15-NOV-21 /u01/app/oracle/oradata/orcl/testtbs01.dbf

 

3.4 備份數據文件

在使用backup datafile命令對單獨的數據文件進行備份。備份數據時,既可以使用其名稱,也可以使用其編號來指定數據文件。

RMAN> backup datafile 1,2,3 format '/data/dbf_bak/dbf_%Y_%M_%D_%U.bak';
RMAN> list backup of datafile 1,2,3;

 

3.5 備份控制文件

  1. 自動備份:開啟該參數后,當在RMAN中執行backup或copy命令時,RMAN都會對控制文件進行一次自動備份。可以通過format命令指定其存儲路徑。

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data/ctl_bak_%T_%F';

 

  2. 單獨手動備份

RMAN> backup current controlfile format '/data/contrl_bak/ctl_bak_%T';

 

  3. 在執行其他備份的同時,備份控制文件

RMAN> backup tablespace tb1 include current controlfile;

 

3.6 備份歸檔重做日志

  1. 單獨備份重做日志

RMAN> backup archivelog all format '/data/arch_bak/arch_%U.bak';

 

  2. 執行其他備份的同時,備份歸檔日志

backup database current controlfile **plus archivelog** format '/db/backup/data_arch%U.bak'

 

四、RMAN恢復

完全恢復和不完全恢復;

restore和recover:

  • restore 是還原,文件級的恢復。就是物理文件還原。

  • recover 是恢復,數據級的恢復。邏輯上恢復,比如應用歸檔日志、重做日志,全部同步,保持一致。

常用命令:

  1. restore 命令:用於還原已經備份的數據文件。
    (1)restore database 還原所有的數據文件。
    (2)restore tablespace 還原特定表空間的數據文件。
    (3)restore datafile 還原特定的數據文件。
    (4)restore controlfile 還原控制文件。
    (5)restore archivelog 還原歸檔日志文件。

  2. recover 命令:當數據庫需要應用歸檔日志文件恢復數據文件時,使用recover命令。使用該命令數據庫系統會自動應用歸檔的日志文件。
    (1)recover database 恢復所有的數據文件。
    (2)recover tablespace 恢復特定表空間的數據文件。
    (3)recover datafile 恢復特定的數據文件。

4.1 歸檔模式下的完全恢復

  1. 啟動RMAN,連接到目標數據庫

rman target sysdba/123456 catalog rman_user/123456;

  2. 對USER表空間進行備份

RMAN> backup tablespace USERS format '/data/tbs_bak/user_tbs.bak';

  3. 模擬介質故障,關閉目標數據庫,並通過系統刪除USER表空間的物理文件;

RMAN> shutdown immediate
shell> mv users01.dbf users01.dbf.bak

  4. 啟動數據庫到mount狀態下

RMAN> startup mount

  5. 運行如下命令恢復USER表空間

RMAN> restore tablespace users;
RMAN> recover tablespace users;

  6. 恢復完成后打開數據庫。

alter database open;

 

 

 

4.2 歸檔模式下的不完全恢復

分為兩種:基於時間的不完全恢復、基於SCN號的不完全恢復。

在對數據庫執行不完全恢復后,必須使用resetlogs命令打開數據庫,這將導致以前的任何重做日志都變得無效。如果恢復不成功,那么將不能再次嘗試恢復,因為重做日志都是無效的。這就需要在不完全恢復之前從備份中恢復控制文件、數據文件以及重做日志文件,以便再次嘗試恢復過程。

4.2.1基於時間的不完全恢復

 

 

 

  1. 執行備份

backup database current controlfile plus archivelog format '/data/full_bak/full_%U.bak';

 

  2. 啟動數據庫到mount狀態

startup mount;

 

  3. 執行基於時間的不完全恢復

run{
 sql'alter session set nls_date_language="AMERICAN"';
 sql'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
 set until time '2021-11-16 10:00:18';
 allocate channel ch_1 type disk;
 allocate channel ch_2 type disk;
 restore database;
 recover database;
 sql'alter database open resetlogs';
 }
 

 

  4. 啟動並檢驗

 

 

4.2.2基於SCN的不完全恢復

待查閱資料(詳解SCN,如何獲取SCN號)

 

附:RMAN備份FORMAT格式中%的含義 

%a:Oracle數據庫的activation ID即RESETLOG_ID。
%c:備份片段的復制數(從1開始編號,最大不超過256)。
%d:Oracle數據庫名稱。
%D:當前時間中的日,格式為DD。
%e:歸檔序號。 %f:絕對文件編號。
%F:基於"DBID+時間"確定的唯一名稱,格式的形式為c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 為該數據庫的DBID,YYYYMMDD為日期,QQ是一個1~256的序列。
%h:歸檔日志線程號。
%I:Oracle數據庫的DBID。
%M:當前時間中的月,格式為MM。
%N:表空間名稱。
%n:數據庫名稱,並且會在右側用x字符進行填充,使其保持長度為8。比如數據庫名JSSBOOK,則生成的名稱則是JSSBOOKx。
%p:備份集中備份片段的編號,從1開始。
%s:備份集號。
%t:備份集時間戳。
%T:當前時間的年月日格式(YYYYMMDD)。
%u:是一個由備份集編號和建立時間壓縮后組成的8字符名稱。利用%u可以為每個備份集生成一個唯一的名稱。
%U:默認是%u_%p_%c的簡寫形式,利用它可以為每一個備份片段(即磁盤文件)生成一個唯一名稱,這是最常用的命名方式,執行不同備份操作時,生成的規則也不同,如下所示: 生成備份片段時,%U=%u_%p_%c; 生成數據文件鏡像復制時,%U=data-D-%d_id-%I_TS-%N_FNO-%f_%u; 生成歸檔文件鏡像復制時,%U=arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u; 生成控制文件鏡像復制時,%U=cf-D_%d-id-%I_%u。
%Y:當前時間中的年,格式為YYYY。 注:如果在BACKUP命令中沒有指定FORMAT選項,則RMAN默認使用%U為備份片段命名。


免責聲明!

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



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