共计 12525 个字符,预计需要花费 32 分钟才能阅读完成。
12C 的 RMAN 和 Oracle Enterprise Manager Cloud Control 工具支持多租户环境下的备份和恢复,RMAN 可以连接到目标数据库、Data Guard、辅助实例或辅助数据库,通过连接数据库的类型不同,所完成的数据库操作也不相同,在这里我们主要描述 CDB 和 PDB 备份恢复操作,在 PDB 环境中支持备份或恢复单个数据文件或表空间。
在从数据丢失恢复能力而言,单独备份根和所有的 PDB 相当于备份整个 CDB。主要的区别是在 RMAN 命令的数目,您必须输入和恢复时间。恢复整个 CDB$ROOT 的时间要比所有的 PDB 的时间少。
1.1. RMAN 连接数据库
RMAN 可通过操作系统认证和密码文件两种方式连接到一个目标数据库,使用 RMAN 备份恢复工具的用户需要具有 SYSDBA 或 SYSBACKUP 系统权限,如果用户需要连接到恢复目录,需要被授予 RECOVERY_CATALOG_OWNER 对象权限。
操作系统认证
我们在 LINUX 环境中使用操作系统认证方式连接到数据库,我们需要满足以下两个条件:
设定 ORACLE_SID 变量,例如数据库的 SID 为 orcl,因此我们在.bash_profile 文件或者命令行设置 ORACLE_SID 变量。
ORACLE_SID=orcl; export ORACLE_SID
执行 rman 命令用户需要具有 SYSDBA 或者 SYSBACKUP 权限,Linux 环境下的 OSDBA 用户组为 dba。
具有 SYSDBA 权限用户连接到 RMAN
rman target ‘”/ as sysdba”‘
具有 SYSBACKUP 权限用户连接到 RMAN
rman target ‘”/ as sysbackup”‘
具有 SYSDBA 权限用户隐式连接到 RMAN
rman target /
密码文件认证
数据库使用密码文件认证管理用户,RMAN 可以使用密码连接。使用本地或远程访问的密码文件。使用服务名方式连接数据库时,数据库必须使用一个密码文件,同样连接到数据库的用户需要具有 SYSDBA 或 SYSBACKUP 权限。
密码文件认证具有 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 数据库需要具有 SYSDBA 或 SYSBACKUP 权限用户连接到 CDB 的 root 环境下,执行 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 数据库方法相同,使用具有 SYSDBA 或 SYSBACKUP 权限用户连接到 CDB 的 root 环境下面,然后执行 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 数据库可以通过以下两个方式备份:
在 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;
在 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 恢复的功能,恢复的方式基本同以前的模式一样,如果是在一个全新的异地进行恢复,同样的也是先手工创建与原库相同的 CDB 和 PDB 实例,然后关闭实例,删除所有数据文件,通过 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,sysaux 和 undo 表空间的数据文件,如果有问题,数据库无法 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;
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137678.htm