备库密码文件问题一波三折的插曲(r6笔记第83天)

昨天下午开始给一个新环境搭备库,本来想一两个小时全速搞定,没想到因为密码文件的问题耽搁了,整个过程也是一波三折,希望大家能够吸取过程之中的经验和教训。

首先这个环境没有安装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,而是因为密码文件的不同导致了这么多的插曲,自己也尝试了各种方法,尽管知道问题出在 密码文件上,但是竟然没有专门去验证一下密码文件,带着想当然的态度认为压缩包最近更新的,所以密码文件应该是一样的。这个经验教训很深刻,大家也需要注 意一下。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-10-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

介绍linux下利用编译bash设置root账号共用的权限审计设置

在日常运维工作中,公司不同人员(一般是运维人员)共用root账号登录linux服务器进行维护管理,在不健全的账户权限审计制度下,一旦出现问题,就很难找出源头,甚...

23180
来自专栏张戈的专栏

零门槛!使用Docker快速部署ES集群

自从接触 Docker 之后,对 Docker 简直是爱不释手,做什么都是行云流水。遇到部署开源软件需求,第一时间想到的都是有没有现成的 Docker 镜像?能...

3.3K40
来自专栏数据和云

一波三折:DBA需要头脑冷清思路清晰解决故障以幸存

杨廷琨(yangtingkun) 云和恩墨 CTO 高级咨询顾问,Oracle ACE总监,ITPUB Oracle数据库管理版版主 这是一则生产环境的真实维护...

369100
来自专栏运维小白

10.25 systemd管理服务

Linux系统服务管理-systemd systemctl list-units --all --type=service 几个常用的服务相关的命令 syste...

21670
来自专栏IT笔记

SpringBoot开发案例之微信小程序文件上传

最近在做一个口语测评的小程序服务端,小程序涉及到了音频文件的上传,按理说应该统一封装一个第三方上传接口服务提供给前段调用,但是开发没有那么多道理,暂且为了省事就...

76770
来自专栏JackeyGao的博客

Django小技巧14: messages 框架

让用户知道应用程序发生了什么, 是个极好的用户体验。让应用程序和用户之间能够有个很好的『交流』是个不错的选择。

26940
来自专栏杨建荣的学习笔记

停止数据库没有响应的问题分析(r9笔记第50天)

今天在看一个网友问题的时候,发现我的测试环境有些日子没有碰,竟然有一些问题,虽然说不上来,但是感觉数据库环境很卡,sqlplus登录需要花一些时间,每一个命令都...

37040
来自专栏北京马哥教育

linux 内存耗尽的分析

在测试NAS性能,用fstest长时间写,分析性能变差的原因,发现server主机内存使用率很高。 1.首先查看内存 # top -M top - 14:...

83360
来自专栏王磊的博客

Spring Boot (八)MyBatis + Docker + MongoDB 4.x

MongoDB是一个强大、灵活,且易于扩展的通用型数据库。MongoDB是C++编写的文档型数据库,有着丰富的关系型数据库的功能,并在4.0之后添加了事务支持。

20720
来自专栏乐沙弥的世界

使用swingbench实现oracle数据库压力测试

    即将上线的数据库如何来评估其性能呢,swingbench是除了Benchmark Factory for Databases的不二之选,可以用短小精悍来...

25920

扫码关注云+社区

领取腾讯云代金券