Bagaimana menyelesaikan permasalahan ORA-00604 dan ORA-00018?
Bila user tidak bisa melakukan koneksi ke database baik dari applikasi maupun sqlplus,
dengan error sbb:
1. Dari sqplus.
SQL*Plus: Release 10.2.0.4.0 - Production on Wed Jul 7 09:47:03 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01075: you are currently logged on
2. Dari alert log.
Wed Jul 7 10:02:05 2010
Errors in file /rdbms/oracle/admin/maddb/bdump/maddb_smon_19067.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-00018: maximum number of sessions exceeded
3. Dari RMAN
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-00604: error occurred at recursive SQL level 1
ORA-00018: maximum number of sessions exceeded
Maka DBA perlu memeriksa hal-hal sbb:
1. Periksa arti dari ORA-00604 dan ORA-00018.
Dokumentasi oracle yang bisa di download dari OTN, dapat kita pergunakan untuk
mengetahui arti dari pesan error ini atau bisa juga dengan cara mencari
informasi pesan error ini melalui google.
Berikut ini adalah arti dari pesan error ORA-00064 dan ORA-00018:
ORA-00604: error occurred at recursive SQL level 1
Cause: An error occurred while processing a recursive SQL statement.
A recursive SQL statement is one that applies to internal
dictionary tables.
Action: If the situation described in the next message on the stack can
be corrected, do so; otherwise, contact customer support.
ORA-00018: maximum number of sessions exceeded
Cause: An operation requested a resource that was unavailable.
The maximum number of sessions is specified by the
initialization parameter SESSIONS.
When this maximum is reached, no more requests are processed.
Action: Try the operation again in a few minutes.
If this message occurs often, shut down Oracle, increase the
SESSIONS parameter in the initialization parameter file, and
restart Oracle.
2. Penjelasan dari pesan error itu berdasarkan metalink doc.id 419130.1 adalah sbb:
sesi (oracle session) dari seluruh user telah mendekati atau sama dengan
nilai session pada initial parameter.
Untuk memeriksa hal ini, lakukan hal-hal sbb:
SQL> show parameter sessions
SQL> show parameter processes
Parameter sessions menunjukkan maksimal session yang bisa terhubung ke database.
SQL> select count(*) from v$session;
Query ini digunakan untuk menghitung banyaknya sesi (oracle session) yang sedang
terhubung ke oracle database.
Error ini akan muncul pada kondisi sbb:
nilai dari ( select count(*) from v$session ) mendekati atau sama dengan ( show parameter
sessions ).
3. Bila kondisi diatas (pada point no.2) terpenuhi, maka solusinya adalah merubah nilai
parameter session pada initial parameter.
Parameter session berhubungan erat dengan parameter processes. Bila parameter
processes dirubah, maka sistem oracle secara otomatis menghitung nilai optimal
untuk parameter sessions.
SQL> alter system set processes=300 scope=spfile;
Default dari parameter processes adalah 150.
SQL> create pfile='/opt/u1/oracle/dbs/iniSID.ora' from spfile;
Perintah ini memerintahkan oracle untuk membuat parameter file dari spfile.
File ini dipergunakan sebagai backup / cadangan bila file spfile mengalami
kerusakan pada waktu startup database dan semua nilai dari dynamic
parameter spfile telah tercatat juga di parameter file (pfile).
Perubahan parameter ini memerlukan restart database.
SQL> shutdown immediate;
SQL> startup
Periksa hasil perubahan parameter tadi dengan query sbb:
SQL> show parameter processes
SQL> show parameter session
4. Bila kondisi pada point no.2 tidak dipenuhi, maka lakukan hal-hal sbb:
SQL> select count(*) from x$ksuse where bitand(ksspaflg,1) !=0 ;
Bandingkan hasil query diatas dengan
SQL> select count(*) from v$session;
Nilai dari x$ksuse mendekati sama dengan v$session.
5. Rekomendasi dari oracle adalah sbb:
a. Nilai parameter processes / sessions harus 2x dari procesess / session
yang diperkirakan akan terhubung ke database.
6. Query untuk memeriksa utilisasi parameter processes di oracle database adalah
sbb:
SQL> select * from v$resource_limit where resource_name='processes';
7. Alternatif lain untuk melihat utilisasi session bila kondisi point no.2 tidak
terpenuhi adalah sbb:
SQL> select SESSIONS_MAX , SESSIONS_WARNING, SESSIONS_CURRENT,
SESSIONS_HIGHWATER, USERS_MAX from v$license;
Tidak ada komentar:
Posting Komentar