今天在安装数据库时,除一个人外,其他人在用dbca创建数据库时,都报ora-12547的错误,
我使用conn / as sysdba,也报这样的错误:
ERROR:
ORA-12547: TNS:lost contact
分析:
1.以为是内核参数有问题,通过检查内核参数,没有看出异常
2.也有人说可能是LD_LIBRARY_PATH=$ORACLE_HOME/lib没有设置的问题,我看了我这里确实没有设置.
但我在不设置该环境变量的情况下,重新安装数据库软件,之后,再去通过dbca创建数据库,也不再出现该问题.说明与这个变量关系不大.
3.有人说通过relink all,也不解决问题
4.也有人说是$ORACLE_HOME/rdbms/lib/config.o大小为零导致,我看了我这里大小不为零
5.也看到说是$ORACLE_HOME/bin/oracle文件权限的问题,权限应为6751,我看了确实是6751,说明不只是这个单纯的问题.
[root@dbserver bin]# ls -ltr oracle
-rwsr-s--x 1 oracle dba 198796777 Jul 22 01:07 oracle
6.关键是grid用户登录都不存在这个问题,就是oracle用户有这个问题.
我突然想起前面安装时,我在付权限时,是先赋予的/u01/app/oracle的oracle:dba,后又对/u01/app赋予了 grid:dba
# chown -R oracle:dba /u01/app/oracle
# chown -R grid:dba /u01/app
# chmod -R 775 /u01/app
这样一来,/u01/app及其下的子目录(当然包含/u01/app/oracle)的所有者,都变为grid:dba了.
[root@dbserver app]# pwd
/u01/app
[root@dbserver app]# ls -ltr
total 12
drwxrwxr-x 9 grid dba 4096 Jul 22 00:43 grid
drwxrwx--- 6 grid dba 4096 Jul 22 01:07 oraInventory
drwxrwxr-x 5 grid dba 4096 Jul 22 01:07 oracle
后面安装oracle软件时,又是使用的oracle用户安装的,因此 $ORACLE_HOME/bin/oracle的所有者,就是oracle,
[root@dbserver bin]# ls -ltr oracle
-rwsr-s--x 1 oracle dba 198796777 Jul 22 01:07 oracle
由于两者不一致,就出现了这个问题,我们试图把$ORACLE_HOME的owner修改为oracle:
修改前:
[root@dbserver db_1]# ls -ld /u01/app/oracle/product/11.2.0/db_1
drwxrwxr-x 74 grid dba 4096 Jul 22 01:07 /u01/app/oracle/product/11.2.0/db_1
修改后:
[root@dbserver db_1]# chown oracle:dba /u01/app/oracle/product/11.2.0/db_1
[root@dbserver db_1]# ls -ld /u01/app/oracle/product/11.2.0/db_1
drwxrwxr-x 74 oracle dba 4096 Jul 22 01:07 /u01/app/oracle/product/11.2.0/db_1
再去以sysdba身份连接,不再报错,问题解决:
[root@dbserver db_1]# su - oracle
[oracle@dbserver ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Sat Jul 22 02:17:38 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected to an idle instance.
SQL>
回过头来,我们前面的操作步骤,确实是错了,正常的步骤应该是:
先执行这步:
# chown -R grid:dba /u01/app
再执行这步:
# chown -R oracle:dba /u01/app/oracle
最后修改权限:
# chmod -R 775 /u01/app
其实,这个还是ORACLE的ORACLE_BASE和GRID 的ORACLE_BASE在同一目录/u01/app下的原因导致,如果修改为不同的目录,这个问题就可以很好的解决.
附:
metalink上的一遍文章:[size=130%]ORA-600 [spstp: ORACLE_HOME uid does not match euid] When Changing Permissions On $ORACLE_HOME/bin/oracle (文档 ID 747456.1)
[size=130%]
[size=130%]操作系统跟踪用法:
[size=130%]strace -f -o /tmp/trace.log $ORACLE_HOME/bin/sqlplus / as sysdba
[size=130%]
[size=130%]