提交需求
*
*

*
*
*
立即提交
点击”立即提交”,表明我理解并同意 《美创科技隐私条款》

logo

    产品与服务
    解决方案
    技术支持
    合作发展
    关于美创

    申请试用
      我的运维日记 | 集群和数据库安装目录权限被修改,如何快速恢复?
      发布时间:2017-11-17 阅读次数: 530 次

      午饭时间,正在吃饭的我↓↓↓

      叮铃铃~!叮铃铃~!

      “您好!美创小小罗,请问有什么能帮到您?”

      是木子发来紧急求助电话

      “数据库连接不上了!连不上了!要试好几次才可以!请求帮助!”

      小小罗望着桌上美滋滋的香干肉丝饭,还冒着热气和香气!眼泪差点掉下来!

      故障面前,及时响应第一。狠扒一个大口,飞奔回到电脑前。

      (客户环境:为操作系统rhel6.3,数据库rac 11.2.0.4)

      监听状态正常!

      从后台(一节点)为啥登不上数据库了,二节点却可以?数据库两节点open_mode 正常!processes 充足(4000)!直连一节点vip,报错TNS-12537,二节点则正常!

      还是监听的问题呀,啊啊啊啊啊啊!

      Grid用户:

      $ ls -l $ORACLE_HOME/bin/oracle

      -rwxr-x--x. 1 oracle oinstall 209914519 Sep 5 15:00 /oracle/grid/crs_1/bin/oracle

       

      What?权限及文件所属用户和所属组都被改了。查看安装目录/oracle里的各个文件权限!

      问题找到了!数据库和集群安装目录/oracle权限被修改了,被操作过chown –R oracle:oinstall /oracle

      经沟通,原来是误操作了!此命令本应在测试库上运行,由于开的窗口太多,点到了生产库上了!应用连接数据库都是用scan-ip,当应用连接被分配至节点1的时候,由于权限已经被修改,则会报错ORA-12537,被分配至节点2的时候能够正常连接。所以会出现连接报错,但多连接几次就能连接成功的问题。

      是的!没错!接下来就是把一节点关掉,对照二节点,把权限改回!一节点实例及集群正常关闭下来之后,应用能够正常连接数据库!

       

      那么问题来了,小小罗怎么把一节点的/oracle目录权限快速恢复呢?有三种方式:

      1、$ cluvfy comp software -n all –verbose

      For 11.2:

      For clustered Grid Infrastructure, as root user

      # cd /crs/install/

      # ./rootcrs.pl –init

      对照二节点的权限一一改回!但这么多文件,宝宝有脾气了!

      2、写脚本:

      #!/bin/sh

      echo -n "please input a directory:"

      read dir

      for i in $(find $dir)

      do

      ch=`stat "$i"|grep Uid|cut -c10-13`

      echo "chmod $ch $i">>chmod.sh

      done

      在二节点上运行之后,再回到一节点上运行(但是二节点目录和一节点并不是完全一致,这需自己vi修改下)。

      3、getfacl、setfacl命令

      a.在节点2上获取文件及目录的权限:

      # getfacl -pR /oracle > backup.txt

      b.拷贝 backup.txt 至节点1

      c.替换backup.txt中的rac2为rac1、ASM2为ASM1、orcl2为orcl1

      vi bakcup.txt

      :1,$s/rac2/rac1/g 回车 (:n,$s/ rac2/ rac1/g 替换第 n 行开始到最后一行中每一行所有rac2为rac1)

      d.在节点1上恢复权限(切到backup.txt目录下)

      # setfacl --restore=backup.txt

      e. crsctl start crs

      f.srvctl start instance -d orcl -i orcl1

      g.检查验证。

       

      显然,第三种方式,就两条命令,简便快捷!不管对/oracle 进行chown –R 还是 chmod –R 操作,只要二节点正常,就可以从二节点那边“拷贝”正确权限。

      经过一波操作之后,一节点恢复正常!应用正常连接!

      (我要去加饭了,我的鱼香肉丝饭!)

      在这个过程中,当大量连接至节点2时,报ORA-12518连接错误,存在以下几种原因:

      1、数据库层面的processes 达到阈值

      2、主机内存资源不足

      3、操作系统层面限制用户(oracle)进程数

      ……

      根据具体问题,具体分析哟!

       

      这里,还要给各位亲介绍一下,操作系统层面限制用户进程数的两个文件(就当前操作系统版本rehl 6.3):

      /etc/security/limits.conf

      /etc/security/limits.d/90-nproc.conf

      注:要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。

      即,编辑/etc/pam.d/login 添加如下内容:

      session required pam_limits.so

      然后,编辑/etc/security/limits.conf 添加如下内容(最佳实践):

      vi /etc/security/limits.conf

      grid soft nproc 2047

      grid hard nproc 16384

      grid soft nofile 1024

      grid hard nofile 65536

      oracle soft nproc 2047

      oracle hard nproc 16384

      oracle soft nofile 1024

      oracle hard nofile 65536

      限制特定用户的连接数,退出重新登录会话即生效(操作系统层面)!对于数据库,重启监听后即可,无需重启数据库或者主机。

      (注:限制特定用户的连接数,/etc/security/limits.conf不受/etc/security/limits.d/90-nproc.conf(默认)中参数的影响)

      /etc/security/limits.d/90-nproc.conf默认如下:

      * soft nproc 1024 #注:* 表示所用用户

      root soft nproc unlimited

      所以,此时oracle用户限制的连接数为2047。

      如果/etc/security/limits.d/90-nproc.conf中也是限制特定用户的连接数,例如:

      /etc/security/limits.d/90-nproc.conf默认如下:

      oracle soft nproc 1024

      此时oracle用户限制的连接数为1024。

      通常在/etc/security/limits.conf文件中增加特定用户的进程数限制,/etc/security/limits.d/90-nproc.conf保持默认即可。

       

      最后,给各位亲的一点温馨提醒:

      1、规范自己操作,操作生产库和操作测试库的窗口尽量不要同时开启,避免误切,操作到生产库。

      2、对于安装目录的权限,可以用getfacl命令获取并备份,出现目录权限被修改时可以快速恢复。

      美创数据库服务团队拥有Oracle ACE 1人、Oracle OCM 10余人、Oracle OCP 40余人。著有《Oracle数据库性能优化方法论和最佳实践》、《Oracle DBA实战攻略》等书籍。目前运维数据库2000余套,精通Oracle、DB2、MYSQL等各项数据库技术,拥有丰富的处理实战经验。

       
      免费试用
      服务热线

      马上咨询

      400-811-3777

      回到顶部