【RMAN】在多租戶環境下的RMAN備份及恢復

恩強Boy發表於2020-12-20

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章