Bagaimana cara memulai / mematikan Oracle 11 dengan cepat?

9

Saya bertanya-tanya apa cara tercepat untuk memulai / mematikan daemon Oracle DB dengan benar (Oracle 11.2, diinstal pada mesin uji).

Saya membutuhkannya untuk program C / C ++ yang menggunakan OCI / Pro * C API.

Saya menginginkan ini karena saya terbiasa dengan kecepatan startup PostgreSQL, dan karena daemon berjalan di mesin virtual yang hanya dimulai (sesuai permintaan) untuk kasus uji.

Saat ini saya skrip seperti ini - startup:

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

Dan shutdown:

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

Ini berfungsi - program bekerja seperti yang diharapkan - tetapi prosedur ini cukup lambat.

Oracle DB berjalan pada CentOS 6.3, ini adalah 'versi standar' gratis (as-in-beer).

maxschlepzig
sumber

Jawaban:

8

Anda dapat menggunakan dbstart/ dbshutskrip yang datang dengan instalasi Oracle. Mereka tersedia di bawah $ORACLE_HOME/bin.

Setelah instalasi baru, Anda harus mengedit /etc/oratabfile:

# 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

Kemudian Anda dapat menggunakan skrip seperti ini:

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

dbstart menampilkan semua yang diperlukan untuk program Pro * C / OCI.

Menggunakan dbstart/ dbshutadalah peningkatan di atas metode kustom yang disebutkan dalam pertanyaan:

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

(kali pada sistem Core i7 / 2.8GHz, hard disk pemintalan lambat.)

Bagaimana dbstart / dbshut bekerja

Sebuah dbstart $ORACLE_HOME$panggilan pada dasarnya setara dengan:

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

Dan a dbshut $ORACLE_HOME$pada dasarnya setara dengan:

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

(Anda dapat memverifikasi jika semuanya dimatikan melalui ps aux | grep 'tnsl\|ora')

Perhatikan bahwa urutan perintah itu penting. Itu berarti ketika lsnrctl startdijalankan setelah perintah sqlplus-startup maka program Pro * C / OCI masih mengeluh tentang pendengar TNS yang tidak tersedia.

Dan ini persis masalah dengan urutan perintah dalam pertanyaan - di mana yang emctl startbaru saja menyelesaikan urutan yang salah karena itu memperbaiki bagian pengaturan TNS-listener.

Perhatikan juga bahwa untuk menjalankan program Pro * C / OCI, layanan EMCTL tidak diperlukan.

maxschlepzig
sumber
1

Mengapa Anda membutuhkannya? Apa alasannya? Untuk shutdown Anda memiliki 3 opsi:

  • plain shutdown- menunggu sesi berakhir
  • shutdown immediate - sesi rollback dan berakhir (menunggu rollback selesai)
  • shutdown abort - Membunuh semuanya - biasanya database harus melakukan pemulihan pada saat startup.

PS: Anda mungkin tidak perlu menjalankan Enterprise manager, jika Anda membutuhkan database untuk pengujian saja. Gunakan Oracle dbstart/ dbshutskrip. Jika Anda benar-benar membutuhkan EM, mulai di latar belakang.

ibre5041
sumber
0

yasir-arsanukaev : Bisakah Anda menjeda (menangguhkan) VM Anda menyimpan kondisinya ke disk?

colin-t-hart : Jika ini adalah mesin uji, buat snapshot. Mulai mesin dan mulai menggunakan Oracledbstart. Matikan mesin saat selesai dan kembalikan ke snapshot.

pengguna126897
sumber