R12c 新特性:RMAN 可插拔数据库的备份和恢复 (Doc ID 1945849.1)

适用于:

Oracle Database – Enterprise Edition – 版本 12.1.0.1 和更高版本
Oracle Database Cloud Schema Service – 版本 N/A 和更高版本
Oracle Database Exadata Cloud Machine – 版本 N/A 和更高版本
Oracle Database Exadata Express Cloud Service – 版本 N/A 和更高版本
Oracle Cloud Infrastructure – Database Service – 版本 N/A 和更高版本
本文档所含信息适用于所有平台

 

用途

概述 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/<pw>@t12ccdb

rman target /

或者从可插拔数据库端运行,如:rman target sys/<pw>@t12cpdb1

当 RMAN 连接的数据库是可插拔数据库,RMAN 命令仅作用于被连的可插拔数据库。

当 RMAN 连接的数据库是根容器数据库,RMAN 命令默认作用于容器中的所有文件,除非使用 PDB 名称进行了特别限制。

RMAN 命令 REPORT SCHEMA 能显示容器数据库的所有数据文件。
下面例子显示可插拔数据库 T12cPDB1 在容器数据库 T12cCDB 中:

 

% rman target sys/<pw>@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/<pw>@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_.dbfList 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/<pw>@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/<pw>@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/<pw>@t12ccdb
RMAN>BACKUP TABLESPACE T12CPDB1:SYSTEM, T12CPDB1:SYSAUX;

3b. 仅备份可插拔数据库的 SYSTEM 表空间和根容器数据库的 SYSAUX 表空间

当连接到根容器数据库执行备份时,如果没有指定可插拔数据库前缀,默认备份数据文件是根容器数据库

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

3c. 容器数据库中每个文件号都是唯一的,可以连接到根容器数据库,不指定容器前缀,使用文件号进行备份。

下面例子显示如何连接到根容器数据库,不用指定容器数据库前缀,仅备份 CDB$ROOT 的 3 号数据文件,和 T12CPDB1 的 20 号数据文件

% rman target sys/<pw>@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/<pw>@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/<pw>@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

 

另外,如果我们对单个可插拔数据库备份进行备份,这对恢复不同服务器中的单个可插拔数据库或执行时间点恢复是没有用处的。

********我们必须拥有root和可插拔数据库的备份**************

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号