首页 > Linux操作系统 > Linux操作系统 > 干活不彻底导致备份失败
干活不彻底导致备份失败
先说说这个环境,HP rp8400双机+VA7400存储+ML5060带库+光纤交换机+光纤路由器+备份服务器B2600
7月开始带库坏了,好,去修,才开始是启动器备份错误,过了两天带库彻底宕掉了
先开始判断是电源问题,换了电源盒,电源都不对,老大说HP的带库,液晶面板坏了也有可能不能通电
液晶面板,没备件,就等上,这个时候光纤交换机,光纤路由器竟然都坏了,好,都给换掉
液晶面板来了,换上能开机了,但是备份时驱动器老是备到100G就报错,搞不懂,只有等老大有时间来看
这个时候,带库还没修好,阵列又出问题了,显示有个坏盘,可是换了盘以后,重平衡不能成功,老是失败
老大看了日志,说还有个坏盘,可是从指示灯来看又是好的,晕,由于带库没好,一直没备份,不敢轻易动阵列
这边带库还没修好,KAO,DP+RMAN CATALOG服务器B2600又坏了!日死,2个硬盘都挂了,还好客户找了个2006年的备份,换了磁盘恢复
恢复起来了,RMAN CATALOG服务器起不来,看日志,UNDO损坏,客户的这个是操作系统备份的,估计也没关库就在备份
处理了UNDO问题,老大来了,处理了带库这个驱动器的问题(具体问题我也搞不清楚,不熟悉这个东西)
重新配置了DP,RMAN,好了,可以备份了,全备了一次库。
找了个周末,关了阵列在重启,重启阵列后,老大判断的那个坏盘开始亮黄灯了,在看日志,重平衡完成了,于是把这个坏盘也换了,重平衡也完成
到此这个带库问题总算搞定了
可是。。。。。。
过了2天,客户打电话来,说又不能备份了,KAO
火速赶到客户现场,一看,生产库的SYS密码被人改了,问客户,客户不知道谁改的,客户让我改个密码
好,我改了密码,备份成功。可是。。。过了2天,客户又打电话来,又失败了。。。
又火速赶到客户现场,一看又被改了。。。日,于是给用户新建了个RMAN用户,授予SYSDBA权限
好,备份成功了。。。过了几天,客户又打电话来,又失败了。。。
又火速赶到客户现场,一看,数据库切换到了B机上面去,A机由于一次文件系统满而关掉了
于是尝试用RMAN用户登录,报错
RMAN-04005: error from target database:
ORA-01031: insufficient privileges
怀疑SYSDBA被REVOKE了,于是重新授予SYSDBA给RMAN,备份成功了
刚开始怀疑是SYSDBA被移除了,可是一想不对,应该没人管这个啊,突然想到,肯定是ORAPWD的问题
客户的ORAPWD文件是在本机上,没有在共享存储,2机用不同的ORAPWD文件
在建立ORAPWD文件时,有个参数:
entries - maximum number of distinct DBA and OPERs (opt),
指定密码文件中保存的SYSDBA用户数,SYSDBA用户登录应该用通过该文件的验证
可是现在系统切换到了B机,B机的ORAPWD文件没有RMAN的信息,于是没有权限
做了个实验:
SQL> grant sysdba to rman;
Grant succeeded.
[oracle9@WESTZQ ~]$ rman target rman/rman@source9
Recovery Manager: Release 9.2.0.8.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
connected to target database: SOURCE9 (DBID=2098103960)
[oracle9@WESTZQ dbs]$ rm orapwSOURCE9*
[oracle9@WESTZQ dbs]$ orapwd file=orapwSOURCE9 password=sys
[oracle9@WESTZQ ~]$ rman target rman/rman@source9
Recovery Manager: Release 9.2.0.8.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-01031: insufficient privileges
SQL> grant sysdba to rman;
[oracle9@WESTZQ ~]$ rman target rman/rman@source9
Recovery Manager: Release 9.2.0.8.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
connected to target database: SOURCE9 (DBID=2098103960)
来看看这个密码文件:
[oracle9@WESTZQ dbs]$ strings orapwSOURCE9
]\[Z
ORACLE Remote Password file
SOURCE9
INTERNAL
6A75B1BBE50E66AB
4DE42795E66117AE
}RMAN
E7B5D92911C831E1
不过,移除RMAN的SYSDBA权限,并不会从该文件中删除RMAN的信息
那SYSDBA这个系统权限是怎么处理的了?
SQL> grant sysdba to rman;
Grant succeeded.
SQL> SELECT * FROM DBA_SYS_PRIVS WHERE grantee='RMAN';
no rows selected
SQL> SELECT username,user_id FROM dba_users WHERE username='RMAN';
USERNAME USER_ID
------------------------------ ----------
RMAN 29
SQL> SELECT * FROM sys.system_privilege_map WHERE NAME='SYSDBA';
PRIVILEGE NAME PROPERTY
---------- ---------------------------------------- ----------
-83 SYSDBA 0
SQL> SELECT * FROM sys.sysauth$ WHERE grantee#=29;
no rows selected
查看了些系统相关表都没的SYSDBA的信息,想到还有个表:
SQL> SELECT * FROM v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
RMAN TRUE FALSE
查询了v$pwfile_users的基表,是个X$表,应该是个内存表
SQL> select * from X$KZSRT;
ADDR INDX INST_ID USERNAME SYSDBA SYSOPER VALID
-------- ---------- ---------- ------------------------------ ---------- ---------- ----------
B791FEF4 0 1 INTERNAL 1 1 1
B791FEF4 1 1 SYS 1 1 1
B791FEF4 2 1 RMAN 1 0 1
看来SYSDBA权限是个内存映射
用10046观察下,只看到语句:
insert into sysauth$ (grantee#,privilege#,option$,sequence#) values (:1,:2,decode(:3,0,null,:3),system_grant.nextval)
没有捕获到绑定变量,但是授予其他系统权限给用户,能捕获到绑定变量,还有些对seq$表的操作
于是决定跟踪下系统调用
[oracle9@WESTZQ ~]$ strace -fo /tmp/strace.out -p 29885
SQL> grant sysdba to rman;
[oracle9@WESTZQ ~]$ strace -fo /tmp/strace1.out -p 29885
SQL> grant create any table to rman;
查看文件,发现授予SYSDBA权限时,会去操作密码文件:
[oracle9@WESTZQ ~]$ cat /tmp/strace.out |grep orapwSOURCE9
29885 stat64("/u01/oracle9/app/oracle/product/9.2.0/db_1/dbs/orapwSOURCE9", {st_mode=S_IFREG|S_ISUID|0640, st_size=1536, ...}) = 0
29885 statfs("/u01/oracle9/app/oracle/product/9.2.0/db_1/dbs/orapwSOURCE9", {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=15481855, f_bfree=13276186, f_bavail=12489754, f_files=7864320, f_ffree=7753815, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
29885 open("/u01/oracle9/app/oracle/product/9.2.0/db_1/dbs/orapwSOURCE9", O_RDONLY|O_LARGEFILE) = 12
29885 statfs("/u01/oracle9/app/oracle/product/9.2.0/db_1/dbs/orapwSOURCE9", {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=15481855, f_bfree=13276186, f_bavail=12489754, f_files=7864320, f_ffree=7753815, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
29885 open("/u01/oracle9/app/oracle/product/9.2.0/db_1/dbs/orapwSOURCE9", O_RDWR|O_SYNC|O_LARGEFILE) = 12
29885 chmod("/u01/oracle9/app/oracle/product/9.2.0/db_1/dbs/orapwSOURCE9", 04640) = 0
授予create any table时,则不会
[oracle9@WESTZQ ~]$ cat /tmp/strace1.out |grep orapwSOURCE9
[oracle9@WESTZQ ~]$
看来SYSDBA这个权限,只保存在密码文件中,数据库启动时,映射到X$KZSRT表中
以后处理双机环境,一定要注意这个密码文件的问题,还是放在裸设备上好
如果不是裸设备,一定要在A机上修改后,rcp密码文件到B机上去
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8242091/viewspace-615493/ ,如需转载,请注明出处,否则将追究法律责任。