12C CDB模式下RMAN备份与恢复

Posted wenzhongyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12C CDB模式下RMAN备份与恢复相关的知识,希望对你有一定的参考价值。

12C 的RMANOracle Enterprise Manager Cloud Control工具支持多租户环境下的备份和恢复,RMAN可以连接到目标数据库、Data Guard、辅助实例或辅助数据库,通过连接数据库的类型不同,所完成的数据库操作也不相同,在这里我们主要描述CDBPDB备份恢复操作,在PDB环境中支持备份或恢复单个数据文件或表空间。

在从数据丢失恢复能力而言,单独备份根和所有的PDB相当于备份整个CDB。主要的区别是在RMAN命令的数目,您必须输入和恢复时间。恢复整个CDB$ROOT的时间要比所有的PDB的时间少。

1.1.  RMAN连接数据库

RMAN可通过操作系统认证和密码文件两种方式连接到一个目标数据库,使用RMAN备份恢复工具的用户需要具有SYSDBASYSBACKUP系统权限,如果用户需要连接到恢复目录,需要被授予RECOVERY_CATALOG_OWNER对象权限。

  • 操作系统认证

我们在LINUX环境中使用操作系统认证方式连接到数据库,我们需要满足以下两个条件:

  1. 设定ORACLE_SID变量,例如数据库的SID为orcl,因此我们在.bash_profile文件或者命令行设置ORACLE_SID变量。

    ORACLE_SID=orcl; export ORACLE_SID

  2. 执行rman命令用户需要具有SYSDBA或者SYSBACKUP权限,Linux环境下的OSDBA用户组为dba。

    具有SYSDBA权限用户连接到RMAN

    rman target '"/ as sysdba"'

    具有SYSBACKUP权限用户连接到RMAN

    rman target '"/ as sysbackup"'

    具有SYSDBA权限用户隐式连接到RMAN

    rman target /

  • 密码文件认证

数据库使用密码文件认证管理用户,RMAN可以使用密码连接。使用本地或远程访问的密码文件。使用服务名方式连接数据库时,数据库必须使用一个密码文件,同样连接到数据库的用户需要具有SYSDBASYSBACKUP权限。

密码文件认证具有SYSDBA权限用户连接到RMAN

rman target '"zlhis@orcl assysdba"'

target database Password: password

connected to target database: orcl(DBID=39525561)

密码文件认证具有SYSBACKUP权限用户连接到RMAN

rman target '"zlhis@orcl as sysbackup"'

target database Password: password

connected to target database: orcl(DBID=39525561)

1.2.  只备份CDB

只备份CDB数据库需要具有SYSDBASYSBACKUP权限用户连接到CDBroot环境下,执行backupdatabase root命令即可完成对CDB的备份,方法如下:

RMAN> backupdatabase root;

启动 backup 于 17-3月 -16

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=50 设备类型=DISK

通道 ORA_DISK_1: 正在启动全部数据文件备份集

通道 ORA_DISK_1: 正在指定备份集内的数据文件

输入数据文件: 文件号=00001 名称=/u01/app/oracle/oradata/cdb/system01.dbf

输入数据文件: 文件号=00003 名称=/u01/app/oracle/oradata/cdb/sysaux01.dbf

输入数据文件: 文件号=00004 名称=/u01/app/oracle/oradata/cdb/undotbs01.dbf

输入数据文件: 文件号=00006 名称=/u01/app/oracle/oradata/cdb/users01.dbf

通道 ORA_DISK_1: 正在启动段 1 于 17-3月 -16

通道 ORA_DISK_1: 已完成段 1 于 17-3月 -16

段句柄=/u01/app/oracle/fast_recovery_area/CDB/backupset/2016_03_17/o1_mf_nnndf_TAG20160317T152301_cgnptp1s_.bkp标记=TAG20160317T152301 注释=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:55

完成 backup 于 17-3月 -16

