之前我们曾提到rootcrs.pl -init运行耗时5秒钟就返回了,如果是对于GRID_HOME下所有的文件都检查并修正一边权限和属主5秒钟是远远不够的,这一点相信使用过chmod和chown的童鞋都有体会,经过我的进一步测试发现rootcrs.pl脚本修改的只是$GRID_HOME目录里这些子目录及其下的文件
drwxr-xr-x 17 root oinstall 4096 Feb 23 19:29 crs
drwxrwxr-x 5 grid oinstall 256 Feb 23 19:29 log
drwxrwxr-x 9 grid oinstall 256 Feb 23 19:29 cv
drwxr-xr-x 3 root oinstall 256 Feb 23 19:29 osysmond
drwxr-xr-x 3 root oinstall 256 Feb 23 19:29 ologgerd
drwxr-x--- 3 grid oinstall 256 Feb 23 19:29 ohasd
drwxr-x--- 3 grid oinstall 256 Feb 23 19:29 mdns
drwxr-x--- 3 root oinstall 256 Feb 23 19:29 gnsd
drwxr-x--- 3 grid oinstall 256 Feb 23 19:29 gipc
drwxr-xr-x 3 root oinstall 256 Feb 23 19:29 ctss
drwxr-x--- 4 root oinstall 256 Feb 23 19:29 crf
drwxr-xr-x 3 root oinstall 12288 Feb 23 19:29 lib
drwxr-xr-x 2 root oinstall 16384 Feb 23 19:31 bin
drwxrwxr-x 5 grid oinstall 256 Feb 23 19:31 cdata
drwxr-x--- 6 grid oinstall 256 Feb 23 19:36 gpnp
drwxrwxr-x 5 grid oinstall 4096 Feb 25 13:07 cfgtoollogs
drwx--x--x 6 grid oinstall 256 Feb 23 19:02 css
drwxr-x--- 7 grid oinstall 256 Feb 23 19:02 evm
从名称上可以看出这些都是GI后台核心进程的工作目录,猜测rootcrs.pl -init的功能只是修复各GI组件密切相关目录与文件的权限,保证GI能够正常启动与停止,但是对于其它目录则不管不问,于是我们可以看到$GRID_HOME目录下仍有大部分目录的权限还处在757
root@qzp750707b:/oracle/app/grid/product/11.2.0/grid_1>ls -lrt
total 176
-rwxr-xrwx 1 grid oinstall 59 Feb 22 16:05 oraInst.loc
drwxr-xrwx 3 grid oinstall 256 Feb 23 18:57 demo
drwxr-xrwx 3 grid oinstall 256 Feb 23 18:57 csmig
drwxr-xrwx 6 grid oinstall 256 Feb 23 18:57 assistants
drwxr-xrwx 6 grid oinstall 256 Feb 23 18:57 nls
drwxr-xrwx 5 grid oinstall 256 Feb 23 18:57 md
drwxr-xrwx 7 grid oinstall 256 Feb 23 18:57 javavm
drwxr-xrwx 3 grid oinstall 256 Feb 23 18:57 hs
drwxr-xrwx 4 grid oinstall 256 Feb 23 18:57 has
drwxr-xrwx 3 grid oinstall 256 Feb 23 18:57 diagnostics
drwxr-xrwx 4 grid oinstall 256 Feb 23 18:57 owm
drwxr-xrwx 7 grid oinstall 256 Feb 23 18:57 ord
drwxr-xrwx 4 grid oinstall 256 Feb 23 18:57 oracore
drwxr-xrwx 3 grid oinstall 256 Feb 23 18:57 wwg
drwxr-xrwx 5 grid oinstall 256 Feb 23 18:57 usm
。。。。。还有,此处省略了
为避免留下后遗症,我们需要将rootcrs.pl弃之不管的目录与文件的权限、属主也修复一下,怎么修复?MOS 1515018.1提供了现成的perl脚本,这个脚本使用方法很简单:从一台权限正常的服务器上抓取GRID_HOME、ORACLE_HOME下的所有文件与目录权限,生成shell脚本,然后在权限错误的主机上执行这个脚本,简单演示一下:
<1> 先把permission.pl下载下来复制到一台权限正常的服务器上,并赋予执行权限,这台主机上必须要有perl的执行环境
chmod u+x permission.pl
<2> 抓取$ORACLE_HOME下所有目录与文件的属主、权限,可以使用oracle用户或者root用户执行
./permission.pl /oracle/app/oracle/product/11.2.0/db_1
Following log files are generated
logfile : permission-Thu-Mar-10-14-25-31-2016
Command file : restore-perm-Thu-Mar-10-14-25-31-2016.cmd
Linecount : 38734
生成了两个文件,ls -lrt
-rw-r----- 1 oracle oinstall 7890011 Mar 10 14:25 restore-perm-Thu-Mar-10-14-25-31-2016.cmd
-rw-r----- 1 oracle oinstall 4061205 Mar 10 14:25 permission-Thu-Mar-10-14-25-31-2016
其中permission*开头的是/oracle/app/oracle/product/11.2.0/db_1目录及其下的所有子目录与文件列表,例如:
755 oracle oinstall /oracle/app/oracle/product/11.2.0/db_1
640 oracle oinstall /oracle/app/oracle/product/11.2.0/db_1/oraInst.loc
750 oracle oinstall /oracle/app/oracle/product/11.2.0/db_1/root.sh
755 oracle oinstall /oracle/app/oracle/product/11.2.0/db_1/EMStage
775 oracle oinstall /oracle/app/oracle/product/11.2.0/db_1/EMStage/PAF
。。。省略部分内容
restore*开头的包含了执行修改权限修复所需的脚本,例如:
chown oracle:oinstall /oracle/app/oracle/product/11.2.0/db_1
chmod 755 /oracle/app/oracle/product/11.2.0/db_1
chown oracle:oinstall /oracle/app/oracle/product/11.2.0/db_1/oraInst.loc
chmod 640 /oracle/app/oracle/product/11.2.0/db_1/oraInst.loc
chown oracle:oinstall /oracle/app/oracle/product/11.2.0/db_1/root.sh
chmod 750 /oracle/app/oracle/product/11.2.0/db_1/root.sh
chown oracle:oinstall /oracle/app/oracle/product/11.2.0/db_1/EMStage
chmod 755 /oracle/app/oracle/product/11.2.0/db_1/EMStage
chown oracle:oinstall /oracle/app/oracle/product/11.2.0/db_1/EMStage/PAF
chmod 775 /oracle/app/oracle/product/11.2.0/db_1/EMStage/PAF
。。。省略部分内容
<3> 抓取$GRID_HOME下所有目录与文件的属主、权限,必须使用root用户执行
./permission.pl /oracle/app/grid/product/11.2.0/grid_1
Following log files are generated
logfile : permission-Thu-Mar-10-14-21-28-2016
Command file : restore-perm-Thu-Mar-10-14-21-28-2016.cmd
Linecount : 60115
结果也生成了两个文件
ls -lrt
-rw-r----- 1 root system 13372037 Mar 10 14:24 restore-perm-Thu-Mar-10-14-24-03-2016.cmd
-rw-r----- 1 root system 6805988 Mar 10 14:24 permission-Thu-Mar-10-14-24-03-2016
<4> 在目标主机上执行restore*开头的两个脚本,root用户执行
将restore*脚本复制到目标主机后,执行
chmod u+x restore-perm-Thu-Mar-10-14-25-31-2016.cmd restore-perm-Thu-Mar-10-14-24-03-2016.cmd
./restore-perm-Thu-Mar-10-14-25-31-2016.cmd
./restore-perm-Thu-Mar-10-14-24-03-2016.cmd
总结: