备库密码文件问题一波三折的插曲

昨天下午开始给一个新环境搭备库,本来想一两个小时全速搞定,没想到因为密码文件的问题耽搁了,整个过程也是一波三折,希望大家能够吸取过程之中的经验和教训。
首先这个环境没有安装oracle软件,只安装了操作系统,所以搭建备库先需要安装数据库软件,然后开始从主库使用duplicate的方式同步数据文件,然后用dg broker来配置即可。
没有安装数据库软件,又没有图形界面,也好办,采用克隆方式安装
首先在主库中发现$ORALE_HOME下有一个压缩包,看来已经提前准备好了。
/U01/app/oracle/product]$ ll
total 2288996
drwxrwxr-x 3 oracle oinstall       4096 Mar 20  2012 11.2.3
-rw-r--r-- 1 root   root     2341630235 Aug  4 18:11 11.2.3.tgz
从文件内容来看压缩包实在近期压缩的,所以还是一个比较新的包,直接拷贝到备库就能用了。
$ file 11.2.3.tgz
11.2.3.tgz: gzip compressed data, from Unix, last modified: Fri Jul 31 11:48:23 2015
拷贝过去之后,创建用户,用户组,然后在备库的$ORACLE_HOME/clone/bin下直接运行下面的脚本就会开始克隆安装。大概一两分钟数据库软件就安装好了。
perl clone.pl ORACLE_BASE=/U01/app/oracle ORACLE_HOME=/U01/app/oracle/product/11.2.3/db_1  ORACLE_HOME_NAME=OraDb11g_home1
然后配置网络服务,准备就开始使用duplicate的方式同步备库了。
但是在开始同步前发现就卡在了密码文件上。
因为使用tns连接的时候报了ORA错误。
/U01/app/oracle/product/11.2.3/db_1/dbs]$ sqlplus  sys@s2test as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Oct 8 19:19:13 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter password:
ERROR:
ORA-01017: invalid username/password; logon denied
通过这个错误可以得知应该是密码错误,但是密码文件没有做任何的改动也是从主库拷贝过来的。
在备库通过tns连接主库就没有问题。
/U01/app/oracle/product/11.2.3/db_1/network/admin]$ sqlplus sys@test as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 9 00:00:20 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>

这个时候因为一直坚信密码文件没有做任何变动,所以注意力就集中在了其它的方面,首先是主机名上,发现主机名和主库的uniq_name有些冲突,感觉是主机名导致的,就开始尝试改主机名,改了之后发现错误果真变了。
$ sqlplus sys@s2test as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Oct 8 19:21:18 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter password:
ERROR:
ORA-21561: OID generation failed
这个错误比较熟悉,和/etc/hosts的配置相关,所以修复之后还是依旧提示备库密码错误。
这个时候进一步排查,如果密码文件没有成功启用,是不是和系统级的权限有关,结果查看到用户的id,用户组时,发现了一点问题。