启动 Control File and SPFILE Autobackup 于 17-3月 -16段handle=/u01/app/oracle/fast_recovery_area/CDB/autobackup/2016_03_17/o1_mf_s_906737097_cgnpydod_.bkpcomment=NONE

完成 Control File and SPFILE Autobackup 于 17-3月 -16

执行backup database root不给数据文件保存位置时,备份文件默认存放在快速恢复区中。

1.3.  备份整个CDB及其下面的所有PDB

备份整个CDB数据库及其下面的所有PDB类似于非CDB数据库方法相同,使用具有SYSDBASYSBACKUP权限用户连接到CDBroot环境下面,然后执行backupdatabase命令即可完成整个CDB的备份,方法如下:

RMAN> backup database;

启动 backup 于 17-3月 -16

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=50 设备类型=DISK

通道 ORA_DISK_1: 正在启动全部数据文件备份集

通道 ORA_DISK_1: 正在指定备份集内的数据文件

输入数据文件: 文件号=00001 名称=/u01/app/oracle/oradata/cdb/system01.dbf

输入数据文件: 文件号=00003 名称=/u01/app/oracle/oradata/cdb/sysaux01.dbf

输入数据文件: 文件号=00004 名称=/u01/app/oracle/oradata/cdb/undotbs01.dbf

输入数据文件: 文件号=00006 名称=/u01/app/oracle/oradata/cdb/users01.dbf

输入数据文件: 文件号=00009 名称=/u01/app/oracle/oradata/cdb/pdb1/sysaux01.dbf

输入数据文件: 文件号=00008 名称=/u01/app/oracle/oradata/cdb/pdb1/system01.dbf

输入数据文件: 文件号=00010 名称=/u01/app/oracle/oradata/cdb/pdb1/pdb1_users01.dbf

通道 ORA_DISK_1: 正在启动段 1 于 17-3月 -16

通道 ORA_DISK_1: 已完成段 1 于 17-3月 -16

段句柄=/u01/app/oracle/fast_recovery_area/CDB/backupset/2016_03_17/o1_mf_nnndf_TAG20160317T152301_cgnptp1s_.bkp标记=TAG20160317T152301注释=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:55

完成 backup 于 17-3月 -16

启动 Control File andSPFILE Autobackup 于17-3月-16段handle=/u01/app/oracle/fast_recovery_area/CDB/autobackup/2016_03_17/o1_mf_s_906737097_cgnpydod_.bkpcomment=NONE

完成 Control File andSPFILE Autobackup 于17-3月-16

 

1.4.  备份单个和多个PDB

