Como iniciar / desligar rapidamente o Oracle 11?

9

Gostaria de saber qual é a maneira mais rápida de iniciar / desligar corretamente um daemon do Oracle DB (Oracle 11.2, instalado em uma máquina de teste).

Preciso dele para programas C / C ++ que usam a API OCI / Pro * C.

Quero isso porque estou acostumado com a velocidade de inicialização do PostgreSQL e porque o daemon é executado em uma máquina virtual que é iniciada apenas (sob demanda) para casos de teste.

Atualmente eu script como este - inicialização:

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

E desligamento:

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

Isso funciona - os programas funcionam como 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 cerveja).

maxschlepzig
fonte

Respostas:

8

Você pode usar os scripts dbstart/ dbshutque 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/oratabarquivo:

# 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

Então você pode usar os scripts assim:

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

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:

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

(vezes em um sistema Core i7 / 2.8GHz, disco rígido giratório lento.)

Como o dbstart / dbshut funciona

Uma dbstart $ORACLE_HOME$chamada é basicamente equivalente a:

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

E a dbshut $ORACLE_HOME$é basicamente equivalente a:

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

(você pode verificar se tudo está encerrado 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 de TNS indisponível.

E este é exatamente o problema com a sequência de comandos na pergunta - onde a emctl startsolução alternativa é a ordem errada, porque corrige a parte da instalação do ouvinte TNS.

Observe também que, para executar programas Pro * C / OCI, o serviço EMCTL não é necessário.

maxschlepzig
fonte
1

Por que você precisa disso? Qual é a razão? Para o desligamento, você tem 3 opções:

  • plain shutdown- aguarda o término das sessões
  • shutdown immediate - reversões e encerra sessões (aguarda o término da reversão)
  • 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 executar, se precisar do banco de dados apenas para testes. Use o Oracle dbstart/ dbshutscripts. Se você realmente precisa do EM, inicie-o em segundo plano.

ibre5041
fonte
0

yasir-arsanukaev : Você pode apenas pausar (suspender) sua VM salvando seu estado em disco?

colin-t-hart : se esta é uma máquina de teste, crie um instantâneo. Inicie a máquina e inicie o Oracle usandodbstart. Basta forçar o desligamento da máquina quando terminar e reverter para o instantâneo.

user126897
fonte