Selasa, 20 Juli 2010

Query untuk Detail tanggal dan waktu

Dari query sbb:

SELECT COUNT (*) FROM BODES_SUBSCRIPTION WHERE NEXT_RENEWAL between to_date('20100719 000000','YYYYMMDD HH24MISS')and to_date('20100719 235959','YYYYMMDD HH24MISS') AND SUBSCRIPTION_STATUS = 'ACTIVE'

Supaya menjadi otomatis mengeluarkan query perhari, maka querynya diubah menjadi sbb:

SELECT COUNT (*) FROM BODES_SUBSCRIPTION
WHERE NEXT_RENEWAL
between trunc(sysdate) and trunc(sysdate+1)
AND
SUBSCRIPTION_STATUS = 'ACTIVE'

Senin, 19 Juli 2010

script full backup offline dari sqlplus

set feedback off
set heading off
set verify off
set trimspool off
set pagesize 0
set linesize 200

define dir = '/..../.../..'
define fil = '/..../.../..'

prompt *** spooling to &fil

spool &fil
select 'host cp '|| name ||' &dir' from v$datafile order by 1;
select 'host cp '|| member ||' &dir' from v$logfile order by 1;
select 'host cp '|| name ||' &dir' from v$controlfile order by 1;
select 'host cp '|| name ||' &dir' from v$tempfile order by 1;
spool off;

shutdown immediate;
@fil
startup

shell script untuk export

#!/bin/sh

exp system/oracle@vasmdb1 file=/oracle/index6/vascore0100719bag1.dmp log=/oracle/index6/vascore20100719bag1.log tables=('VASMCORE.TBLTRANSMITTER','VASMCORE.16.507','VASMCORE.16.599292','VASMCORE.90.196619','VASMCORE.21.11','VASMCORE.21.19','VASMCORE.21.27');


Script diatas dijalankan dengan background proses

nohup nama_file.sh &

scrip backup level 0 / full online backup dengan RMAN

export ORACLE_SID=orcl
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

BCK=`date "+%Y%m%d"`
mkdir /home/oracle/backup/BACKUP_FULL/backup_full_$BCK
mkdir /home/oracle/backup/BACKUP_FULL/backup_full_$BCK/datafile
mkdir /home/oracle/backup/BACKUP_FULL/backup_full_$BCK/cfile
mkdir /home/oracle/backup/BACKUP_FULL/backup_full_$BCK/archive

/u01/app/oracle/product/10.2.0/db_1/bin/rman target / LOG=/home/oracle/backup/BACKUP_FULL/LOG_BACKUP/backup_full_$BCK.log << EOF

run
{
allocate channel bck1 type disk;
allocate channel bck2 type disk;
allocate channel bck3 type disk;

backup
incremental level 0
tag full_backup
format '/home/oracle/backup/BACKUP_FULL/backup_full_$BCK/datafile/df_full_%T_d%d_p%p_u%u_c%c.bak'
(database);

backup
incremental level 0
tag full_backup
format '/home/oracle/backup/BACKUP_FULL/backup_full_$BCK/cfile/cf_full_%T_d%d_p%p_u%u_c%c.bak'
(current controlfile);

backup
tag full_backup
format '/home/oracle/backup/BACKUP_FULL/backup_full_$BCK/archive/arclog_full_%T_d%d_p%p_u%u_c%c.bak'
(archivelog all);

release channel bck1;
release channel bck2;
release channel bck3;

DELETE NOPROMPT OBSOLETE;
}
EOF

Rabu, 07 Juli 2010

Merubah nilai parameter SGA_MAX_SIZE dan SGA_TARGET

Merubah nilai parameter SGA_MAX_SIZE dan SGA_TARGET

Perubahan alokasi memory di oracle database versi 10g ke atas di tentukan oleh
parameter sga_max_size dan sga_target.

Sebelum parameter ini dirubah, perlu diperhatikan hal-hal sbb:
1. Periksa kapasitas memory dari server tsb.
2. Periksa nilai shmmax dari kernel.
3. Perhitungkan alokasi penggunaan memory untuk oracle dan OS.
Apabila dalam server tersebut disatukan dengan applikasi,
maka perhitungkan kebutuhan applikasi, oracle dan OS.
4. Aturan dasar alokasi memory oracle di OS adalah sbb:
Nilai shmmax di kernel merupakan jumlah maksimal memory yang
dialokasikan untuk oracle database.
5. SGA_MAX_SIZE sebaiknya di tetapkan pada nilai lebih kecil
atau sama dengan nilai shmmax.
6. SGA_TARGET adalah parameter oracle yang mengalokasikan
jumlah maksimal memory yang di manage secara otomatis oleh
oracle.
7. Nilai dari SGA_TARGET sebaiknya ditetapkan lebih kecil atau
sama dengan SGA_MAX_SIZE.
8. Komponen memory yang di manage secara otomatis oleh oracle
melalui parameter SGA_TARGET adalah sbb:
a. DB_CACHE_SIZE,
b. SHARED_POOL_SIZE,
c. LARGE_POOL_SIZE,
d. JAVA_POOL_SIZE,
e. STREAMS_POOL_SIZE
9. Bila SGA_TARGET di set pada nilai 0, maka oracle tidak akan
memanage memory secara otomatis. Parameter berikut ini
harus di set secara manual
a. DB_CACHE_SIZE,
b. SHARED_POOL_SIZE,
c. LARGE_POOL_SIZE,
d. JAVA_POOL_SIZE,
e. STREAMS_POOL_SIZE

Perubahan parameter SGA_MAX_SIZE dan dan SGA_TARGET
memerlukan restart database. Prosesnya adalah sbb:
1. SQL> show parameter sga
2. Perintah diatas untuk memastikan nilai parameter SGA sekarang.
3. SQL> alter system set sga_max_size=5000M scope=spfile;
4. SQL> alter system set sga_target=5000M scope=spfile;
5. Create pfile dari spfile agar nilai dari parameter-parameter yang telah
dilakukan perubahan secara dinamis dapat di catat pada pfile.
SQL> create pfile='/opt/mnt3/dbs/initSID.ora' from spfile;
6. Restart database
SQL> shutdown immediate
SQL> startup
7. Bila proses restart database hang, maka nilai parameter
SGA_MAX_SIZE yang telah di set terlampau besar dan
melebihi kapasitas memory yang ada.

8. Bila hal ini terjadi,
a. Shut down abort database
SQL> shutdown abort;
b. Edit initial parameter yang telah dibuat pada tahap no.5.
Turunkan nilai SGA_MAX_SIZE dan SGA_TARGET.
c. Startup database dengan menggunakan pfile.
SQL> startup pfile='/opt/mnt3/dbs/iniSID.ora'
d. Setelah database dalam mode 'open'
(1) Periksa alokasi memory.
SQL> show parameter sga
(2) Membuat spfile dari pfile, agar oracle dapat di startup
dengan menggunakan spfile.
SQL> create spfile from pfile;
(3) Restart database
SQL> shutdown immediate
(4) Starup database
SQL> startup
(5) Periksa nilai parameter
SQL> show parameter sga

Selasa, 06 Juli 2010

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;