max*_*zig 9 oracle oracle-11g-r2 shutdown startup centos
我想知道正确启动/关闭 Oracle DB 守护程序(Oracle 11.2,安装在测试机器上)的最快方法是什么。
对于使用 OCI/Pro*C API 的 C/C++ 程序,我需要它。
我想要这个是因为我已经习惯了 PostgreSQL 的启动速度,而且因为守护进程在一个虚拟机中运行,该虚拟机仅为测试用例启动(按需)。
目前我像这样编写脚本 - 启动:
sqlplus /nolog <<EOF
connect / as sysdba
startup
quit
EOF
lsnrctl start
emctl start dbconsole
Run Code Online (Sandbox Code Playgroud)
并关机:
emctl stop dbconsole
lsnrctl stop
sqlplus /nolog <<EOF
connect / as sysdba
shutdown
quit
EOF
Run Code Online (Sandbox Code Playgroud)
这有效 - 程序按预期工作 - 但此过程非常缓慢。
Oracle DB 在 CentOS 6.3 上运行,它是免费(如啤酒一样)可用的“标准版”。
您可以使用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
Run Code Online (Sandbox Code Playgroud)
然后你可以使用这样的脚本:
$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
(Core i7/2.8GHz 系统上的时间,慢速旋转硬盘。)
一个dbstart $ORACLE_HOME$调用基本上等同于:
$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog
Run Code Online (Sandbox Code Playgroud)
而 adbshut $ORACLE_HOME$基本上等价于:
$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog
Run Code Online (Sandbox Code Playgroud)
(您可以通过 验证是否一切都已关闭ps aux | grep 'tnsl\|ora')
请注意,命令的顺序很重要。这意味着在lsnrctl startsqlplus-startup 命令之后执行时,Pro*C/OCI 程序仍然会抱怨 TNS 侦听器不可用。
这正是问题中命令序列的问题 -emctl start只是解决了错误的顺序,因为它修复了 TNS 侦听器设置部分。
另请注意,执行 Pro*C/OCI 程序不需要 EMCTL 服务。
| 归档时间: |
|
| 查看次数: |
61796 次 |
| 最近记录: |