系統環境:
系統環境先放在前面,是為了後面說明概念時,可以加以標示註解,以便更加瞭解 RMAN 的各個環節。
1. Oracle DB 11g on Windows:記錄 RMAN 所有備份的記錄,在 RMAN 稱為 RMAN Repository (RMAN 恢復目錄資料庫)。
ORACLE_SID:RMANDB
執行記錄 recovery catalog 的帳號/密碼:RMAN_USER/RMAN_PWD
2. Taget Database (要備份的目標資料庫):
Oracle DB 12c on Linux:正式資料庫,日常的交易要作備份。
ORACLE_SID:orcl
執行備份的帳號/密碼:sys/oracle
3. 兩者的 tnsnames.ora 均要有雙方連線的資訊:
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb12clinux.domain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) RMANDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rmandb.domain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = rmandb.domain) ) ) |
RMAN 概念:
Oracle Database 的備份,一般建議是利用 RMAN 來作業,一來可以由系統自行管理,二來也可以省掉自已下一堆的指令。在建立 RMAN 的機制前,下面幾個概念要有:
1. Target Database:(目標資料庫):本實例為 ORACLE_SID:orcl
就是需要RMAN對其進行備份與恢復的資料庫,RMAN 可以備份資料檔案,控制檔,歸檔日誌,spfile.(注意:RMAN不能用於備份連線日誌、初始化參數檔:pfile 和命令檔)
2. recovery catalog(恢復目錄):
用來保存備份與恢復資訊的一個資料庫,不建議建在目標資料庫上。RMAN 利用恢復目錄記載的資訊去判斷如何執行需要的備份恢復操作。
如果不採用恢復目錄(nocatalog),備份資訊可以存在於目標資料庫的 control file 中。如果存放在目標資料庫的 control file 中,控制項檔會不斷增長,不能保存 RMAN 的Script. CONTROL_FILE_RECORD_KEEP_TIME (default=7):控制項檔中 RMAN 資訊保存的最短時間。
使用恢復目錄(catalog)的優勢: 可以存儲腳本,並記載較長時間的備份恢復操作。
3. RMAN Repository(RMAN 恢復目錄資料庫): 本實例為 ORACLE_SID:rmandb
存放 recovery catalog(恢復目錄)的資料庫。建議為 recovery catalog(恢復目錄)資料庫創建一個單獨的資料庫。
設置 RMAN ( Configuration RMAN )實作:
Step 01: 在資料庫 ORACLE_SID:orcl 建立 RMAN 所需的環境
1.) 連上資料庫:rmandb
C:\>sqlplus /nolog SQL> connect / as sysdba |
2.) 建立 tablespace:RMAN_TS
CREATE TABLESPACE RMAN_TS DATAFILE 'C:\oradb11g\oradata\rmandb\RMAN_DATA.DBF' SIZE 100M AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE LOGGING ONLINE SEGMENT SPACE MANAGEMENT AUTO; |
3.) 建立執行記錄 recovery catalog 的帳號:RMAN_USER,並給 CONNECT,RESOURCE,RECOVERY_CATALOG_OWNER 這三個權限
CREATE USER RMAN_USER IDENTIFIED BY RMAN_PWD DEFAULT TABLESPACE RMAN_TS TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK ; GRANT CONNECT,RESOURCE,RECOVERY_CATALOG_OWNER TO RMAN_USER; |
註:Oracle Database 11g 以後,帳號/密碼 有分大小寫,(To Enable/ Disable set SEC_CASE_SENSITIVE_LOGON to TRUE/ FALSE ,預設:TRUE ) 若要關閉需用指令 alter system set sec_case_sensitive_logon=false scope=both;
4.) 利用帳號:RMAN_USER 來建立 recovery catalog(恢復目錄)
C:\>rman catalog RMAN_USER/RMAN_PWD@rmandb RMAN> create catalog; |
Step 02: 連到目標資料庫 Connect to the target database
1.a ) 若是在 ORACLE_SID:rmandb 資料庫主機上作業
C:\>rman catalog RMAN_USER/RMAN_PWD@rmandb RMAN> connect target sys/oracle@orcl |
1.b ) 若是在 ORACLE_SID: orcl (目標資料庫)資料庫主機上作業
[oracle@oradb12clinux ~]$ echo $ORACLE_SID RMAN> connect target; |
Step 03: 註冊目標資料庫 Register the database
RMAN> register database; database registered in recovery catalog starting full resync of recovery catalog full resync complete |
Step04: 驗證是否有註冊成功
RMAN> list incarnation of database; List of Database Incarnations DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time ------- ------- -------- ---------------- ------------ -------------- ---------- 1 2 ORCL 1357434876 CURRENT 1720082 24-OCT-13 |
PS: 也可以用SQL:select * from rc_database;
RMAN 備份實作:
0.) 先將 ORACLE_SID: orcl 改為 archive log mode
$ sqlplus / as sysdba #查看現在資料庫的備份狀況 #查看 archive log 預設備份的目錄 #為了方便觀察, 改變備份目錄, 並關閉資料庫 SQL> alter system set db_recovery_file_dest='/u01/arclog' scope=both; # 設定資料庫的模式為 archive log mode SQL> archive log list; #強制產生 archive log file #到 OS 去查看是否有 archive log file 產生 |
註: log_archive_format 的參數設定請參考: http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams103.htm
1.) 建立一個全備份的 script (Script 會存在RC_STORED_SCRIPT及RC_STORED_SCRIPT_LINE的table中): fullbackup
# 先將之前的 script 刪除 (若有的話) # 建立一個資料庫全備份的 script (含control file & spfile) |
2.) 查看 RMAN 的備份 script
RMAN> connect target; RMAN> print script fullbackup; 或 $ sqlplus RMAN_USER/RMAN_PWD@rmandb
|
3.) 執行備份 script
RMAN> run {execute script fullbackup;} executing script: fullbackup allocated channel: d1 channel d1: SID=416 device type=DISK Starting backup at 07-NOV-13 channel d1: starting incremental level 0 datafile backup set channel d1: specifying datafile(s) in backup set input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf input datafile file number=00006 name=/u01/app/oracle/oradata/orcl/users01.dbf channel d1: starting piece 1 at 07-NOV-13 channel d1: finished piece 1 at 07-NOV-13 piece handle=/u01/backdb/ORCL_7_1 tag=TAG20131107T145348 comment=NONE => 此為RMAN備份的檔名:/u01/backdb/ORCL_7_1 channel d1: backup set complete, elapsed time: 00:00:45 channel d1: starting incremental level 0 datafile backup set channel d1: specifying datafile(s) in backup set input datafile file number=00009 name=/u01/app/oracle/oradata/orcl/pdborcl/sysaux01.dbf input datafile file number=00011 name=/u01/app/oracle/oradata/orcl/pdborcl/example01.dbf input datafile file number=00008 name=/u01/app/oracle/oradata/orcl/pdborcl/system01.dbf input datafile file number=00010 name=/u01/app/oracle/oradata/orcl/pdborcl/SAMPLE_SCHEMA_users01.dbf channel d1: starting piece 1 at 07-NOV-13 channel d1: finished piece 1 at 07-NOV-13 piece handle=/u01/backdb/ORCL_8_1 tag=TAG20131107T145348 comment=NONE => 此為RMAN備份的檔名:/u01/backdb/ORCL_8_1 channel d1: backup set complete, elapsed time: 00:00:35 channel d1: starting incremental level 0 datafile backup set channel d1: specifying datafile(s) in backup set input datafile file number=00007 name=/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf channel d1: starting piece 1 at 07-NOV-13 channel d1: finished piece 1 at 07-NOV-13 piece handle=/u01/backdb/ORCL_9_1 tag=TAG20131107T145348 comment=NONE => 此為RMAN備份的檔名:/u01/backdb/ORCL_9_1 channel d1: backup set complete, elapsed time: 00:00:25 channel d1: starting incremental level 0 datafile backup set channel d1: specifying datafile(s) in backup set including current control file in backup set channel d1: starting piece 1 at 07-NOV-13 channel d1: finished piece 1 at 07-NOV-13 piece handle=/u01/backdb/ORCL_10_1 tag=TAG20131107T145348 comment=NONE channel d1: backup set complete, elapsed time: 00:00:01 Finished backup at 07-NOV-13 Starting Control File and SPFILE Autobackup at 07-NOV-13 piece handle=/u01/arclog/ORCL/autobackup/2013_11_07/o1_mf_s_830876136_97pgc919_.bkp comment=NONE => 此為RMAN 備份 Control File and SPFILE file :/u01/arclog/ORCL/autobackup/2013_11_07/o1_mf_s_830876136_97pgc919_.bkp Finished Control File and SPFILE Autobackup at 07-NOV-13 sql statement: alter system archive log current released channel: d1 |
基本上 Oracle Database 資料庫在 RMAN 的備份,ORACLE_SID: orcl (目標資料庫)應該是處於 Archive log mode 才可以線上備份。以上是 Oracle RMAN 的基本概念與資料庫全備份實作
附註:
若您是使用 Oracle XE 版本的資料庫,應該會出現下列的訊息,代表資料庫 ORACLE_SID:xe 是11g,但目標資料庫 ORACLE_SID:orcl 是 12c ,package RMAN_XE.DBMS_RCVCAT 不相容。所以不能用 oracle XE 版本的資料庫來作。
在資料庫 ORACLE_SID:xe 是11g 看到的訊息: database registered in recovery catalog
在資料庫 ORACLE_SID:orcl 是 12c 看到的訊息: |
就算用指令UPGRADE CATALOG; 來升級 catalog,雖然會成功,也不能使用
RMAN> UPGRADE CATALOG; recovery catalog owner is RMAN_XE enter UPGRADE CATALOG command again to confirm catalog upgrade RMAN> UPGRADE CATALOG; recovery catalog upgraded to version 11.02.00.02 DBMS_RCVMAN package upgraded to version 11.02.00.02 DBMS_RCVCAT package upgraded to version 11.02.00.02 |
參考:
http://fecbob.pixnet.net/blog/post/38195291-oracle-rman%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5