相比exp,expdp,imp,impdp導入導出工具,作爲運維人員,很有必要學習RMAN的備份與恢復。
一、備份整個數據庫
[oracle@test11g ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Fri Jul 12 09:12:29 2019
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1530400561)
%s指定備份集,%p指定碎片編號,%t指定時間戳
RMAN> backup database format '/home/oracle/rman_back_%s_%p_%t';
Starting backup at 12-JUL-19
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=/u01/app/oraData/orcl/CMS69_DATA.dbf
input datafile file number=00001 name=/u01/app/oraData/orcl/system01.dbf
input datafile file number=00002 name=/u01/app/oraData/orcl/sysaux01.dbf
input datafile file number=00003 name=/u01/app/oraData/orcl/undotbs01.dbf
input datafile file number=00007 name=/u01/app/oraData/undoTbs/hbk_undotbs.dbf
input datafile file number=00005 name=/u01/app/oraData/bak/hbk_data.dbf
input datafile file number=00008 name=/u01/app/oraData/undoTbs/hbk_undotbs_auto
input datafile file number=00004 name=/u01/app/oraData/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 12-JUL-19
channel ORA_DISK_1: finished piece 1 at 12-JUL-19
piece handle=/home/oracle/rman_back_2_1_1013419522 tag=TAG20190712T092522 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:13:06
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 12-JUL-19
channel ORA_DISK_1: finished piece 1 at 12-JUL-19
piece handle=/home/oracle/rman_back_3_1_1013420308 tag=TAG20190712T092522 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 12-JUL-19
可以看到已經成功備份完成
[root@test11g oracle]# ll -sh /home/oracle/rman_back_*
2.2G -rw-r----- 1 oracle oinstall 2.2G 7月 12 09:38 /home/oracle/rman_back_2_1_1013419522
9.5M -rw-r----- 1 oracle oinstall 9.5M 7月 12 09:38 /home/oracle/rman_back_3_1_1013420308
二、備份單個表空間
先講解下sqlplus的備份方式,然後對比下RMAN,讓你體會RMAN是多麼簡單。
2.1 sqlplus備份單個表空間
由提供的表空間名,比如HBK_DATA
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
HBK_TEMP
HBK_DATA
CMS69_DATA
MYTEMP1
MYTEMP2
HBK_UNDOTBS
TABLESPACE_NAME
------------------------------
HBK_UNDOTBS_AUTO
12 rows selected.
需要知道HBK_DATA表空間由哪些數據文件組成
SQL> select tablespace_name,file_name from sys.dba_data_files where tablespace_name = 'HBK_DATA';
TABLESPACE_NAME
------------------------------------------------------------------------------------------------------------------------------------------------------
FILE_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HBK_DATA
/u01/app/oraData/bak/hbk_data.dbf
可知HBK_DATA有一個數據文件組成,把表空間置於備份模式
SQL> alter tablespace HBK_DATA begin backup;
Tablespace altered.
然後使用操作系統命令把數據庫文件/u01/app/oraData/bak/hbk_data.dbf複製到備份路徑中。
並退出備份模式,回到正常狀態
SQL> alter tablespace HBK_DATA end backup;
Tablespace altered.
執行手工歸檔
SQL> alter system archive log current;
System altered.
這樣纔算備份單個表空間完成,是不是感覺比較多的步驟。
2.2RMAN備份單個表空間
RMAN> backup tablespace HBK_DATA format '/home/oracle/tbs_hbk_data_%s_%p_%t';
Starting backup at 12-JUL-19
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00005 name=/u01/app/oraData/bak/hbk_data.dbf
channel ORA_DISK_1: starting piece 1 at 12-JUL-19
channel ORA_DISK_1: finished piece 1 at 12-JUL-19
piece handle=/home/oracle/tbs_hbk_data_4_1_1013422052 tag=TAG20190712T100731 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 12-JUL-19
RMAN>
一條命令搞定手工。
三、備份單個數據文件
知道了數據文件的名稱的情況下,使用RMAN備份數據文件也很簡單
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oraData/orcl/users01.dbf
/u01/app/oraData/orcl/undotbs01.dbf
/u01/app/oraData/orcl/sysaux01.dbf
/u01/app/oraData/orcl/system01.dbf
/u01/app/oraData/bak/hbk_data.dbf
/u01/app/oraData/orcl/CMS69_DATA.dbf
/u01/app/oraData/undoTbs/hbk_undotbs.dbf
/u01/app/oraData/undoTbs/hbk_undotbs_auto
8 rows selected.
比如我們備份/u01/app/oraData/bak/hbk_data.dbf數據文件,其實備份數據文件是備份表空間的一個分支,因爲一個表空間有可能由多個數據文件組成,有的情況下,只需要備份單個數據文件即可。
RMAN> backup datafile '/u01/app/oraData/bak/hbk_data.dbf' format '/home/oracle/data_file_hbk_data_%s_%p_%t';
Starting backup at 12-JUL-19
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00005 name=/u01/app/oraData/bak/hbk_data.dbf
channel ORA_DISK_1: starting piece 1 at 12-JUL-19
channel ORA_DISK_1: finished piece 1 at 12-JUL-19
piece handle=/home/oracle/data_file_hbk_data_5_1_1013422543 tag=TAG20190712T101543 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 12-JUL-19
RMAN>
可以看到此次備份的數據文件跟上面備份表空間的大小一樣,因爲HBK_DATA表空間只有一個數據文件/u01/app/oraData/bak/hbk_data.dbf組成
[root@test11g oracle]# ll -h |grep hbk
-rw-r----- 1 oracle oinstall 1.7M 7月 12 10:15 data_file_hbk_data_5_1_1013422543
-rw-r----- 1 oracle oinstall 1.7M 7月 12 10:07 tbs_hbk_data_4_1_1013422052
四、備份歸檔日誌文件
4.1手工備份歸檔日誌文件(不推薦,還是RMAN好用)
使用如下命令查看數據庫有哪些歸檔日誌文件,並使用操作系統命令進行復製備份
select thread#,sequence#,name from v$archived_log;
4.2RMAN備份歸檔日誌文件
RMAN> backup archivelog all format '/home/oracle/log_%U';
Starting backup at 12-JUL-19
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=66 RECID=1 STAMP=1008772006
input archived log thread=1 sequence=67 RECID=2 STAMP=1008784813
input archived log thread=1 sequence=68 RECID=3 STAMP=1008799278
input archived log thread=1 sequence=69 RECID=4 STAMP=1008824423
input archived log thread=1 sequence=70 RECID=5 STAMP=1008842431
input archived log thread=1 sequence=71 RECID=6 STAMP=1008853214
input archived log thread=1 sequence=72 RECID=7 STAMP=1008885662
input archived log thread=1 sequence=73 RECID=8 STAMP=1008891317
input archived log thread=1 sequence=74 RECID=9 STAMP=1008930478
input archived log thread=1 sequence=75 RECID=10 STAMP=1008939662
.......中間省略了好多
channel ORA_DISK_1: starting piece 1 at 12-JUL-19
channel ORA_DISK_1: finished piece 1 at 12-JUL-19
piece handle=/home/oracle/log_06u6f72v_1_1 tag=TAG20190712T102630 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:18:53
Finished backup at 12-JUL-19
RMAN>
%U表示將產生唯一文件名
五、備份控制文件
備份控制文件有好多方法,但是我還是推薦RMAN,哈哈
5.1使用sqlplus
SQL> alter database backup controlfile to '/home/oracle/conf.bak';
5.2也可以備份到跟蹤文件中,在跟蹤文件中將生成創建控制文件的腳本
SQL> alter database backup controlfile to trace;
5.3RMAN備份控制文件(強力推薦)
也可以指定文件位置
RMAN> backup current controlfile;
Starting backup at 12-JUL-19
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=37 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 12-JUL-19
channel ORA_DISK_1: finished piece 1 at 12-JUL-19
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2019_07_12/o1_mf_ncnnf_TAG20190712T113853_glj06l08_.bkp tag=TAG20190712T113853 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:09
Finished backup at 12-JUL-19
RMAN> backup current controlfile format '/home/oracle/conf.bak';
Starting backup at 12-JUL-19
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 12-JUL-19
channel ORA_DISK_1: finished piece 1 at 12-JUL-19
piece handle=/home/oracle/conf.bak tag=TAG20190712T114001 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 12-JUL-19
5.4啓用控制文件的自動備份,當使用RMAN執行備份的時候,RMAN會自動備份控制文件(也會自動備份SPFILE)
RMAN> configure controlfile autobackup on;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored
六、備份spfile
有可以加format指定具體備份文件位置
RMAN> backup spfile ;
Starting backup at 12-JUL-19
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 12-JUL-19
channel ORA_DISK_1: finished piece 1 at 12-JUL-19
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2019_07_12/o1_mf_nnsnf_TAG20190712T114424_glj0jrgr_.bkp tag=TAG20190712T114424 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 12-JUL-19
Starting Control File and SPFILE Autobackup at 12-JUL-19
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/autobackup/2019_07_12/o1_mf_s_1013427865_glj0jspl_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 12-JUL-19
後面的控制文件備份是因爲設置了configure controlfile autobackup on;