备库中的id为
$ id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)
主库中的id为
$ id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)
可以看到用户组的id还是有一些差别,所以有种强烈的感觉就是问题应该出在这个地方,对于rac中这个差别还是很严重的,没想到在dataguard中也有这样的影响。
于是开始修改用户组。
# usermod -u 501 oracle
# id oracle
uid=501(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)
发现用户组没有生效。但是/etc/group中已经生效了
# cat /etc/group|grep oinstall
oinstall:x:501:
继续改动,这样就可以了。
# usermod -g oinstall -G dba oracle
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)
不过用户组修改完成,用户下的文件的属主还是有问题,组名显示成了500
/U01/app/oracle/product/11.2.3/db_1/dbs]$ ll
total 12
-rw-r--r-- 1 500 500  953 Oct  8 17:25 inittest.ora
-rw-r----- 1 500 500 1536 Jun 17  2013 orapwtest
-rw-r----- 1 500 500 2560 Oct  8 19:44 spfiletest.ora
所以最后还是重新安装数据库软件了事,安装完之后,带着期待继续尝试,发现问题还是没有解决。
$ sqlplus sys@s2test as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 9 00:00:13 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter password:
ERROR:
ORA-01017: invalid username/password; logon denied
通过tns连接主库还是正常。
然后反复测试还发现一个更加奇怪的现象。初步感觉是权限哪里出了问题,于是尝试先把密码文件改成777的权限。
$ chmod 777 orapwtest
$ ll orapwtest
-rwxrwxrwx 1 oracle oinstall 1536 Jun 17  2013 orapwtest
然后继续尝试登录。
$ sqlplus sys@s2test as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 9 19:45:43 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter password:
ERROR:
ORA-01017: invalid username/password; logon denied
抛完错误之后再次查看密码文件,发现原有的密码文件的权限又恢复成了最开始状态。
$ ll orapwtl*
-rw-r----- 1 oracle oinstall 1536 Jun 17  2013 orapwtest
反复尝试都是如此,自己甚至怀疑是不是oracle的网络服务相关的软件包出了问题,或者是什么bug导致的。
最后看着密码文件,觉得还是要验证一下,首先密码文件中的内容是无法读到的,单纯看朱备库的文件大小都是1536字节,时间点也比较早,想必一直也没有改动过。
最后甚至动用了strace来做诊断,结果竟然还是没有发现任何的差别,可见系统级还是没有什么差别的。
那么密码文件怎么来解析看看主备库是否一致呢。直接解析不成,我们使用strings来做。
主库中的密码文件trace如下:
$ strings orapwtest
]\[Z
ORACLE Remote Password file
INTERNAL
9B811A3069EE43B6
3C0E90D8664116E3
bF(0
备库中的密码文件trace如下:
$ strings orapwtest
]\[Z
ORACLE Remote Password file
INTERNAL
F309445D01B9354C
bHB!
B3EBA9B843B3A7D2

可以看出还是存在明显的不同,再次手工拷贝一份密码文件到备库,再做一次trace
$ strings orapwtest
]\[Z
ORACLE Remote Password file
INTERNAL
9B811A3069EE43B6
3C0E90D8664116E3
bF(0
这次就和主库一致了,尽管时间戳不同,但是从trace来看内容是一致的了。
$ ll orapwtest
-rw-r----- 1 oracle oinstall 1536 Oct  9 19:52 orapwtest
然后再次尝试,就正常了。
$ sqlplus sys@s2tset as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 9 19:53:39 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter password:
Connected to an idle instance.

问题到此还没有结束,自己还是对于用户组的问题带有疑惑,趁热打铁,把环境刷掉,再试一试用户组不同的时候,是否有影响,
# groupmod -g 506 oinstall
# id oracle
uid=501(oracle) gid=501 groups=501,502(dba)
# usermod -g oinstall -G dba oracle
# id oracle
uid=501(oracle) gid=506(oinstall) groups=506(oinstall),502(dba)
然后把原来的$ORACLE_HOME删掉重新克隆安装一遍。重新同步密码文件,尝试发现还是可以的。
$ sqlplus sys@s2test as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 9 20:07:05 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter password:
Connected to an idle instance.
SQL>
所以这个时候自己基本可以论证出问题不在主机名,不在用户组的id,而是因为密码文件的不同导致了这么多的插曲,自己也尝试了各种方法,尽管知道问题出在密码文件上,但是竟然没有专门去验证一下密码文件,带着想当然的态度认为压缩包最近更新的,所以密码文件应该是一样的。这个经验教训很深刻,大家也需要注意一下。

时间: 2024-10-25 03:01:17

备库密码文件问题一波三折的插曲的相关文章

备库搭建中的一波三折

这几天一台服务器出了硬件问题之后,这台服务器上的两个备库都殉职了,我们真是如坐针毡,毕竟没有了备库感觉就是裸奔,两个库差不多有10T,搭一套备库也是颇有波折. 当服务器到了我手里之后,首先就开始准备安装数据库软件,安装前的基本检查很快做完了,需要预先安装的依赖包我看使用yum源已经识别了,我也标示了yes,然后开始克隆安装. 奇怪的是克隆安装显示成功,竟然sqlplus不可用. $ sqlplus -v sqlplus: error while loading shared libraries:

oracle中11gR2 dataguard 备库文件损坏解决案例

某客户的一套11gR2 dataguard环境出现异常,检查发现是备库出现文件损坏,且无法正常情况,已经超过1个多月没同步了. 我们先来看下备库的日志: .......省略部分内容 See Note 411.1 at My Oracle Support for error and packaging details. Slave exiting with ORA-600 exception Errors in file /u01/app/oracle/diag/rdbms/crjnew/crjn

dataguard备库的数据文件的迁移实战

在前几天也花了一点时间测试了一下关于备库数据文件的迁移,这部分的工作看起来还是比较常规的,当然方法也很多.但是在实际工作中就更不能掉以轻心,所有的操作都要有理有据.都要经过一些严格的测试,如果测试不当,很可能在后期就会出现一些看似奇怪的问题,造成一些不必要的麻烦和影响. 所以在开始之前,做了下面的准备工作. 1.在zabbix中设定了维护窗口,这样在维护操作中就不会报警. 2.检查目前的备库参数设置,是否开启了闪回区,目前的文件路径设置情况和归档情况 3.检查目标文件路径的情况,涉及权限,文件夹

【DATAGUARD】 基于同一个主机建立物理备库和逻辑备库 (三)

[DATAGUARD] 基于同一个主机建立物理备库和逻辑备库 (三) blog文档结构图:         需求: 在同一台机器配置10g单实例+物理dg+逻辑dg,即一个主库上挂2个备库,一个物理备库,一个逻辑备库,总体思路为:先搭建2台物理dg,然后将其中的一台转换为逻辑dg   之前发布过一步一步搭建 oracle 11gR2 rac + dg,这里的dg为物理dg,但是实际自己使用过程中发现需要开3个虚拟机,机器特卡,所以决定在同一台机器上再搭建一台物理和逻辑dg. 一步一步搭建 ora

【DATAGUARD】 基于同一个主机建立物理备库和逻辑备库(一)

[DATAGUARD] 基于同一个主机建立物理备库和逻辑备库(一)      之前发布过一步一步搭建 oracle 11gR2 rac + dg,这里的dg为物理dg,但是实际自己使用过程中发现需要开3个虚拟机,机器特卡,所以决定在同一台机器上再搭建一台物理和逻辑dg. 一步一步搭建 oracle 11gR2 rac + dg 之前传(一) http://blog.itpub.net/26736162/viewspace-1290405/  一步一步搭建oracle 11gR2 rac+dg之环

Oracle中DG备库报错ORA-00313、00312、27037

DATAGUARD配置如下: PROD为主库,SBDB为备库 日志组1-3组为redolog file,4-6组为standby log 在创建standby log后主库关库,使用冷备tar包将数据传输到备库进行的恢复. DG配置完成之后,启动备库之后,备库alert日志报错如下: Errors in file /u01/app/oracle/admin/SBDB/udump/sbdb_rfs_14903.trc: ORA-00313: open failed for members of l

求教oracle dataguard 主备库日志无法同步的问题

问题描述 求教oracle dataguard 主备库日志无法同步的问题 现在做data guard 测试,试了很多次,主库的日志一直 无法同步到备份库.求高手解答. 测试环境 主库::操作系统 redhat 5.8 地址 192.168.1.135 数据库版本 oracle 10.2.0 备库: 操作系统 redhat 5.8 地址 192.168.1.3 数据库版本 oracle 10.2.0 主库参数文件 orcl.__db_cache_size=390070272 orcl.__java

备库查询导致的ORA-01110错误及修复

   最近帮助业务部门解决了一个技术问题,因为发现有数据问题需要对存在问题的数据做分析.当然一个难点就是把数据给筛选出来,当我看到他们提供的语句,在备库做了简单的数据评估之后,发现数据量比想象的要多,大概有200万条左右的数据,而业务部门手头有一个excel文件,需要和这些数据做一些比对,当然停了下筛选逻辑还蛮复杂,最开始建议他们数据量太大,使用excel还是可能出问题,但是业务部门认为应该没有太大的问题,他们会有excel中的公式等来处理,想想也有道理,就提供给了他们一个近40M的文件.   

11g备库无法开启ADG的原因分析

今天碰到一个有些奇怪的问题,但是奇怪的现象背后都是有本质的因果. 下午在做一个环境的检查时,发现备库是在mount阶段,这可是一个11gR2的库,没有ADG实在是太浪费了,对于这种情况感觉太不应该了. 所以尝试启动至open阶段,发现状态一直是read only,在ADG中应该是READ ONLY WITH APPLY才对啊. 使用dg broker设置为READ-ONLY,备库的数据库日志如下:      Standby Database:           stestdb3, Enable