R12c 新特性:RMAN 可插拔資料庫的備份和恢復 (文件 ID 1945849.1)

mosdoc發表於2016-12-14

文件內容


用途

適用範圍

詳細資訊

參考


適用於:

Oracle Database - Enterprise Edition - 版本 12.1.0.1 和更高版本
本文件所含資訊適用於所有平臺

用途

概述 Oracle 12c 新特性,如何使用 RMAN 備份和恢復可插拔資料庫。

適用範圍

資料庫管理員管理大量的資料庫,透過 RMAN 備份。他們期望實施一個容器資料庫進行統一備份,容器資料庫包含一個或者多個可插拔資料庫。需要掌握 RMAN 知識。

詳細資訊

什麼是容器資料庫?

12c 資料庫可以是容器資料庫或非容器資料庫,本文將非容器資料庫簡稱為 non-CDB,容器資料庫簡稱為CDB。
12c 之前的資料庫庫只能作為非容器資料庫即 non-CDBs。
一個容器資料庫可以包含 0 個,1 個或多個使用者建立可插拔資料庫。可插拔資料庫簡稱為 PDB。
容器資料庫包括:

  • 一個根容器(即:CDB$ROOT)有 SYSTEM,SYSAUX,UNDO 和 TEMP 表空間,以及控制檔案和線上日誌檔案。
  • 一個種子容器(即:PDB$SEED)有 SYSTEM,SYSAUX,TEMP,EXAMPLE 表空間,種子容器作為建立可插拔資料庫(PDB)的模板。

什麼是可插拔資料庫?

可插拔資料庫(PDB)就是一個使用者建立的容器,存放使用者應用系統的資料和程式碼。例如:人力應用系統,薪酬管理系統等。
可插拔資料庫包括:

  • SYSTEM,SYSAUX,TEMP 表空間
  • 任意多使用者建立的表空間
  • PDB 向容器資料庫的 UNDO 表空間,控制檔案和線上日誌檔案寫資訊

當可插拔資料庫往容器資料庫的 UNDO 表空間和線上日誌檔案寫資訊時,會註釋每個 UNDO 和 REDO 屬於哪個可插拔資料庫。

RMAN 備份可插拔資料庫

執行 RMAN 備份的使用者必須要有 SYSDBA 或新許可權 SYSBACKUP
RMAN 可從根容器端執行,如:rman target sys/@t12ccdb
                                                          rman target /
                                或者從可插拔資料庫端執行,如:rman target sys/@t12cpdb1

當 RMAN 連線的資料庫是可插拔資料庫,RMAN 命令僅作用於被連的可插拔資料庫。
當 RMAN 連線的資料庫是根容器資料庫,RMAN 命令預設作用於容器中的所有檔案,除非使用 PDB 名稱進行了特別限制。

RMAN 命令 REPORT SCHEMA 能顯示容器資料庫的所有資料檔案。
下面例子顯示可插拔資料庫 T12cPDB1 在容器資料庫 T12cCDB 中:

% rman target sys/@t12ccdb
RMAN> report schema;

using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name T12CCDB
** (filenames have been edited for clarity)

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    960      SYSTEM                 ***     .../oradata/T12CCDB/datafile/o1_mf_system_8008cm5s_.dbf
3    660      SYSAUX                 ***     .../oradata/T12CCDB/datafile/o1_mf_sysaux_80089voz_.dbf
4      50     UNDOTBS1             ***     .../oradata/T12CCDB/datafile/o1_mf_undotbs1_8gtp7g6l_.dbf
5    250     PDB$SEED:SYSTEM  ***     .../oradata/T12CCDB/C4B70772D4DF1DF8E0437108DC0A7D20/datafile/o1_mf_system_8008jc7k_.dbf
6       5     USERS                    ***     .../oradata/T12CCDB/datafile/o1_mf_users_8008fnov_.dbf
7    490     PDB$SEED:SYSAUX  ***     .../oradata/T12CCDB/C4B70772D4DF1DF8E0437108DC0A7D20/datafile/o1_mf_sysaux_8008jc8m_.dbf
8    250     T12CPDB1:SYSTEM  ***     .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_system_8008r3wh_.dbf
9    510     T12CPDB1:SYSAUX  ***     .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_sysaux_8008r3vl_.dbf
10     5     T12CPDB1:USERS     ***     .../oradata/T12CCDB/datafile/o1_mf_users_8gtp7ghf_.dbf
20  100     T12CPDB1:RECTBL   ***     .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_rectbl_8hfcv26r_.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    530      TEMP                      32767       .../oradata/T12CCDB/datafile/o1_mf_temp_8bz0jcxg_.tmp
2    20       PDB$SEED:TEMP        32767       .../oradata/T12CCDB/C40F9B49FC9C19E0E0430BAAE80AFF01/datafile/o1_mf_temp_8bz0jfkj_.tmp
3    20       T12CPDB1:TEMP       32767       .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_temp_8bz0jh7x_.tmp

 
現在只有 REPORT SCHEMA 命令能很容易的顯示容器資料庫中資料檔案屬於哪個可插拔資料庫。
假如連線的資料庫是可插拔資料庫,僅顯示它自己的資料檔案:

