今天,一小弟去巡检ORACLE数据库,出现了点小插曲,情况是:一台服务器上有2个oracle数据库实例,均是10.2.0.1的,ORACLE_SID分别是APP、etos。
操作系统用户oracle的默认环境变量配置ORACLE_SID是etos,从root切换到oracle时,以sqlplus / as sysdba默认登录到etos实例,且etos数据库的巡检也很顺利,
但是,到巡检APP时,那小弟傻了,登录不进去,使用export ORACLE_SID=APP指定ORACLE_SID时,系统无法执行export命令,报错如下:
然后,那小弟打电话向我求助,对于这种情况,总有点有家不能回,进家无门的感觉,让人哭笑不得。
我的做法是,首先确定操作系统类型:
$uname -a
SunOS kdswapdb01 5.10 Generic_127111-06 sun4u sparc SUNW,Sun-Fire-V890
然后,查看oracle家目录下.profile的环境变量设置是如何声明的:
$ vi .profile
".profile" 12 lines, 491 characters
# This is the default standard profile provided to a user.
# They are expected to edit it to meet their own needs.
MAIL=/usr/mail/${LOGNAME:?}
ORACLE_BASE=/u01/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.0.2
ORACLE_SID=etos
NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280
PATH=$ORACLE_HOME/bin:/bin:/sbin:/usr/ccs/bin:/usr/local/bin
BRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/usr/local/lib:/usr/lib
TMPDIR=/var/tmp
export ORALCE_BASE ORACLE_HOME ORACLE_SID NLS_LANG PATH LD_LIBRARY_PATH
明确SUNOS的用户环境变量声明是使用export的,然而当前export命令不能执行,SUNOS还有一种环境变量声明方式即setenv,尝试setenv ORACLE_SID=APP:
当前SUNOS不支持setenv,这时结合linux操作系统进行对比,可能没有执行bash,切换至bash环境下尝试:
$ bash
bash-3.00$
bash-3.00$ export ORACLE_SID=APP
bash-3.00$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 21 20:49:01 2016
Copyright (c) 1982, 2005, Oracle. All rights reserved.
而solaris的默认shell是Bourne shell,名为/bin/sh。 所以,操作SUNOS时,最好首先执行bash,让当前环境切换至bash状态。
操作系统用户oracle的默认环境变量配置ORACLE_SID是etos,从root切换到oracle时,以sqlplus / as sysdba默认登录到etos实例,且etos数据库的巡检也很顺利,
但是,到巡检APP时,那小弟傻了,登录不进去,使用export ORACLE_SID=APP指定ORACLE_SID时,系统无法执行export命令,报错如下:
然后,那小弟打电话向我求助,对于这种情况,总有点有家不能回,进家无门的感觉,让人哭笑不得。
我的做法是,首先确定操作系统类型:
$uname -a
SunOS kdswapdb01 5.10 Generic_127111-06 sun4u sparc SUNW,Sun-Fire-V890
然后,查看oracle家目录下.profile的环境变量设置是如何声明的:
$ vi .profile
".profile" 12 lines, 491 characters
# This is the default standard profile provided to a user.
# They are expected to edit it to meet their own needs.
MAIL=/usr/mail/${LOGNAME:?}
ORACLE_BASE=/u01/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.0.2
ORACLE_SID=etos
NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280
PATH=$ORACLE_HOME/bin:/bin:/sbin:/usr/ccs/bin:/usr/local/bin
BRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/usr/local/lib:/usr/lib
TMPDIR=/var/tmp
export ORALCE_BASE ORACLE_HOME ORACLE_SID NLS_LANG PATH LD_LIBRARY_PATH
明确SUNOS的用户环境变量声明是使用export的,然而当前export命令不能执行,SUNOS还有一种环境变量声明方式即setenv,尝试setenv ORACLE_SID=APP:
当前SUNOS不支持setenv,这时结合linux操作系统进行对比,可能没有执行bash,切换至bash环境下尝试:
$ bash
bash-3.00$
bash-3.00$ export ORACLE_SID=APP
bash-3.00$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 21 20:49:01 2016
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL>
问题解决,这里不得不提LINUX和SUNOS的一点不同:
shell,两个操作系统的默认shell虽然都是/bin/sh,但linux默认shell是bash,/bin/sh仅是一个指向到/bin/bash的符号链接,
而solaris的默认shell是Bourne shell,名为/bin/sh。 所以,操作SUNOS时,最好首先执行bash,让当前环境切换至bash状态。