3、猜想与解决
询问同事最近的环境变化情况,了解到一个细节:运维部门同意将服务器纳入到集中备份环境。由于环境的差异,运维部门只是负责调用各自的备份程序(自己编写),之后将备份拷贝到集中磁带上。
这样引起的笔者的一个猜想:手工执行和报错执行一个很大的差异就是登陆权限。不同的操作系统用户登录,在权限上是有所不同的。
对Oracle而言,操作系统因素有两个方面,一个是环境变量($ORACLE_SID等),另一个是系统角色。在Linux/AIX下,环境变量我们通常设置在用户的层面,使用oracle登录之后,环境变量自动设置。角色上,我们也创建了dba组进行配比。
在Windows上,相同的设置也是存在的。环境变量是以注册表键值的方式保存在全局。而管理员角色是以组策略的方式设置,名称为ora_dba。
对Oracle本机上的匿名登录,如果我们没有将操作系统用户设置在dba组里面,是可能登录失败的。
解决问题的思路有两个:一种策略是分析出集中备份环境的登录用户,将其加入到dba操作系统用户组里面。另一种方法是进行密码登陆,不使用/登陆。
笔者建议使用第二个方法,修改脚本如下:
connect target sys/oracle
run{
backup database plus archivelog delete input;
crosscheck archivelog all;
delete noprompt expired backupset;
delete noprompt obsolete;
}
转到第二天再次执行备份脚本,执行日志如下:
恢复管理器: Release 10.2.0.1.0 - Production on 星期三 1月 8 20:00:01 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
RMAN> connect target *
2> run{
3> backup database plus archivelog delete input;
4> crosscheck archivelog all;
5> delete noprompt expired backupset;
6> delete noprompt obsolete;
7> }
8>
连接到目标数据库: OTSTEST (DBID=2884314031)
使用目标数据库控制文件替代恢复目录
启动 backup 于 08-1月 -14
当前日志已存档
分配的通道: ORA_DISK_1
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\OTSTEST\ARCHIVELOG\2014_01_08\O1_MF_1_4181_9DTHG3N5_.ARC 记录 ID=1174 时间戳 =836337603
完成 backup 于 08-1月 -14
备份成功,问题解决。
4、结论
我们在实际工作中,会遇到各种各样的问题。这也就是为什么实践是成长的关键原因。综合各种知识能力,层层剥离,合理假设,可以帮助我们解决问题。