% rman target sys/@t12cpdb1
RMAN> report schema;

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
8    250      T12CPDB1:SYSTEM      ***     .../oradata/T12CCDB/datafile/o1_mf_system_8hloc72d_.dbf
9    510      T12CPDB1:SYSAUX      ***     .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_sysaux_8008r3vl_.dbf
10   5         T12CPDB1:USERS       ***     .../oradata/T12CCDB/datafile/o1_mf_users_8hlowbh2_.dbf
20   100      T12CPDB1:RECTBL      ***     .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_rectbl_8hfcv26r_.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
3    20       T12CPDB1:TEMP        32767       .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_temp_8bz0jh7x_.tmp


1. 完整容器資料庫備份

備份全部資料檔案,包括根容器資料庫檔案,種子資料庫檔案,以及所有可插拔資料庫檔案:

% rman target sys/@t12ccdb
RMAN> BACKUP DATABASE PLUS ARCHIVELOG ALL DELETE INPUT;
RMAN> LIST BACKUP OF DATABASE;

List of Backup Sets
===================

...
------- ---- -- ---------- ----------- ------------ ---------------
82      Full    2.46G      DISK        00:01:01     17-JAN-13
        BP Key: 83   Status: AVAILABLE  Compressed: NO  Tag: TAG20130117T114547
        Piece Name: .../fast_recovery_area/T12CCDB/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T114547_8hhs3cgs_.bkp
  List of Datafiles in backup set 82
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 2139245    17-JAN-13 .../oradata/T12CCDB/datafile/o1_mf_system_8008cm5s_.dbf
  3       Full 2139245    17-JAN-13 .../oradata/T12CCDB/datafile/o1_mf_sysaux_80089voz_.dbf
  4       Full 2139245    17-JAN-13 .../oradata/T12CCDB/datafile/o1_mf_undotbs1_8gtp7g6l_.dbf
  5       Full 1621614    13-JUL-12 .../oradata/T12CCDB/C4B70772D4DF1DF8E0437108DC0A7D20/datafile/o1_mf_system_8008jc7k_.dbf
  6       Full 2139245    17-JAN-13 .../oradata/T12CCDB/datafile/o1_mf_users_8008fnov_.dbf
  7       Full 1621614    13-JUL-12 .../oradata/T12CCDB/C4B70772D4DF1DF8E0437108DC0A7D20/datafile/o1_mf_sysaux_8008jc8m_.dbf
  8       Full 2139245    17-JAN-13 .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_system_8008r3wh_.dbf
  9       Full 2139245    17-JAN-13 .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_sysaux_8008r3vl_.dbf
  10      Full 2139245    17-JAN-13 .../oradata/T12CCDB/datafile/o1_mf_users_8gtp7ghf_.dbf
  20      Full 2139245    17-JAN-13 .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_rectbl_8hfcv26r_.dbf

 
2. 容器資料庫部分資料備份

下面例子顯示僅備份可插拔資料庫 T12CPDB1:

%rman target sys/@t12ccdb
RMAN> BACKUP PLUGGABLE DATABASE T12CPDB1 TAG 'T12CPDB1';
RMAN> LIST BACKUP;

...
------- ---- -- ---------- ----------- ------------ ---------------
85      Full    590.52M    DISK        00:00:14     17-JAN-13
        BP Key: 86   Status: AVAILABLE  Compressed: NO  Tag: T12CPDB1
        Piece Name: .../fast_recovery_area/T12CCDB/backupset/2013_01_17/o1_mf_nnndf_T12CPDB1_8hhswy1c_.bkp
  List of Datafiles in backup set 85
  Container ID: 3, PDB Name: T12CPDB1
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  8       Full 2139742    17-JAN-13 .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_system_8008r3wh_.dbf
  9       Full 2139742    17-JAN-13 .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_sysaux_8008r3vl_.dbf
  10      Full 2139742    17-JAN-13 .../oradata/T12CCDB/datafile/o1_mf_users_8gtp7ghf_.dbf
  20      Full 2139742    17-JAN-13 .../oradata/T12CCDB/C4B71645EF062616E0437108DC0A91E4/datafile/o1_mf_rectbl_8hfcv26r_.dbf



當備份可插拔資料庫時,不需要像上述例子使用 TAG 引數指定可插拔資料庫的名字。因為 RMAN LIST BACKUP 命令自動會顯示 RMAN 備份資料屬於哪個可插拔資料庫。

