ORACLE_HOME权限被修改后如何恢复

1. 故障说明

某套 RHEL6 + 11gR2 RAC的安装路径如下:

grid用户环境变量:
ORACLE_BASE=/oracle/grid
ORACLE_HOME=/oracle/product/11.2.0/grid

oracle用户环境变量:
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/product/11.2.0/db_1

监控发现这套数据库无法连接,通过客户端连接数据库报ORA-12537。

C:\>sqlplus "sys/xxxx@xxx1 as sysdba"

SQL*Plus: Release 11.2.0.3.0 Production on Thu Mar 12 08:56:51 2015

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12537: TNS:connection closed

Enter user-name:

检查发现/oracle目录权限发生了变化,相关维护人员说明,因为误操作,在两个节点上执行了chown -R oracle:dba /oracle
两个节点的Oracle集群和数据库实例都在运行,未宕机。

2. 解决ORA-12537

因为执行了chown -R oracle:dba /oracle,导致oracle用户下的$ORACLE_HOME/bin/oracle二进制程序的S权限位丢失,
监听在grid用户里,无法创建Oracle进程,导致ORA-12537的发生,解决办法比较简单:
$ chmod u+s $ORACLE_HOME/bin/oracle
在两个节点上执行命令后,客户端就可以连接Oracle数据库。

3. 解决grid的权限问题

由于grid软件的权限都被修改为oracle:dba,如果不恢复权限,可能会导致集群出现故障。
在测试库上测试时,使用如下命令:

# chown -R grid:oinstall /oracle/product/11.2.0/grid/*
# /oracle/product/11.2.0/grid/crs/install/rootcrs.pl -init

集群可以正常启动和停止,但是在grid的alert日志中存在一些报错信息,主要是log的权限问题

4. 完全恢复权限和属主

当前平台是RHEL 6,可以使用Linux上的getfacl和setfacl命令恢复路径的权限,
找一套同版本目录相同的RAC数据库,保存/oracle目录下所有文件的权限

# cd /oracle
# getfacl -R ./  > dir_privs_orig1.txt
# cd /oracle
# getfacl -R ./  > dir_privs_orig2.txt

把两个日志文件分别上传到故障数据库的两个节点的/oracle目录
在故障1号节点的dir_privs_orig1.txt文件,用vi修改如下:

%s/orig01/dest01/g                  # 修改节点1主机名
%s/orig1/dest1/g                    # 修改实例1
%s/orig02/dest02/g                  # 修改节点2主机名
%s/orig2/dest2/g                    # 修改实例2
%s/orig/dest/g                      # 修改数据库名

应用:
# setfacl –restore=dir_privs_orig1.txt

在故障2号节点的dir_privs_orig2.txt文件,用vi修改如下:

%s/orig02/dest02/g
%s/orig2/dest2/g
%s/orig01/dest01/g
%s/orig1/dest1/g
%s/orig/dest/g

应用:
# setfacl –restore=dir_privs_orig2.txt
执行完,权限基本就完全恢复了

5. 其它平台如何处理

使用permission.pl文件,生成没有问题的数据库目录的权限,然后到有问题的数据库上进行恢复。
在恢复前,也需要替换相关主机名和实例名

例如:

$ ./permission.pl $ORACLE_HOME
Following log files are generated
logfile      : permission-Mon-Jan-02-19-57-01-2017
Command file : restore-perm-Mon-Jan-02-19-57-01-2017.cmd
Linecount : 38954

$ head -10 restore-perm-Mon-Jan-02-19-57-01-2017.cmd
chown  oracle:oinstall /data/oracle/product/11.2.0/dbhome_1
chmod  755 /data/oracle/product/11.2.0/dbhome_1
chown  oracle:oinstall /data/oracle/product/11.2.0/dbhome_1/oraInst.loc
chmod  640 /data/oracle/product/11.2.0/dbhome_1/oraInst.loc
chown  oracle:oinstall /data/oracle/product/11.2.0/dbhome_1/root.sh
chmod  750 /data/oracle/product/11.2.0/dbhome_1/root.sh
chown  oracle:oinstall /data/oracle/product/11.2.0/dbhome_1/ccr
chmod  755 /data/oracle/product/11.2.0/dbhome_1/ccr
chown  oracle:oinstall /data/oracle/product/11.2.0/dbhome_1/ccr/lib
chmod  755 /data/oracle/product/11.2.0/dbhome_1/ccr/lib
......

根据实际情况,替换相关主机名和实例名,然后恢复

$ chmod 755 restore-perm-<timestamp>.cmd
$ ./restore-perm-<timestamp>.cmd

6. 其它

$GRID_HOME/crs/utl/crsconfig_dirs 列出了$GRID_HOME目录中目录和相关权限
$GRID_HOME/crs/utl/crsconfig_fileperms 列出了$GRID_HOME目录中文件和相关权限

# cd /crs/install/
# ./rootcrs.pl -init
可以恢复这些文件的权限,但是还有很多log等目录的权限无法恢复。

关于紫砂壶

感悟技术人生
此条目发表在故障处理分类目录,贴了标签。将固定链接加入收藏夹。

1 则回应给 ORACLE_HOME权限被修改后如何恢复

评论已关闭。