Jak szybko uruchomić / zamknąć Oracle 11?

9

Zastanawiam się, jaki jest najszybszy sposób na prawidłowe uruchomienie / zamknięcie demona Oracle DB (Oracle 11.2, zainstalowany na maszynie testowej).

Potrzebuję go do programów C / C ++, które używają OCI / Pro * C API.

Chcę tego, ponieważ jestem przyzwyczajony do szybkości uruchamiania PostgreSQL i ponieważ demon działa na maszynie wirtualnej, która jest uruchamiana (na żądanie) tylko dla przypadków testowych.

Obecnie piszę tak: start:

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

I zamknięcie:

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

To działa - programy działają zgodnie z oczekiwaniami - ale ta procedura jest dość powolna.

Oracle DB działa na CentOS 6.3, jest to darmowa (jak w piwie) dostępna „wersja standardowa”.

maxschlepzig
źródło

Odpowiedzi:

8

Możesz użyć skryptów dbstart/, dbshutktóre są dostarczane z instalacją Oracle. Są dostępne pod $ORACLE_HOME/bin.

Po nowej instalacji musisz edytować /etc/oratabplik:

# 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

Następnie możesz użyć takich skryptów:

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

dbstart zawiera wszystko, co jest potrzebne w programach Pro * C / OCI.

Użycie dbstart/ dbshutjest ulepszeniem w stosunku do niestandardowej metody wymienionej w pytaniu:

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

(razy w systemie Core i7 / 2.8GHz, wolno wirujący dysk twardy).

Jak działa dbstart / dbshut

dbstart $ORACLE_HOME$Połączenie jest w zasadzie równoznaczne z:

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

A dbshut $ORACLE_HOME$jest w zasadzie równoważne z:

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

(możesz sprawdzić, czy wszystko zostało zamknięte za pośrednictwem ps aux | grep 'tnsl\|ora')

Pamiętaj, że kolejność poleceń jest ważna. Oznacza to, że kiedy lsnrctl startzostanie wykonane po komendzie sqlplus-startup, program Pro * C / OCI nadal narzeka na niedostępny nasłuchujący TNS.

I to jest dokładnie problem z sekwencją komend w pytaniu - gdzie emctl starttylko rozwiązuje problem z niewłaściwą kolejnością, ponieważ naprawia część konfiguracji programu nasłuchującego TNS.

Należy również pamiętać, że do wykonywania programów Pro * C / OCI usługa EMCTL nie jest potrzebna.

maxschlepzig
źródło
1

Po co ci to w ogóle potrzebujesz? Jaki jest powód? Do wyłączenia masz 3 opcje:

  • zwykły shutdown- czeka na zakończenie sesji
  • shutdown immediate - wycofywanie i kończenie sesji (czeka na zakończenie wycofywania)
  • shutdown abort - zabija wszystko - zazwyczaj baza danych musi wykonać pewne odzyskiwanie przy starcie.

PS: prawdopodobnie nie potrzebujesz menedżera Enterprise do uruchomienia, jeśli potrzebujesz bazy danych tylko do testów. Użyj skryptów Oracle dbstart/ dbshut. Jeśli naprawdę potrzebujesz EM, uruchom go w tle.

ibre5041
źródło
0

yasir-arsanukaev : Czy możesz po prostu zatrzymać (zawiesić) swoją maszynę wirtualną, zapisując jej stan na dysku?

colin-t-hart : Jeśli jest to maszyna testowa, utwórz migawkę. Uruchom komputer i uruchom Oracle za pomocądbstart. Po zakończeniu wyłącz maszynę i przywróć do migawki.

użytkownik126897
źródło