几天之前给一个刚入门的小兄弟问了一个在 unix 系统下面转换 DB 的问题,就想写个小 tips. 今天有空了,就写上两笔。这几天好像我勤奋的很,一连写了好几篇东西。
一向也觉得这个脾气不怎么好,勤奋起来很勤奋,懒起来也很要命。
先做一下批评与自我批评。
Oracle 自己的工具,就是 oraenv
oraenv 在 $ORACLE_HOME/bin 下面,可以直接运行的。如果用户把 $ORACLE_HOME/bin 已经加入了在 .profile 的 PATH 参数里面,就可以直接运行了。
让 snow 比较
的是,因为 snow 几乎不用这个东西,所以,居然尝试失败了:
<BLANK>$ oraenv
ORACLE_SID = [BLANK] ? FSYS89
<BLANK>$ echo $ORACLE_SID
BLANK
<BLANK>$这根本就没有变化么。印象中 oraenv 不需要更改什么直接用的啊。费了一点力气,发现:

这段话就是说,运行 oraenv 之前要 点(dot)空格(space)oraenv --> . oraenv 如果不这样运行的话,参数不会变化:
<BLANK>$ .oraenv
ksh: .oraenv: not found.
<BLANK>$ . oraenv
ORACLE_SID = [BLANK] ? FSYS89
<FSYS89>$ echo $ORACLE_SID
FSYS89
<FSYS89>$
很糗。不知道这是不是很多资深的 DBA 不建议使用 oraenv 的原因哦。
自己写 shell scripts:
可以自己写简单的 shell scripts. 比方你要转化两个数据库 abc 和 xyz 相互转化,建立连个简单的 shell script.:
####abc.sh
export ORACLE_SID=abc
export ORACLE_HOME=/oracle/10g
export PATH=$PATH:$ORACLE_HOME/bin
####xyz.sh
export ORACLE_SID=xyz
export ORACLE_HOME=/oracle/10g
export PATH=$PATH:$ORACLE_HOME/bin存在 /home/oracle 下面,给出权限 755
之后在 oralce 用户的 .profile 下面,加入这样的两行:
alias abc='. /home/oracle/abc.sh'
alias xyz='. /home/oracle/xyz.sh'
这样的话,如果你想去 abc 数据库环境,就执行 abc; 想去 xyz 数据库环境,就执行 xyz
这样做,肯定比执行 oraenv 需要按的键少 (long term 啊)。snow 很懒,能坐着绝对不站着,能躺着绝对不坐着。
所以这个方法,snow 也不用,因为如果一个服务器上面要运行10个数据库,还要建立十个 shell scripts,多麻烦呀。最好一个文件就搞定全部。
不过今天snow累了,不写了。如果各位看官,有更好的方法,请不吝赐教。多谢哦。
网上看到一个,没试过,出了问题 snow 不负责,如果你测试了好用,说一声哈:
I don't like to use oraenv, and you can do a better job right in your .profile:
for DB in `cat /etc/oratab|grep -v \#|grep -v \*|cut -d":" -f1`
do
alias $DB='export ORAENV_ASK=NO; \
export ORACLE_SID='$DB';\
. $TEMPHOME/bin/oraenv; \
export ORACLE_HOME;\
export ORACLE_BASE=\
`echo $ORACLE_HOME | sed -e 's:/product/.*::g'`;\
export DBA=$ORACLE_BASE/admin;\
export SCRIPT_HOME=$DBA/scripts;\
export PATH=$PATH:$SCRIPT_HOME;\
export LIB_PATH=$ORACLE_HOME/lib64:$ORACLE_HOME/lib '
done
另外一个跟 oraenv 连用的方法,也是加在 oracle .profile 文件里面的,也是有点匠心的哦:
echo "The SIDs on this machine are:"
cat /etc/oratab | awk -F: '{print $1}' | grep -v "#"
ORAENV_ASK="YES"
export ORAENV_ASK
. $ORACLE_HOME/bin/oraenv这个好处呢,在oracle 用户 login 入系统的时候,会列出来所有在 oratab 上面注册的数据库名字,之后就键入你要去的那个数据库就好了。
不过如果你经常去一个固定的,每次都问,就有点烦。可以把那个 sid 做到 .profile 文件里面。把上面的那段,另外做成一个 shell script,在 .profile 里面放一个 alias 就行了。