因為在 FRA 會將 GUID 資訊顯示在檔案路徑名稱上,在這種情況下,使用下面查詢識別可插拔資料庫名稱和 GUID 的對應關係。

下面例子,顯示了可插拔資料庫 T12CPDB1 對應的 GUID 是 C4B71645EF062616E0437108DC0A91E4



登入容器資料庫:

SQL> SET LINES 150
SQL> SELECT CON_ID, DBID, CON_UID, GUID, NAME FROM v$pdbs;


    CON_ID       DBID    CON_UID                                       GUID                             NAME
---------- ----------       ----------       -------------------------------- ------------------------------
      2  4031181962  4031181962  C40F9B49FC9C19E0E0430BAAE80AFF01       PDB$SEED
       3    575001283     575001283  C4B71645EF062616E0437108DC0A91E4      T12CPDB1



3. 部分可插拔資料庫備份

3a. 連線到根容器資料庫,僅備份可插拔資料庫 T12CPDB1 的 system 和 sysaux 表空間

% rman target sys/@t12ccdb
RMAN>BACKUP TABLESPACE T12CPDB1:SYSTEM, T12CPDB1:SYSAUX;

 
3b. 僅備份可插拔資料庫的 SYSTEM 表空間和根容器資料庫的 SYSAUX 表空間

當連線到根容器資料庫執行備份時,如果沒有指定可插拔資料庫字首,預設備份資料檔案是根容器資料庫

% rman target sys/@t12ccdb
RMAN>BACKUP TABLESPACE T12CPDB1:SYSTEM, SYSAUX;

 
3c. 容器資料庫中每個檔案號都是唯一的,可以連線到根容器資料庫,不指定容器字首,使用檔案號進行備份。

下面例子顯示如何連線到根容器資料庫,不用指定容器資料庫字首,僅備份 CDB$ROOT 的 3 號資料檔案,和 T12CPDB1 的 20 號資料檔案

% rman target sys/@t12ccdb
RMAN> BACKUP DATAFILE 3,20;

 
RMAN 可插拔資料庫的恢復


1. 可插拔資料庫 T12cPDB1 system 資料檔案丟失

這種情況下,容器資料庫和其它可插拔資料庫不受影響,可正常使用,僅 T12CPDB1 可插拔資料庫不可用。
必須從根容器資料庫進行恢復。

可插拔資料庫的system資料檔案丟失可能造成和容器資料庫的system資料檔案丟失一樣嚴重後果,導致整個容器資料庫宕掉,所有可插拔資料庫都成為不可用

在這種情況下,需要將容器資料庫放在 mount 狀態下,恢復可插拔資料庫的 system 資料檔案。

未來的版本將會有所改善,可插拔資料庫 system 資料檔案的丟失不影響容器資料庫或其他可插拔資料執行。

% rman target /
RMAN> RESTORE DATAFILE 8;
RMAN> RECOVER DATAFILE 8;
RMAN> ALTER PLUGGABLE DATABASE T12CPDB1 OPEN;

 
2. 可插拔資料庫的非系統資料檔案丟失,比如USER表空間的10號資料檔案丟失

根據實際情況,丟失的資料檔案可能已經是 offline 狀態,如果沒有,必須先 offline:

% rman sys/@t12cpdb1 
RMAN> ALTER DATABASE DATAFILE 10 OFFLINE;
RMAN> RESTORE DATAFILE 10;
RMAN> RECOVER DATAFILE 10;
RMAN> ALTER DATABASE DATAFILE 10 ONLINE;

 
3. 可插拔資料庫的整個表空間的資料檔案都丟失

某個表空間丟失,但是可插拔資料庫 T12CPDB1 還處於開啟狀態。

% rman target sys/oracle@t12ccpdb1
RMAN> ALTER TABLESPACE USERS OFFLINE;
RMAN> RESTORE TABLESPACE USERS;
RMAN> RECOVER TABLESPACE USERS;
RMAN> ALTER TABLESPACE USERS ONLINE;

 
4: 可插拔資料庫的所有資料檔案都丟失

% rman target sys/@t12ccdb
RMAN> RESTORE PLUGGABLE DATABASE T12CPDB1;
RMAN> RECOVER PLUGGABLE DATABASE T12CPDB1;
RMAN> ALTER PLUGGABLE DATABASE T12cPDB1 open;


注:

丟失了可插拔資料庫並不同於刪除了可插拔資料庫。

-丟失了可插拔資料庫是指因為一些意外情況下的資料庫以及檔案的誤刪除或者損壞, 但是它的metadata資料還是存在的。在這種metadata還存在的情況下,從備份中恢復出來是可行的。

-如果是刪除了可插拔資料庫,這樣同樣會把metadata從repository中刪除。這種情況下做restore就會遇到錯誤:

 RMAN-06813: could not translate pluggable database PDB1

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31393455/viewspace-2130474/,如需轉載,請註明出處,否則將追究法律責任。

相關文章