CDB中允许备份一个或多少PDB数据库,备份一个PDB数据库可以通过以下两个方式备份:

  1. 在CDB根(root)使用BACKUP PLUGGABLE DATABASE命令备份一个或多个PDB数据库。

    [oracle@localhost ~]$ rman target /

    恢复管理器: Release 12.1.0.2.0 - Production on 星期二 3月 22 17:11:27 2016

    Copyright (c) 1982, 2014, Oracle and/or itsaffiliates.  All rights reserved.

    已连接到目标数据库: CDB (DBID=2023252752)

    RMAN> backuppluggable database pdb1;

    启动 backup 于 22-3月 -16

    使用目标数据库控制文件替代恢复目录

    分配的通道: ORA_DISK_1

    通道 ORA_DISK_1: SID=57 设备类型=DISK

    通道 ORA_DISK_1: 正在启动全部数据文件备份集

    通道 ORA_DISK_1: 正在指定备份集内的数据文件

    输入数据文件: 文件号=00009 名称=/u01/app/oracle/oradata/cdb/pdb1/sysaux01.dbf

    输入数据文件: 文件号=00008 名称=/u01/app/oracle/oradata/cdb/pdb1/system01.dbf

    输入数据文件: 文件号=00010 名称=/u01/app/oracle/oradata/cdb/pdb1/pdb1_users01.dbf

    通道 ORA_DISK_1: 正在启动段 1 于 22-3月 -16

    通道 ORA_DISK_1: 已完成段 1 于 22-3月 -16段句柄=/u01/app/oracle/fast_recovery_area/CDB/2E26709E68912450E055000000000001/backupset/2016_03_22/o1_mf_nnndf_TAG20160322T171142_ch232hxb_.bkp标记=TAG20160322T171142 注释=NONE

    通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:05

    完成 backup 于 22-3月 -16

    启动 Control File and SPFILE Autobackup 于 22-3月 -16段handle=/u01/app/oracle/fast_recovery_area/CDB/autobackup/2016_03_22/o1_mf_s_907175569_ch234n0h_.bkpcomment=NONE

    完成 Control File and SPFILE Autobackup 于 22-3月 -16

             如果要备份多个pdb,只需在备份命令后面跟上多个你想备份的pdb实例的名称,如下backup pluggable database pdb1,pdb2;

  2. 在PDB中使用BACKUP DATABASE备份当前连接的PDB数据库,前提条件是需要配置好TNSNAMES.ORA文件。

    [oracle@localhost admin]$ rman target sys/oracle@pdb1

    恢复管理器: Release 12.1.0.2.0 - Production on 星期三 3月 23 09:35:16 2016

    Copyright (c) 1982, 2014, Oracle and/or itsaffiliates.  All rights reserved.

    已连接到目标数据库: CDB (DBID=2023252752)

    RMAN> backup database;

    启动 backup 于 23-3月 -16

    使用目标数据库控制文件替代恢复目录

    分配的通道: ORA_DISK_1

    通道 ORA_DISK_1: SID=69 设备类型=DISK

    通道 ORA_DISK_1: 正在启动全部数据文件备份集

    通道 ORA_DISK_1: 正在指定备份集内的数据文件

    输入数据文件: 文件号=00009 名称=/u01/app/oracle/oradata/cdb/pdb1/sysaux01.dbf

    输入数据文件: 文件号=00008 名称=/u01/app/oracle/oradata/cdb/pdb1/system01.dbf

    输入数据文件: 文件号=00010 名称=/u01/app/oracle/oradata/cdb/pdb1/pdb1_users01.dbf

    通道 ORA_DISK_1: 正在启动段 1 于 23-3月 -16

    通道 ORA_DISK_1: 已完成段 1 于 23-3月 -16

    段句柄=/u01/app/oracle/fast_recovery_area/CDB/2E26709E68912450E055000000000001/backupset/2016_03_23/o1_mf_nnndf_TAG20160323T100113_ch3y7byj_.bkp标记=TAG20160323T100113 注释=NONE

    通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:05

    完成 backup 于 23-3月 -16

    启动 Control File and SPFILE Autobackup 于 23-3月 -16段handle=/u01/app/oracle/fast_recovery_area/CDB/autobackup/2016_03_23/o1_mf_s_907236140_ch3y9jyb_.bkpcomment=NONE

    完成 Control File and SPFILE Autobackup 于 23-3月 -16

     

