1.在12c多租戶環境中,備份有兩個關鍵方面:CDB級別的備份和PDB級別的備份
一.CDB全備份
在大部分情況下,備份往往是CDB級別的.這就意味着CDB$ROOT,PDB$SEED,PDBS都會被備份.
CDB的備份包括的:控制文件,所有數據文件(包含CDB和PDB的),所有歸檔日誌的備份,建議對spfile也進行備份.
CDB的備份和12c以前的備份沒有什麼不同呢.
下面的所有的備份連接到的都是CDB
二.CDB部分備份
有些情況下,你不想對整個CDB進行備份.只想備份他的子集,可以使用pluggable database關鍵字.例如:
1)只備份某些PDB:
RMAN> backup pluggable database brent,testpdb1 format '/backup/pdb_%U_%T.bak';
2)只備份CDB$ROOT和PDB$SEED
這裏需要用雙引號.
RMAN> backup pluggable database "CDB$ROOT","PDB$SEED" format '/backup/test_%U_%T.bak';
還可以使用
backup database root來標識CDB$ROOT
3)備份某個特定的表空間.例如想備份PDB爲brent下的TEST表空間
RMAN> backup tablespace brent:"TEST" format '/backup/test_%U_%T.bak';Starting backup at 27-SEP-2019 22:13:20using channel ORA_DISK_1channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00036 name=/u01/app/oracle/oradata/ORA19C/brent/test.dbfchannel ORA_DISK_1: starting piece 1 at 27-SEP-2019 22:13:20channel ORA_DISK_1: finished piece 1 at 27-SEP-2019 22:13:21piece handle=/backup/test_0gucrhc0_1_1_20190927.bak tag=TAG20190927T221320 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
注意:必須指定的格式爲PDB:TABLESPACE,先指定PDB的名字.實測PDB後面的名字必須接雙引號或者單引號.並且區分大小寫.否則報錯,如下
RMAN> backup tablespace brent:test format '/backup/test_%U_%T.bak';RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-00558: error encountered while parsing input commandsRMAN-01009: syntax error: found "test": expecting one of: "double-quoted-string, identifier, single-quoted-string"RMAN-01007: at line 1 column 26 file: standard inputRMAN> backup tablespace brent:'test' format '/backup/test_%U_%T.bak';Starting backup at 27-SEP-2019 22:15:29using channel ORA_DISK_1RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of backup command at 09/27/2019 22:15:29RMAN-20202: Tablespace not found in the recovery catalogRMAN-06019: could not translate tablespace name "test"RMAN> backup tablespace brent:'TEST' format '/backup/test_%U_%T.bak';Starting backup at 27-SEP-2019 22:15:48using channel ORA_DISK_1channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00036 name=/u01/app/oracle/oradata/ORA19C/brent/test.dbfchannel ORA_DISK_1: starting piece 1 at 27-SEP-2019 22:15:49channel ORA_DISK_1: finished piece 1 at 27-SEP-2019 22:15:50piece handle=/backup/test_0iucrhgl_1_1_20190927.bak tag=TAG20190927T221549 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 27-SEP-2019 22:15:50
4)備份CDB和PDB中的test表空間
和上面同理,表空間的名字需要添加雙引號或者單引號,並且區分大小寫.備份PDB的表空間的時候,前面要加上PDB_NAME:
RMAN> backup tablespace "TEST",brent:"TEST" FORMAT '/backup/test_%U_%T.bak';Starting backup at 27-SEP-2019 22:19:57using channel ORA_DISK_1channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00037 name=/u01/app/oracle/oradata/ORA19C/test.dbfchannel ORA_DISK_1: starting piece 1 at 27-SEP-2019 22:19:57channel ORA_DISK_1: finished piece 1 at 27-SEP-2019 22:19:58piece handle=/backup/test_0kucrhod_1_1_20190927.bak tag=TAG20190927T221957 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00036 name=/u01/app/oracle/oradata/ORA19C/brent/test.dbfchannel ORA_DISK_1: starting piece 1 at 27-SEP-2019 22:19:59channel ORA_DISK_1: finished piece 1 at 27-SEP-2019 22:20:00piece handle=/backup/test_0lucrhof_1_1_20190927.bak tag=TAG20190927T221957 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 27-SEP-2019 22:20:00
5)備份數據文件
備份數據文件和以前的版本備份方法一直.
RMAN> backup datafile 2 format '/backup/test_%U_%T.bak';
6)查看備份
report schema; --查看需要備份的數據庫結構list backup of database;list backup of pluggable database brent;list backup of tablspace brent:'TEST';list backup of datafile 1;
三.PDB備份
1.PDB全備份
可以在CDB中像上面的,執行備份添加pluggable 關鍵字
backup pluggable databse brent,testpdb1;backup as copy pluggable database brent;
2.還可以直接連接到PDB上進行備份
需要通過tnsnames來連接PDB:
[oracle@ora19c backup]$ rman target sys/manager@brentRecovery Manager: Release 19.0.0.0.0 - Production on Sat Sep 28 00:22:15 2019Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.connected to target database: ORA19C:BRENT (DBID=1374011510)
如果連接到的是CDB,則顯示:
connected to target database: ORA19C (DBID=1064706437)
連接到PDB則顯示:
connected to target database: ORA19C:BRENT (DBID=1374011510)
一旦連接到了PDB上,則使用的備份命令和連接到CDB完全一樣.
備份數據庫直接使用backup database命令,這樣備份的數據庫就是 PDB,而不是CDB.連接到了PDB上就不能使用PLUGGABLE關鍵字了.
rman [oracle@ora19c ~]$ rman target sys/manager@brentRecovery Manager: Release 19.0.0.0.0 - Production on Sat Sep 28 00:27:02 2019Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.connected to target database: ORA19C:BRENT (DBID=1374011510)RMAN> backup database format '/backup/brent_%U_%T.bak';Starting backup at 28-SEP-2019 00:28:02using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=277 device type=DISKchannel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00010 name=/u01/app/oracle/oradata/ORA19C/brent/undotbs01.dbfinput datafile file number=00008 name=/u01/app/oracle/oradata/ORA19C/brent/system01.dbfinput datafile file number=00009 name=/u01/app/oracle/oradata/ORA19C/brent/sysaux01.dbfinput datafile file number=00036 name=/u01/app/oracle/oradata/ORA19C/brent/test.dbfinput datafile file number=00011 name=/u01/app/oracle/oradata/ORA19C/brent/users01.dbfchannel ORA_DISK_1: starting piece 1 at 28-SEP-2019 00:28:05channel ORA_DISK_1: finished piece 1 at 28-SEP-2019 00:28:08piece handle=/backup/brent_12ucrp8l_1_1_20190928.bak tag=TAG20190928T002805 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:03Finished backup at 28-SEP-2019 00:28:08
注意:連接到PDB上,可以備份控制文件,但是將不能備份歸檔日誌和刪除歸檔日誌,也不能備份參數文件
RMAN> backup archivelog all ;Starting backup at 28-SEP-2019 00:28:32using channel ORA_DISK_1skipping archived logs when connected to a PDBbackup cancelled because there are no files to backupFinished backup at 28-SEP-2019 00:28:32
四.CDB恢復
CDB的恢復和以前的版本一致.CDB的還原包含了所有的PDB.
五.PDB恢復
1.對PDB進行恢復還原.
如果一個PDB的文件丟失,我們不需要將CDB打開到mount,可以直接利用備份文件進行恢復.
下面模擬PDB的丟失.我們將PDB的數據文件目錄改名,然後創建相同的目錄
[oracle@ora19c ORA19C]$ mv brent brent.bak[oracle@ora19c ORA19C]$ lsbrent.bak control01.ctl control02.ctl pdbseed redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf test.dbf testpdb1 testpdb2 testpdb4 undotbs01.dbf users01.dbf[oracle@ora19c ORA19C]$ mkdir brent
查看PDB的備份
RMAN> list backup of pluggable database brent;
對PDB進行還原restore pluggable database brent;:
RMAN> restore pluggable database brent;Starting restore at 29-SEP-2019 23:16:12allocated channel: ORA_DISK_1channel ORA_DISK_1: SID=282 device type=DISKchannel ORA_DISK_1: starting datafile backup set restorechannel ORA_DISK_1: specifying datafile(s) to restore from backup setchannel ORA_DISK_1: restoring datafile 00008 to /u01/app/oracle/oradata/ORA19C/brent/system01.dbfchannel ORA_DISK_1: restoring datafile 00009 to /u01/app/oracle/oradata/ORA19C/brent/sysaux01.dbfchannel ORA_DISK_1: restoring datafile 00010 to /u01/app/oracle/oradata/ORA19C/brent/undotbs01.dbfchannel ORA_DISK_1: restoring datafile 00011 to /u01/app/oracle/oradata/ORA19C/brent/users01.dbfchannel ORA_DISK_1: restoring datafile 00036 to /u01/app/oracle/oradata/ORA19C/brent/test.dbfchannel ORA_DISK_1: reading from backup piece /backup/brent_34ud0tk0_1_1.bak
對PDB進行恢復recover pluggable database brent:
RMAN> recover pluggable database brent;Starting recover at 29-SEP-2019 23:19:33using channel ORA_DISK_1starting media recoverymedia recovery complete, elapsed time: 00:00:00Finished recover at 29-SEP-2019 23:19:34
打開PDB:
RMAN> alter pluggable database brent open;Statement processed
六.增量備份和差異備份
1.增量備份
第一次備份採用level 0級別備份
後面的備份每次都是基於上次備份的塊的變化備份.
1)創建0級別增量備份
backup incremental level 0 pluggable database brent;
2)創建1級增量備份
backup incremental level 1 pluggable database brent;
2. 累計增量備份
第一次備份採用level 0級別備份
後面的備份都是基於最近一次的level 0級別的備份的塊的變化進行備份.
累計增量和普通增量的區別在於普通的增量備份在恢復的時候需要level 0級備份和多次的增量備份.而累計增量備份只需要level 0級備份和最近一次的累計增量備份.
1)創建0級別增量備份
backup incremental level 0 pluggable database brent;
2)創建1級累計增量備份
backup cumulative incremental level 1 pluggable database brent;
3.塊變化跟蹤
當使用增量備份的時候,建議開啓塊變化跟蹤,需要在CDB級別開啓.塊變化跟蹤將會把變化的塊寫到文件中.
1)開啓塊跟蹤
OMF:
alter database enable block change tracking;
NOT OMF:
alter database enable block change tracking using file '/xxxx';
2)關閉塊跟蹤
alter databse disable block change tracking;
七.備份的其它優化
1.開啓多通道
可以在備份腳本中手工創建多個通道,例如
rman>allocate channel ch1 device type disk;rman>allocate channel ch2 device type disk;rman>allocate channel ch3 device type disk;
還可以配置rman,設置默認的備份通道:
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;new RMAN configuration parameters:CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;new RMAN configuration parameters are successfully storedreleased channel: ORA_DISK_1
2.開啓壓縮
如果空間不夠的情況下,可以開啓備份的壓縮.一般可以達到1:4左右的壓縮比.數據文件,全庫,歸檔都可以開啓壓縮
RMAN> backup as compressed backupset database format '/backup/%U.bak';
3.多分段備份
可以指定每個備份片的大小.例如:
RMAN>backup incremental level 1 section size 200M pluggable database brent;
如果對備份集開啓多分段備份,則默認設置filesperset 1
注意,如果設置的備份片的大小超過了要備份文件的大小,則會被忽略多分段備份.