Gostaria de saber qual é a maneira mais rápida de inicializar/desligar corretamente um daemon do Oracle DB (Oracle 11.2, instalado em uma máquina de teste).
Eu preciso dele para programas C/C++ que usam a API OCI/Pro*C.
Eu quero isso porque estou acostumado com a velocidade de inicialização do PostgreSQL e porque o daemon é executado em uma máquina virtual que só é iniciada (sob demanda) para casos de teste.
Atualmente eu faço o script assim - startup:
sqlplus /nolog <<EOF
connect / as sysdba
startup
quit
EOF
lsnrctl start
emctl start dbconsole
E desligar:
emctl stop dbconsole
lsnrctl stop
sqlplus /nolog <<EOF
connect / as sysdba
shutdown
quit
EOF
Isso funciona - os programas funcionam conforme o esperado - mas esse procedimento é bastante lento.
O banco de dados Oracle é executado no CentOS 6.3, é a 'versão padrão' disponível gratuitamente (como na cerveja).
Você pode usar os scripts
dbstart
/dbshut
que vêm com uma instalação do Oracle. Eles estão disponíveis em$ORACLE_HOME/bin
.Após uma nova instalação, você deve editar o
/etc/oratab
arquivo:Então você pode usar os scripts assim:
dbstart
traz tudo o que é necessário para os programas Pro*C/OCI.Usar
dbstart
/dbshut
é uma melhoria acima do método personalizado mencionado na pergunta:(vezes em um sistema Core i7/2.8GHz, disco rígido de giro lento.)
Como o dbstart/dbshut funciona
Uma
dbstart $ORACLE_HOME$
chamada é basicamente equivalente a:E a
dbshut $ORACLE_HOME$
é basicamente equivalente a:(você pode verificar se tudo está desligado via
ps aux | grep 'tnsl\|ora'
)Observe que a ordem dos comandos é importante. Isso significa que quando
lsnrctl start
é executado após o comando sqlplus-startup, o programa Pro*C/OCI ainda reclama de um ouvinte TNS indisponível.E este é exatamente o problema com a sequência de comandos na pergunta - onde
emctl start
apenas contorna a ordem errada porque corrige a parte de configuração do ouvinte TNS.Observe também que, para executar programas Pro*C/OCI, o serviço EMCTL não é necessário.
Por que você precisa disso tudo? Qual é a razão? Para desligar você tem 3 opções:
shutdown
- aguarda o término das sessõesshutdown immediate
- rollbacks e termina sessões (aguarda o término do rollback)shutdown abort
- mata tudo - geralmente o banco de dados precisa executar alguma recuperação na inicialização.PS: você provavelmente não precisa do Enterprise Manager para rodar, caso precise do banco de dados apenas para testes. Use o Oracle
dbstart
/dbshut
scripts. Se você realmente precisa do EM, inicie-o em segundo plano.yasir-arsanukaev : Você pode apenas pausar (suspender) sua VM salvando seu estado no disco?
colin-t-hart : Se esta for uma máquina de teste, crie um instantâneo. Inicie a máquina e inicie o Oracle usando
dbstart
. Basta forçar o desligamento da máquina quando terminar e reverter para o instantâneo.