【RMAN】在多租戶環境下的RMAN備份及恢復
1. 什麼是CDB
CDB(container database, 容器庫 ) 。從 12c 版本開始, Oracle 資料庫只能有兩種形式: non-CDB or CDB 。 12c 之前建立的資料庫都是 Non-cdb 的。一個 CDB 可以包含 0 個、 1 個或多個 PDB(Pluggable database, 插拔庫 )
CDB 包含以下內容:
- 一個 ROOT 容器( CDB$ROOT )包含 system 、 sysaux 、 undo 、 temp 表空間,控制檔案、 redologs
- 一個種子容器( PDB 的模板, PDB$SEED )包含 system 、 sysaux 、 temp 、 example 表空間,並且建立新的 PDB 都是以種子容器作為模板。
2. 什麼是PDB
PDB(pluggable database, 插拔庫 ),PDB 是使用者建立的容器,用於分配特定的業務。
PDB 包括以下內容:
- system 、 sysaux 、 temp 、 undo 表空間
- 使用者建立的業務表空間
PDB 的 RMAN 備份
首先,使用RMAN 的使用者必須擁有 sysdba 許可權或 sysbackup 許可權。 RMAN 可以執行在 ROOT 容器:
$ rman target sys/password@CDB
$ rman target /
或者執行在PDB
$ rman target sys/password@PDB1
當連線到PDB ,所有的命令都只會包含在該 PDB 內;當連線到 ROOT, 命令會包含 CDB 中的任何檔案,除非設定 PDB 名字限定。
rman 命令 report schema 可以用於確認 CDB 中的所有檔案,示例如下:
$ rman target /
RMAN> report schema;
using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name SBDB
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 930 SYSTEM YES /u01/app/oracle/oradata/SBDB/system01.dbf
3 1040 SYSAUX NO /u01/app/oracle/oradata/SBDB/sysaux01.dbf
4 330 UNDOTBS1 YES /u01/app/oracle/oradata/SBDB/undotbs01.dbf
5 270 PDB$SEED:SYSTEM NO /u01/app/oracle/oradata/SBDB/pdbseed/system01.dbf
6 330 PDB$SEED:SYSAUX NO /u01/app/oracle/oradata/SBDB/pdbseed/sysaux01.dbf
7 5 USERS NO /u01/app/oracle/oradata/SBDB/users01.dbf
8 100 PDB$SEED:UNDOTBS1 NO /u01/app/oracle/oradata/SBDB/pdbseed/undotbs01.dbf
9 290 PDB1:SYSTEM YES /u01/app/oracle/oradata/SBDB/pdb1/system01.dbf
10 370 PDB1:SYSAUX NO /u01/app/oracle/oradata/SBDB/pdb1/sysaux01.dbf
11 100 PDB1:UNDOTBS1 YES /u01/app/oracle/oradata/SBDB/pdb1/undotbs01.dbf
12 5 PDB1:USERS NO /u01/app/oracle/oradata/SBDB/pdb1/users01.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 32 TEMP 32767 /u01/app/oracle/oradata/SBDB/temp01.dbf
2 36 PDB$SEED:TEMP 32767 /u01/app/oracle/oradata/SBDB/pdbseed/temp012.dbf
3 128 PDB1:TEMP 32767 /u01/app/oracle/oradata/SBDB/pdb1/temp01.dbf
report schema 命令是唯一可以輕鬆確認檔案所屬 PDB 名稱的命令。連線到 PDB ,可以僅檢視 PDB 的資料檔案列表:
$ rman target sys/ password @PDB1
RMAN> report schema;
using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name SBDB
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
9 290 SYSTEM NO /u01/app/oracle/oradata/SBDB/pdb1/system01.dbf
10 370 SYSAUX NO /u01/app/oracle/oradata/SBDB/pdb1/sysaux01.dbf
11 100 UNDOTBS1 NO /u01/app/oracle/oradata/SBDB/pdb1/undotbs01.dbf
12 5 USERS NO /u01/app/oracle/oradata/SBDB/pdb1/users01.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
3 128 TEMP 32767 /u01/app/oracle/oradata/SBDB/pdb1/temp01.dbf
1. 完整的CDB 備份
執行以下命令進行CDB 備份:
$ rman target sys/password@CDB
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
RMAN> LIST BACKUP OF DATABASE;
執行上述命令檢視當前的備份集,會發現對CDB 的備份會備份 CDB$ROOT 、 PDB$SEED 、 ALL PDBS 。
2. 單獨的CDB 備份
$ rman target sys/oracle@ C DB
RMAN> BACKUP PLUGGABLE DATABASE PDB1 TAG'PDB1';
RMAN> LIST BACKUP;
我們在備份的時候可以不需要設定tag, 這裡是為了更加顯著的展示 PDB 的備份。
RMAN LIST BACKUP 命令顯示 RMAN 備份屬於哪個資料庫或 PDB 。
如果備份路徑是FRA(Fast Recovery Area) ,那麼備份的路徑名字將會是 GUID 。所以在有必要的情況下,我們可以透過以下方式確定備份集屬於哪一個 PDB ;
SQL> SET LINES IZE 150
SQL> COL NAME FOR A10
SQL> SELECT CON_ID, DBID, GUID, NAME FROM v$pdbs;
CON_ID DBID GUID NAME
---------- ---------- ------------------------------ ------------
2 943290432 B5A0DD07BB5F6DFBE0536D1410AC6EEB PDB$SEED
3 1666453508 B5A10FCFB4980964E0536D1410AC7D46 PDB1
在上面的例子中,該PDB 的 GUID 為“ B5A10FCFB4980964E0536D1410AC7D46 ”
3. 單獨的PDB 備份
備份PDB 的 system/sysaux
$ rman target sys/password@CDB
RMAN> backup tablespace PDB1:system,PDB1:sysaux;
由於file id 是唯一的,所以可以指定 file id 進行備份
-- 先查出需要備份的檔案
SQL> select file_id,file_name from dba_data_files;
-- 針對 file_id 進行 rman 備份
RMAN> backup datafile 9,10;
PDB 的 RMAN 恢復
1. PDB 丟失 system 資料檔案的恢復
在這種情況, 理論上 CDB 和其他的 PDB 不會受影響,只有該 PDB 不可用,必須從 ROOT 容器開始恢復。然而, PDB 的 system 資料檔案丟失與 CDB 的 system 資料檔案丟失一樣嚴重,可能會導致不可預測的結果,大多數情況下會使整個 CDB 崩潰,即所有的 PDB 都不可用。
在這種情況下,需要將CDB 進入 Mount 狀態,然後恢復 system 資料檔案。 Oracle 說會在以後的版本對這個功能進行增強,意味著丟失 PDB 的 system 資料檔案不會再對 CDB 或其他 PDB 造成影響。
$ sqlplus / as sysdba
SQL> startup mount;
$ rman target /
RMAN> RESTORE DATAFILE 8;
RMAN> RECOVER DATAFILE 8;
RMAN> ALTER PLUGGABLE DATABASE PDB1 OPEN;
2. PDB 丟失非系統表空間資料檔案,例如 user 表空間資料檔案
需要根據當前的情況,檔案可能是offline 或沒有 offline
$ rman sys/ password @ PDB1
RMAN> ALTER DATABASE DATAFILE 10 OFFLINE;
RMAN> RESTORE DATAFILE 10;
RMAN> RECOVER DATAFILE 10;
RMAN> ALTER DATABASE DATAFILE 10 ONLINE;
3. 丟失PDB 的完整表空間
$ rman target sys/ password @ PDB1
RMAN> ALTER TABLESPACE USERS OFFLINE;
RMAN> RESTORE TABLESPACE USERS;
RMAN> RECOVER TABLESPACE USERS;
RMAN> ALTER TABLESPACE USERS ONLINE ;
4. 丟失整個PDB
$ rman target sys /password @ CDB
RMAN> RESTORE PLUGGABLE DATABASE PDB1;
RMAN> RECOVER PLUGGABLE DATABASE PDB1;
RMAN> ALTER PLUGGABLE DATABASE PDB1 open;
注:PDB 的意外丟失和主動刪除是不一樣的。例如,如果 PDB 或資料檔案被意外刪除、損壞等,但是後設資料都是仍然存在的,在這種情況下是可以恢復的;但是如果主動的對 PDB 或 PDB 資料檔案刪除,意味著將後設資料資訊刪除,這種情況是不能恢復的。就會報以下錯誤:
R MAN-06813: could not translate pluggable database PDB1
---- end ----
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2743744/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 12C多租戶rman備份文件
- rman 增量備份恢復
- RMAN備份恢復技巧
- RMAN備份恢復典型案例——RMAN備份&系統變慢
- RMAN備份異機恢復
- Oracle ADG環境下的RMAN備份策略Oracle
- Oracle9i RMAN 的優缺點及RMAN 備份及恢復步驟Oracle
- RMAN備份恢復效能優化優化
- RMAN備份與恢復測試
- Oracle 備份恢復篇之RMAN catalogOracle
- ORACLE DG從庫 Rman備份恢復Oracle
- rman備份異機恢復(原創)
- 【RMAN】Oracle12c以後rman 備份恢復命令參考Oracle
- RMAN備份恢復典型案例——異機恢復未知DBID
- 12 使用RMAN備份和恢復檔案
- RMAN備份恢復典型案例——ORA-00245
- 【RMAN】RMAN的備份保留策略
- 備份恢復Lesson 04.Using the RMAN Recovery Catalog
- 【RMAN】RMAN備份至ASMASM
- 透過RMAN備份standby database成功恢復還原Database
- RMAN備份恢復典型案例——資料庫卡頓資料庫
- dg丟失歸檔,使用rman增量備份恢復
- 在rman恢復中incarnation的概念
- 【RMAN】在備庫執行rman備份時報錯RMAN-06820 ORA-17629
- RMAN增量恢復
- RMAN備份恢復典型案例——跨平臺遷移pdb
- RMAN的備份原理
- 【RMAN】Oracle12c之後,rman備份Dataguard備端恢復可能出現邏輯錯誤Oracle
- 透過搭建恢復目錄實現RMAN異地備份和恢復
- RMAN備份概述
- RMAN恢復之RMAN-06555處理
- RMAN備份恢復典型案例——資料檔案存在壞快
- Windows oracle 11g rman備份恢復到linux系統WindowsOracleLinux
- IIS環境下伺服器SSL證書的備份及恢復伺服器
- RMAN恢復實踐
- 【RMAN】同時建立多個備份(建立多重備份)
- RMAN備份進度
- rman 備份指令碼指令碼