您可以使用Oracle安装随附的dbstart
/ dbshut
脚本。它们可在下找到$ORACLE_HOME/bin
。
全新安装后,您必须编辑/etc/oratab
文件:
# cat /etc/oratab
# format: $ORACLE_SID:$ORACLE_HOME:N|Y
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:N
# sed -i 's/:N$/:Y/' /etc/oratab
# grep my_sid /etc/oratab
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:Y
然后,您可以使用如下脚本:
$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME
dbstart
提出Pro * C / OCI程序所需的全部功能。
使用dbstart
/ dbshut
是对问题中提到的自定义方法的改进:
method time called tools
―――――――――――――――――――――――――――――――――――――――――――――――――――――
dbstart 5.7 s lsnrctl, sqlplus
dbshut 5.7 s lsnrctl, sqlplus
custom startup 27.9 s lsnrctl, sqlplus, emctl
custom shutdown 31.0 s lsnrctl, sqlplus, emctl
(在Core i7 / 2.8GHz系统上,是慢速旋转的硬盘。)
dbstart / dbshut如何工作
一个dbstart $ORACLE_HOME$
电话基本上等同于:
$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog
和a dbshut $ORACLE_HOME$
基本上等同于:
$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog
(您可以通过验证是否已关闭所有内容ps aux | grep 'tnsl\|ora'
)
请注意,命令的顺序很重要。这意味着当lsnrctl start
在sqlplus-startup命令之后执行时,Pro * C / OCI程序仍然会抱怨TNS侦听器不可用。
这正是问题中命令序列的问题- emctl start
只是解决了错误的顺序,因为它修复了TNS-listener设置部分。
还要注意,执行Pro * C / OCI程序不需要EMCTL服务。