¿Cómo iniciar / apagar rápidamente Oracle 11?


9

Me pregunto cuál es la forma más rápida de iniciar / apagar correctamente un demonio de Oracle DB (Oracle 11.2, instalado en una máquina de prueba).

Lo necesito para programas C / C ++ que usan la API OCI / Pro * C.

Quiero esto porque estoy acostumbrado a la velocidad de inicio de PostgreSQL y porque el daemon se ejecuta en una máquina virtual que solo se inicia (a pedido) para casos de prueba.

Actualmente lo escribo así: inicio:

sqlplus /nolog <<EOF
connect / as sysdba
startup
quit
EOF
lsnrctl start
emctl start dbconsole

Y apagado:

emctl stop dbconsole
lsnrctl stop
sqlplus /nolog <<EOF
connect / as sysdba
shutdown
quit
EOF

Esto funciona, los programas funcionan como se esperaba, pero este procedimiento es bastante lento.

Oracle DB se ejecuta en CentOS 6.3, es la 'versión estándar' gratuita (como en cerveza) disponible.

Respuestas:


8

Puede usar los scripts dbstart/ dbshutque vienen con una instalación de Oracle. Están disponibles bajo $ORACLE_HOME/bin.

Después de una nueva instalación, debe editar el /etc/oratabarchivo:

# 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

Entonces puedes usar los scripts como este:

$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME

dbstart trae todo lo que se necesita para los programas Pro * C / OCI.

Usar dbstart/ dbshutes una mejora por encima del método personalizado mencionado en la pregunta:

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

(veces en un sistema Core i7 / 2.8GHz, disco duro de giro lento).

Cómo funciona dbstart / dbshut

Una dbstart $ORACLE_HOME$llamada es básicamente equivalente a:

$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog

Y a dbshut $ORACLE_HOME$es básicamente equivalente a:

$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog

(puede verificar si todo está apagado a través de ps aux | grep 'tnsl\|ora')

Tenga en cuenta que el orden de los comandos es importante. Eso significa que cuando lsnrctl startse ejecuta después del comando sqlplus-startup, el programa Pro * C / OCI todavía se queja de un escucha TNS no disponible.

Y este es exactamente el problema con la secuencia de comandos en la pregunta, donde la emctl startsolución alternativa es el orden incorrecto porque corrige la parte de configuración del oyente TNS.

También tenga en cuenta que para ejecutar programas Pro * C / OCI no se necesita el servicio EMCTL.


1

¿Por qué lo necesitas en absoluto? ¿Cuál es la razón? Para el apagado tiene 3 opciones:

  • plain shutdown: espera el final de las sesiones
  • shutdown immediate - retrocesos y finaliza sesiones (espera el final del retroceso)
  • shutdown abort - mata todo - generalmente la base de datos tiene que realizar alguna recuperación en el inicio.

PD: probablemente no necesite Enterprise Manager para ejecutar, si necesita la base de datos solo para pruebas. Usa el Oracle dbstart/ dbshutscripts. Si realmente necesita EM, inícielo en segundo plano.


0

yasir-arsanukaev : ¿Puedes pausar (suspender) tu VM guardando su estado en el disco?

colin-t-hart : si se trata de una máquina de prueba, cree una instantánea. Inicie la máquina e inicie Oracle usandodbstart. Simplemente retire la máquina cuando haya terminado y retroceda a la instantánea.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.