RMAN备份到共享存储失败(win平台)

来源:互联网 发布:js 执行上下文 编辑:程序博客网 时间:2024/05/29 01:54

RMAN备份到共享存储失败(win平台)

之前在《Win环境下Oracle小数据量数据库的物理备份》这篇文章中,介绍了在win平台下对于小数据量的数据库的物理备份设计。
文中重点提到,强烈建议备份文件有单独的存储,防止存储单点故障时备份文件亦不可用。
当我在实验环境实际去模拟这种使用单独存储的环境时,出现意料之外的问题:备份到映射的盘符无法成功,报错如下:

启动 backup 于 24-7月 -17当前日志已存档通道 c1: 正在启动归档日志备份集通道 c1: 正在指定备份集内的归档日志输入归档日志线程=1 序列=44 RECID=41 STAMP=949791480输入归档日志线程=1 序列=45 RECID=42 STAMP=949792083输入归档日志线程=1 序列=46 RECID=43 STAMP=949828864输入归档日志线程=1 序列=47 RECID=44 STAMP=949858993输入归档日志线程=1 序列=48 RECID=45 STAMP=949874423输入归档日志线程=1 序列=49 RECID=46 STAMP=949875542输入归档日志线程=1 序列=50 RECID=47 STAMP=949875688输入归档日志线程=1 序列=51 RECID=48 STAMP=950174233输入归档日志线程=1 序列=52 RECID=49 STAMP=950176635通道 c1: 正在启动段 1 于 24-7月 -17释放的通道: c1RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: backup plus archivelog 命令 (在 07/24/2017 09:57:17 上) 失败ORA-19504: 无法创建文件"Z:\HOTBACK\MYORACLE\ARCH_MCDULL_20170724_58_1.BAK"ORA-27040: 文件创建错误, 无法创建文件OSD-04002: 无法打开文件O/S-Error: (OS 3) 系统找不到指定的路径。恢复管理器完成。

实际上我手工尝试在Z:\HOTBACK\MYORACLE\目录下创建文件都是有权限的,而报错就是说无法创建,系统找不到指定的路径。
这就比较奇怪了,于是去MOS搜索报错信息,找到匹配文档:
RMAN Backup failing on mapped drive on windows (文档 ID 2160858.1)

在文档的描述中,最终解决方案是要求写全绝对的路径,而不能写映射的盘符:

Suppose \hostname\backup\ is the shared folder which has been mapped as N:\ on windows, then the format in the backup command should specify the shared folder.
For example:
RMAN>backup database format '\hostname\backup\%U';

所以我这里就修改为这种写法(实验发现无论是写主机名还是IP地址均可):

--rman_backup.txt

CONFIGURE RETENTION POLICY TO REDUNDANCY 3;CONFIGURE CONTROLFILE AUTOBACKUP ON;run {allocate channel c1 type disk;backup database format '\\WDMYCLOUD\Public\hotback\myoracle\db_%d_%T_%s_%p.bak' plus archivelog delete all input format '\\WDMYCLOUD\Public\hotback\myoracle\arch_%d_%T_%s_%p.bak';backup current controlfile tag 'CTRL' FORMAT '\\192.168.1.196\Public\hotback\myoracle\ctrl_%d%T%s%p.bak';release channel c1;}delete noprompt obsolete;exit

通过这个备份脚本测试就可以正常备份到共享存储,我这里实验环境就可以正常备份了。跟之前的文章相比,手工又加了一条控制文件的备份。这样在存储上就可以有保留完整的备份集,这样即使整个主机都瘫痪也可以方便的从存储上的备份恢复出最新备份的数据库。

但如果改成这种完整的网络路径还不行(在某客户环境就是这样设置后还不行,但报错最后的O/S-Error变为(OS 5)拒绝访问),这就很可能是其他权限因素导致,比如虚拟化的主机,有些权限需要上层虚拟化软件做统一配置。

下面是截取测试环境的某一天正常备份的日志信息如下,便于理解这一次备份的整个过程:

恢复管理器: Release 11.2.0.4.0 - Production on 星期三 7月 26 16:28:48 2017Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.已连接到目标数据库: MCDULL (DBID=3752651852)使用目标数据库控制文件替代恢复目录RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 3;2> CONFIGURE CONTROLFILE AUTOBACKUP ON;3> run {4> allocate channel c1 type disk;5> backup database format '\\WDMYCLOUD\Public\hotback\myoracle\db_%d_%T_%s_%p.bak' plus archivelog delete all input format '\\WDMYCLOUD\Public\hotback\myoracle\arch_%d_%T_%s_%p.bak';6> backup current controlfile tag 'CTRL' FORMAT '\\192.168.1.196\Public\hotback\myoracle\ctrl_%d%T%s%p.bak';7> release channel c1;8> }9> delete noprompt obsolete;10> exit旧的 RMAN 配置参数:CONFIGURE RETENTION POLICY TO REDUNDANCY 3;新的 RMAN 配置参数:CONFIGURE RETENTION POLICY TO REDUNDANCY 3;已成功存储新的 RMAN 配置参数旧的 RMAN 配置参数:CONFIGURE CONTROLFILE AUTOBACKUP ON;新的 RMAN 配置参数:CONFIGURE CONTROLFILE AUTOBACKUP ON;已成功存储新的 RMAN 配置参数分配的通道: c1通道 c1: SID=70 设备类型=DISK启动 backup 于 26-7月 -17当前日志已存档通道 c1: 正在启动归档日志备份集通道 c1: 正在指定备份集内的归档日志输入归档日志线程=1 序列=59 RECID=56 STAMP=950343518输入归档日志线程=1 序列=60 RECID=57 STAMP=950345293输入归档日志线程=1 序列=61 RECID=58 STAMP=950372931通道 c1: 正在启动段 1 于 26-7月 -17通道 c1: 已完成段 1 于 26-7月 -17段句柄=\\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\ARCH_MCDULL_20170726_75_1.BAK 标记=TAG20170726T162852 注释=NONE通道 c1: 备份集已完成, 经过时间:00:00:15通道 c1: 正在删除归档日志归档日志文件名=E:\APP\MCDULL\FAST_RECOVERY_AREA\MCDULL\ARCHIVELOG\2017_07_26\O1_MF_1_59_DQHQYWSG_.ARC RECID=56 STAMP=950343518归档日志文件名=E:\APP\MCDULL\FAST_RECOVERY_AREA\MCDULL\ARCHIVELOG\2017_07_26\O1_MF_1_60_DQHSPF9W_.ARC RECID=57 STAMP=950345293归档日志文件名=E:\APP\MCDULL\FAST_RECOVERY_AREA\MCDULL\ARCHIVELOG\2017_07_26\O1_MF_1_61_DQJNP3JO_.ARC RECID=58 STAMP=950372931完成 backup 于 26-7月 -17启动 backup 于 26-7月 -17通道 c1: 正在启动全部数据文件备份集通道 c1: 正在指定备份集内的数据文件输入数据文件: 文件号=00001 名称=E:\ORADATA\MCDULL\DATAFILE\O1_MF_SYSTEM_DOZ44HT0_.DBF输入数据文件: 文件号=00002 名称=E:\ORADATA\MCDULL\DATAFILE\O1_MF_SYSAUX_DOZ44HTZ_.DBF输入数据文件: 文件号=00003 名称=E:\ORADATA\MCDULL\DATAFILE\O1_MF_UNDOTBS1_DOZ44HV7_.DBF输入数据文件: 文件号=00005 名称=E:\ORADATA\MCDULL\DATAFILE\O1_MF_DBS_D_JI_DOZ4NYTR_.DBF输入数据文件: 文件号=00006 名称=E:\ORADATA\MCDULL\DATAFILE\O1_MF_DBS_I_JI_DOZ4O14G_.DBF输入数据文件: 文件号=00004 名称=E:\ORADATA\MCDULL\DATAFILE\O1_MF_USERS_DOZ44HVV_.DBF通道 c1: 正在启动段 1 于 26-7月 -17通道 c1: 已完成段 1 于 26-7月 -17段句柄=\\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\DB_MCDULL_20170726_76_1.BAK 标记=TAG20170726T162907 注释=NONE通道 c1: 备份集已完成, 经过时间:00:01:45完成 backup 于 26-7月 -17启动 backup 于 26-7月 -17当前日志已存档通道 c1: 正在启动归档日志备份集通道 c1: 正在指定备份集内的归档日志输入归档日志线程=1 序列=62 RECID=59 STAMP=950373053通道 c1: 正在启动段 1 于 26-7月 -17通道 c1: 已完成段 1 于 26-7月 -17段句柄=\\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\ARCH_MCDULL_20170726_77_1.BAK 标记=TAG20170726T163053 注释=NONE通道 c1: 备份集已完成, 经过时间:00:00:01通道 c1: 正在删除归档日志归档日志文件名=E:\APP\MCDULL\FAST_RECOVERY_AREA\MCDULL\ARCHIVELOG\2017_07_26\O1_MF_1_62_DQJNSXKR_.ARC RECID=59 STAMP=950373053完成 backup 于 26-7月 -17启动 backup 于 26-7月 -17通道 c1: 正在启动全部数据文件备份集通道 c1: 正在指定备份集内的数据文件备份集内包括当前控制文件通道 c1: 正在启动段 1 于 26-7月 -17通道 c1: 已完成段 1 于 26-7月 -17段句柄=\\192.168.1.196\PUBLIC\HOTBACK\MYORACLE\CTRL_MCDULL20170726781.BAK 标记=CTRL 注释=NONE通道 c1: 备份集已完成, 经过时间:00:00:03完成 backup 于 26-7月 -17启动 Control File and SPFILE Autobackup 于 26-7月 -17段 handle=E:\APP\MCDULL\FAST_RECOVERY_AREA\MCDULL\AUTOBACKUP\2017_07_26\O1_MF_S_950373059_DQJNT3DT_.BKP comment=NONE完成 Control File and SPFILE Autobackup 于 26-7月 -17释放的通道: c1RMAN 保留策略将应用于该命令将 RMAN 保留策略设置为冗余 3分配的通道: ORA_DISK_1通道 ORA_DISK_1: SID=70 设备类型=DISK删除以下已废弃的备份和副本:类型                 关键字 完成时间           文件名/句柄-------------------- ------ ------------------ --------------------备份集               54     24-7月 -17        备份片段       54     24-7月 -17         \\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\DB_MCDULL_20170724_60_1.BAK备份集               55     24-7月 -17        备份片段       55     24-7月 -17         \\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\ARCH_MCDULL_20170724_61_1.BAK备份集               57     24-7月 -17        备份片段       57     24-7月 -17         \\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\ARCH_MCDULL_20170724_63_1.BAK备份集               62     24-7月 -17        备份片段       62     24-7月 -17         E:\APP\MCDULL\FAST_RECOVERY_AREA\MCDULL\AUTOBACKUP\2017_07_24\O1_MF_S_950195379_DQC79MWR_.BKP备份集               63     24-7月 -17        备份片段       63     24-7月 -17         \\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\CTRL_MCDULL20170724691.BAK已删除备份片段备份片段句柄=\\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\DB_MCDULL_20170724_60_1.BAK RECID=54 STAMP=950177224已删除备份片段备份片段句柄=\\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\ARCH_MCDULL_20170724_61_1.BAK RECID=55 STAMP=950177329已删除备份片段备份片段句柄=\\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\ARCH_MCDULL_20170724_63_1.BAK RECID=57 STAMP=950192787已删除备份片段备份片段句柄=E:\APP\MCDULL\FAST_RECOVERY_AREA\MCDULL\AUTOBACKUP\2017_07_24\O1_MF_S_950195379_DQC79MWR_.BKP RECID=62 STAMP=950195379已删除备份片段备份片段句柄=\\WDMYCLOUD\PUBLIC\HOTBACK\MYORACLE\CTRL_MCDULL20170724691.BAK RECID=63 STAMP=9501954005 对象已删除恢复管理器完成。

从备份的日志输出可以清楚的看到,备份程序按照脚本的内容,配置了相关RMAN参数,然后首先备份归档文件,之后对数据库文件进行全备,之后又对归档文件进行备份,之后对控制文件进行备份,最后由于开启了控制文件自动备份,又对控制文件和参数文件进行了备份。最终根据目前的保留策略对陈旧的备份进行删除清理。
至此,问题就彻底解决了,困惑的是为何映射出来的盘不能直接用,非要写完整的网络路径,看来win平台的差异真是不少呀。