1.5.  整体数据库恢复(CDB和所有PDB

12C数据库加强了RMAN恢复的功能,恢复的方式基本同以前的模式一样,如果是在一个全新的异地进行恢复,同样的也是先手工创建与原库相同的CDBPDB实例,然后关闭实例,删除所有数据文件,通过RMAN命令或者拷贝原始库的控制文件到新库上,启动CDB数据库到mount状态,如下

[oracle@localhostadmin]$rman target /

恢复管理器: Release 12.1.0.2.0 -Production on 星期三 7月 13 11:27:33 2016

Copyright(c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.

已连接到目标数据库 (未启动)

RMAN>startup mount;

Oracle实例已启动

数据库已装载

系统全局区域总计    2516582400 字节

FixedSize                     3048776 字节

VariableSize                671091384 字节

DatabaseBuffers            1828716544 字节

RedoBuffers                  13725696 字节

RMAN>restoredatabase;

。。。。。。。(此处省略)

通道 ORA_DISK_1: 将数据文件 00098 还原到 ….ORADATA/ORCL/ZL9WZARDDATA.DBF

通道 ORA_DISK_1: 将数据文件 00099 还原到 ….ORADATA/ORCL/ZL9IDEXPSS.DBF

通道 ORA_DISK_1: 将数据文件 00100 还原到 ….ORADATA/ORCL/ZLBA5.DBF

通道 ORA_DISK_1: 将数据文件 00101 还原到 ….ORADATA/ORCL/MGMTAD4J.DBF

通道 ORA_DISK_1: 将数据文件 00102 还原到 ….ORADATA/ORCL/MGMTDBF

通道 ORA_DISK_1: 将数据文件 00103 还原到 ….ORADATA/ORCL/MGMTDEPOT.DBF

通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/fast_recovery_area/CDB/autobackup/01RAH8KJ_1_1

通道 ORA_DISK_1: 将数据文件 00002 还原到 ….ORADATA/CDB/PDBSEED/SYSTEM01.DBF

通道 ORA_DISK_1:` 将数据文件 00004 还原到 ….ORADATA/CDB/PDBSEED/SYSAUX01.DBF

通道 ORA_DISK_1: 正在读取备份片段D:\\APP\\RMAN\\04RAH9B2_1_1

。。。。。。。(此处略过)

通道 ORA_DISK_1: ORA-19870:还原备份片段 /u01/app/oracle/fast_recovery_area/CDB/autobackup 04RAH9B2_1_1 时出错

ORA-19504:无法创建文件"….ORADATA/CDB/PDBSEED/SYSAUX01.DBF"

ORA-27040:文件创建错误, 无法创建文件

OSD-04002:无法打开文件

O/S-Error:(OS 3) 系统找不到指定的路径。

故障转移到上一个备份

RMAN-00571:===========================================================

RMAN-00569:=============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571:===========================================================

RMAN-03002:restore 命令 (在 07/13/2016 11:55:19 上) 失败

RMAN-06026:有些目标没有找到 - 终止还原

RMAN-06023:没有找到数据文件4的副本来还原

RMAN-06023:没有找到数据文件2的副本来还原

在还原的时候可能遇到RMAN-06023错误,这是由于恢复数据文件路径不存在导致,我只需要手工创建路径,然后重复执行下restore database命令就可以了,之前已经恢复的文件会自动略过,如下

。。。。。。。(此处省略)

正在略过数据文件111; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCBASE.DBF

正在略过数据文件112; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCINDEX.DBF

正在略过数据文件113; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCDATA.DBF

正在略过数据文件114; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCDATAINDEX.DBF

正在略过数据文件115; 已还原到文件 ....ORADATA/ZLEMR/ZLDOCXML.DBF

通道 ORA_DISK_1: 正在开始还原数据文件备份集

通道 ORA_DISK_1: 正在指定从备份集还原的数据文件

通道 ORA_DISK_1: 将数据文件 00002 还原到 ....ORADATA/CDB/PDBSEED/SYSTEM01.DBF

通道 ORA_DISK_1: 将数据文件 00004 还原到 ....ORADATA/CDB/PDBSEED/SYSAUX01.DBF

通道 ORA_DISK_1: 正在读取备份片段D:\\APP\\RMAN\\04RAH9B2_1_1

通道 ORA_DISK_1: 已还原备份片段 1

通道 ORA_DISK_1: 还原完成, 用时: 00:00:55

完成 restore 于 13-7月 -16

RMAN>recoverdatabase;

。。。。。。(此处省略)

归档日志文件名=…..ARCHIVE/ARC0000000588_0915209064.0001线程=1 序列=588

归档日志文件名=…..ARCHIVE/ARC0000000589_0915209064.0001线程=1 序列=589

归档日志文件名=…..ARCHIVE/ARC0000000590_0915209064.0001线程=1 序列=590

归档日志文件名=…..ARCHIVE/ARC0000000591_0915209064.0001线程=1 序列=591

归档日志文件名=…..ARCHIVE/ARC0000000592_0915209064.0001线程=1 序列=592

归档日志文件名=…..ARCHIVE/ARC0000000593_0915209064.0001线程=1 序列=593

归档日志文件名=…..ARCHIVE/ARC0000000594_0915209064.0001线程=1 序列=594

归档日志文件名=…..ARCHIVE/ARC0000000595_0915209064.0001线程=1 序列=595

介质恢复完成, 用时: 00:04:32

完成 recover 于 13-7月 -16

RMAN>alter database open resetlogs;

已处理语句

1.6.  单个PDB数据库恢复

恢复单个PDB的前提是CDB已经能够正常启动,在CDB启动的情况下在RMAN中采用restore pluggable database pdb名称指定单个PDB数据库进行恢复,如下

RMAN>restore pluggable database orcl;

启动 restore 于 13-7月 -16

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始还原数据文件备份集

通道 ORA_DISK_1: 正在指定从备份集还原的数据文件

通道 ORA_DISK_1: 将数据文件 00056 还原到 ....ORADATA/ORCL/SYSTEM01.DBF

通道 ORA_DISK_1: 将数据文件 00057 还原到 ....ORADATA/ORCL/SYSAUX01.DBF

通道 ORA_DISK_1: 将数据文件 00058 还原到 ....ORADATA/ORCL/USERS

。。。。。。。(此处省略)

通道 ORA_DISK_1: 将数据文件 00102 还原到 ....ORADATA/ORCL/MGMT.DBF

通道 ORA_DISK_1: 将数据文件 00103 还原到 ....ORADATA/ORCL/MGMT_DEPOT.DBF

通道 ORA_DISK_1: 正在读取备份片段D:\\APP\\RMAN\\01RAH8KJ_1_1

通道 ORA_DISK_1: 段句柄 =…..RMAN/01RAH8KJ_1_1 标记 = TAG20160712T160849

通道 ORA_DISK_1: 已还原备份片段 1

通道 ORA_DISK_1: 还原完成, 用时: 00:07:07

完成 restore 于 13-7月 -16

RMAN>recover pluggable database orcl;

启动 recover 于 13-7月 -16

使用通道 ORA_DISK_1

正在开始介质的恢复

归档日志文件名=…..ARCHIVE/ARC0000000591_0915209064.0001线程=1 序列=591

归档日志文件名=…..ARCHIVE/ARC0000000592_0915209064.0001线程=1 序列=592

归档日志文件名=…..ARCHIVE/ARC0000000593_0915209064.0001线程=1 序列=593

归档日志文件名=…..ARCHIVE/ARC0000000594_0915209064.0001线程=1 序列=594

归档日志文件名=…..ARCHIVE/ARC0000000595_0915209064.0001线程=1 序列=595

介质恢复完成, 用时: 00:01:10

完成 recover 于 13-7月 -16

最后,在以restlogs方式,打开pdb实例,如下

SQL*Plus:Release 12.1.0.2.0 Production on 星期三 7月 13 15:12:57 2016

Copyright(c) 1982, 2014, Oracle.  All rightsreserved.

SQL>conn / as sysdba

已连接。

SQL>show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------------------------------------- ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         3 ORCL                           MOUNTED

         4 ZLEMR                          MOUNTED

SQL>alter pluggable database pdb1 orcl resetlogs;

插接式数据库已变更。

SQL>show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------------------------------------- ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         3 ORCL                           READ WRITE NO

         4 ZLEMR                          MOUNTED

1.7.  恢复PDB数据文件

数据库在open的时候,会对当前的数据的所有数据文件进行检查。

对于system,sysauxundo表空间的数据文件,如果有问题,数据库无法open。如果是PDB中某个普通的数据文件出现丢失,我们可以先用offline方式跳过,然后再打数据库,稍后再对数据文件做恢复:

:

SQL> startup;

ORACLE instance started.

Total System Global Area  835104768 bytes

Fixed Size                  2293880 bytes

Variable Size             322965384 bytes

Database Buffers          503316480 bytes

Redo Buffers                6529024 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 6- see DBWR trace file

ORA-01110: data file 6:'/u01/app/oracle/oradata/c12/users01.dbf'

SQL> alter database datafile 6 offline;

Database altered.

SQL> alter database open;

Database altered.

使用rman

RMAN> restore datafile 6;

RMAN> recover datafile 6;

然后对数据文件进行online处理

SQL> alter database datafile 6 online;

再看看pdb的数据文件.摸拟pdb数据文件删除

[oracle@o12c pdb2]$ mv pdb2_users01.dbfpdb2_users01.dbfold

启动数据库实例

SQL> startup;

ORACLE instance started.

Total System Global Area  835104768 bytes

Fixed Size                  2293880 bytes

Variable Size             322965384 bytes

Database Buffers          503316480 bytes

Redo Buffers                6529024 bytes

Database mounted.

Database opened.

由此我们可以得出一个结论,当cdb在打开的时候,数据库不会检查pdb中的数据文件。

SQL> alter pluggable database pdb2 open;

alter pluggable database pdb2 open

ERROR at line 1:

ORA-01157: cannot identify/lock data file 13- see DBWR trace file

ORA-01110: data file 13:'/u01/app/oracle/oradata/c12/pdb2/pdb2_users01.dbf'

只有在打开pluggabledatabase时,会效验PDB数据库的数据文件,。

SQL> alter session set container=pdb2;

Session altered.

SQL> alter pluggable database datafile 13 offline;

Pluggable database altered.

 

数据文件file#(文件号)是唯一的,但我们在CDB中操作时找不到该文件,必须要进入PDB模式,如果在CDB试图去offline一个数据文件时会报错:

SQL> show con_name

CON_NAME

------------------------------

CDB$ROOT

SQL> alter database datafile 10 offline;

alter database datafile 10 offline

第 1 行出现错误:

ORA-01516: 不存在的日志文件, 数据文件或临时文件 "10"*

但是在rman中可以直接使用datafile号进行恢复

[oracle@localhost admin]$ rman target /

恢复管理器: Release 12.1.0.2.0 - Production on 星期三 3月 23 11:04:15 2016

Copyright (c) 1982, 2014, Oracle and/or itsaffiliates.  All rights reserved.

已连接到目标数据库: CDB (DBID=2023252752)

RMAN> restore datafile 10;

启动 restore 于 23-3月 -16

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始还原数据文件备份集

通道 ORA_DISK_1: 正在指定从备份集还原的数据文件

通道 ORA_DISK_1: 将数据文件 00010 还原到 /u01……/backupset/2016_03_23/o1_mf_nnndf_TAG20160323T100113_ch3y7byj_.bkp

通道 ORA_DISK_1: 段句柄 = /u01…….backupset/2016_03_23/o1_mf_nnndf_TAG20160323T100113_ch3y7byj_.bkp标记 = TAG20160323T100113

通道 ORA_DISK_1: 已还原备份片段 1

通道 ORA_DISK_1: 还原完成, 用时: 00:00:01

完成 restore 于 23-3月 -16

RMAN> recover datafile 10;

启动 recover 于 23-3月 -16

使用通道 ORA_DISK_1

正在开始介质的恢复

介质恢复完成, 用时: 00:00:00

完成 recover 于 23-3月 -16;

以上是关于12C CDB模式下RMAN备份与恢复的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 12c 多租户 CDB 与 PDB 备份

[原创]Oracle 12c的备份和恢复策略

12c中在 RMAN 中提供了表级别恢复 RECOVER TABLE

案例:Oracle dul数据挖掘 非常规对ORACLE 12C CDB数据库进行恢复

Oracle 12C rman

Oracle 12c 多租户 CDB 与 PDB之 shared undo 与 Local undo 切换