简答题 7.  如果$GRID_HOME下的权限被人为修改过,那么如何来修复该权限问题?
【正确答案】使用chown-R误操作将整个$GRID_BASE的权限修改了,或者删除了$GRID_HOME/log文件夹下的所有内容,导致集群不能启动。在这种情况下可以根据MOS文档:Tips for checking file permissions on GRID environment(ID 1931142.1)来修复该问题。
   该文档中描述到,在$GRlD_HOME/crs/utl(Oracle 11.2及12.1.0.1)或<GRID_HOME>crs/utl<hostname>(Oracle 12.1.0.2)下面的crsconfig_dirs和crsconfig_fileperms文件中记录了整个$GRID_HOME下面的文件和目录的相关权限。
   可以通过命令“cluvfy comp software -n all -verbose”来校验集群的权限是否正确。
   所以要解决这个问题其实并不难,大致可以通过如下几种方法来解决:
   1)根据MOS文档提供的建议通过$GRID_HOME/crs/install/rootcrs.pl -init或roothas.pl -init进行解决。rootcrs.pl -init是在PSU>11.2.0.3.6下执行的,如果PSU<11.2.0.3.6可以执行如下两条命令来实现同样的效果。
   
   2)采用MOS文档1515018.1上提供的脚本在正常库上生成脚本,然后将生成的脚本在异常库上执行从而来修复权限问题。
   3)Oracle 11gR2可以deconfig crs的配置,然后重新运行root.sh即可。如果OCR和数据库不在同一个磁盘组里,那么重新运行root.sh脚本并不影响数据库,所以无需担心。
   
   4)MOS文档1515018.1上提供了一个修复脚本:permission.pl。可以根据该脚本来修复。
   在安装有GI的环境下,权限、属主是严格被设定的,任何对于它们的错误修改容易引发一系列的问题,而且这些问题往往都很诡异很难按照常规的思路去诊断。一旦出现权限的问题,个人建议通过第1和第3种方式来修改。
   如果可执行文件$ORACLE_HOME/bin/oracle的属主或权限设定出了问题,那么可能会造成很多问题。例如:无法登录到数据库、ora-600错误、“TNS-12518: TNS:listener could not hand off client connection”、“Linux Error: 32: Broken pipe”、“ORA-12537: TNS:connection closed”、访问ASM磁盘出错等。解决办法很简单,可以在grid用户下运行setasmgidwrap命令重新配置$ORACLE_HOME/bin/oracle可执行文件的权限和属主或者直接将oracle文件的权限修改为6751。$ORACLE_HOME/bin/oracle可执行文件正确属主应该是oracle:asmadmin,并且权限必须有s共享才可以,如下:
   
【答案解析】