Beberapa waktu lalu, aplikasi saya tiba-tiba tidak dapat terhubung ke database Oracle. Saya belum mengetahui secara pasti apa penyebabnya. Saat mencoba login ke database, muncul pesan error ORA-12514.

Solusi Pertama
Setelah mencoba berbagai cara, akhirnya saya menemukan solusi agar database dapat berjalan kembali. Namun, solusi ini masih bersifat sementara — setidaknya database sudah bisa digunakan terlebih dahulu. Langkah-langkahnya saya ringkas sebagai berikut:
Setting Environment ORACLE_SID
set ORACLE_SID=ORCL
Ket: ORCL adalah nama database saya.
Login dengan Akses Administrator (SYSDBA)
sqlplus / as sysdba

Jalankan Database
startup;
Setelah menjalankan (startup) database, ternyata muncul satu permasalahan lagi yaitu error ORA-01078,

Error ini menunjukkan bahwa Oracle gagal membaca parameter file INITORCL.ORA, walaupun file tersebut sebenarnya ada.
Tambahkan parameter file (PFILE)
Dari error yang muncul saya coba cari keberadaan file INITORCL.ORA tersebut, dan ternyata memang file itu ada, namun Oracle service tidak memiliki akses untuk membaca file tersebut. Akhirnya saya coba menambahkan parameter file PFILE='C:\app\Administrator\product\12.2.0\dbhome_1\database\INITORCL.ORA setelah startup.
startup PFILE='C:\app\Administrator\product\12.2.0\dbhome_1\database\INITORCL.ORA';
Dan seperti yang diharapkan, akhirnya database dapat berjalan.

Cek status database,
SELECT instance_name, status FROM v$instance;

Masalah Baru
Sampai disini, terlihat masalah sudah teratasi, namun ada masalah baru yang muncul yaitu setelah database dishutdown atau komputer direstart.

Masalahnya adalah, ternyata Oracle tidak bisa melakukan startup secara otomatis setelah database dishutdown atau komputer direstart. Karena secara umum, oracle akan melalui 3 tahap utama saat melakukan startup yaitu:
- NOMOUNT / STARTED
- MOUNT
- OPEN
Bagaimana Proses / Tahapan STARTUP pada Oracle?
STARTUP NOMOUNT / STARTED
Pada tahap NOMOUNT / STARTED, Oracle setidaknya akan melakukan beberapa aktivitas diantaranya:
- Membaca
SPFILEORCL.ORAatauINITORCL.ORA - Membuat
SGA (System Global Area) - Menjalankan background proses seperti:
PMON,SMON,DBWn,LGWR, danCKPT
Pada tahap ini oracle belum membuka control file, datafile, dan redo log. Kegagalan umum yang sering terjadi pada tahap ini biasanya:
- Parameter file rusak (INITORCL.ORA)
- SPFILE tidak ditemukan
- Oracle tidak memiliki akses untuk menulis (write) dan membaca (read) file pada
ORACLE_HOME— seperti pada kasus saya ini — yang mana solusi untuk permasalah ini akan saya bahas nanti.
STARTUP MOUNT
Setelah instance hidup, Oracle akan membaca control file seperti: control01.ctl, sehingga Oracle akan mengetahui: nama database, lokasi datafile, redo log, dan checkpoint. Kegagalan yang sering terjadi pada tahap ini adalah control file hilang atau rusak.
STARTUP OPEN
Ini adalah tahap terakhir dari proses startup. Pada tahap ini Oracle akan membuka datafile, undo, dan redo log. Kegagalan umum pada tahap ini adalah:
- datafile hilang
- redo log corrupt
- recovery needed
Inilah beberapa tahapan yang akan dilakukan saat Oracle pertama dijalankan. Normalnya, saat perintah STARTUP dijalankan, Oracle secara otomatis akan melakukan perintah:
STARTUP NOMOUNTALTER DATABASE MOUNTALTER DATABASE OPEN
Sehingga kegagalan pada setiap tahap akan menyebabkan proses STARTUP terhenti.
Solusi Final dari Permasalahan Saya
Setelah melakukan analisa dan trial and error pada setiap tahapan STARTUP Oracle, akhirnya saya menemukan solusi dari permasalahan ini. Langkah-langkahnya adalah sebagai berikut:
Hapus / rename SPFILEORCL.ORA
Langkah pertama yang saya lakukan adalah menghapus atau merename SPFILEORCL.ORA, karena file ini nantinya akan dicreate ulang. Lokasi file biasanya ada pada folder %ORACLE_HOME%\database.
Setting Environment ORACLE_SID
set ORACLE_SID=ORCL
Login dengan Akses Administrator (SYSDBA)
sqlplus / as sysdba
Startup dengan parameter file
STARTUP PFILE='C:\app\Administrator\product\12.2.0\dbhome_1\database\INITORCL.ORA';
Cat: Langkah-langkah ini sudah dijelaskan sebelumnya.
Show parameter spfile
SHOW PARAMETER spfile;

Terlihat bahwa value spfile masih kosong, yang menandakan bahwa SPFILE belum dibuat.
Buat SPFILE
CREATE SPFILE FROM MEMORY;

Dan ternyata terjadi error saat membuat SPFILE. Dari error ini saya menemukan akar permasalahannya, yaitu Oracle service tidak memiliki akses untuk membaca (read) dan menulis (write) file pada folder database. OracleServiceORCL berjalan menggunakan account NT SERVICE\OracleServiceORCL, sehingga account tersebut harus memiliki permission untuk membaca dan menulis file pada folder database Oracle. Perhatikan Service OracleServiceORCL — buka Services.msc, cari OracleServiceORCL, klik kanan, pilih Properties, dan buka tab Log On — berikut:

Tambahkan account NT SERVICE\OracleServiceORCL pada folder database
Klik kanan pada folder database, pilih Properties, klik pada tab Security, dan klik tombol Advanced.

Klik tombol add dan centang Replace all child object permission...,

Klik select principal,

Tambahkan NT SERVICE\OracleServiceORCL pada form Select User or Group,

Klik Check Names dan tombol OK.
Centang Full control pada Basic permissions

Klik tombol OK.
Buat ulang SPFILE
CREATE SPFILE FROM MEMORY;

Terlihat bahwa SPFILE berhasil dibuat.
Shutdown database
SHUTDOWN IMMEDIATE;

Startup database tanpa parameter file (PFILE)
Sekarang coba lakukan STARTUP tanpa menggunakan parameter file (PFILE)
STARTUP;

Terlihat bahwa STARTUP berhasil walaupun tanpa menggunakan parameter file (PFILE).
Cek ulang parameter spfile
SHOW PARAMETER spfile;

Terlihat bahwa value spfile sudah tidak kosong lagi, yang menandakan bahwa SPFILE berhasil dibuat.
Cek status database
SELECT instance_name, status FROM v$instance;

Yaps, sampai di sini permasalahan sudah selesai. Dengan konfigurasi ini, Oracle dapat melakukan startup secara normal setelah database dishutdown maupun setelah komputer direstart.
Kesimpulan
Permasalahan ini terjadi karena Oracle service account tidak memiliki permission untuk membaca (read) dan menulis (write) file parameter database (SPFILE dan PFILE) pada folder Oracle Database. Akibatnya, Oracle gagal membaca maupun membuat file parameter secara otomatis saat proses startup dijalankan.
Sekian, semoga bermanfaat.
CMIIW.