Senin, 30 Agustus 2010

StringBuffer

Pada tulisan kali ini saya membahas mengenai String Buffer. Karena pada saat kuliah pemrograman (khusunya java), class StringBuffer belum begitu umum digunakan daripada class String. Sehingga membuat saya penasaran terhadap penggunaan StringBuffer ini. Java memiliki satu class lagi selain class String, yaitu StringBuffer. Nah yang menimbulkan pertanyaan bagi saya yaitu adalah apa bedanya StringBuffer dengan class String biasa ?? :).

Kita mulai dulu dengan apa itu String ? class String adalah class yang hanya merepresentasikan untaian karakter. String tidak bisa dimanipulasi, dan class String bersifat konstan atau tetap (immutable), jadi sekali objek String dibuat maka objek itu akan tetap ada dan nilainya tidak berubah meskipun anda memanipulasinya dengan method tertentu atau menggunakan operator tertentu seperti "+" untuk menggabungkan dua objek string.
String str = "abcd"; ------> Objek 1
str += "efgh"; ----> str akan dibuatkan StringBuffer temporary lalu ditimpa dengan "efgh" dikonversi menjadi String menggunakan method toString. Dimana method ini akan membuat objek string baru.

Sehingga String str yang lama dengan nilai "abcd" akan tetap ada dan tidak mengalami perubahan. Hal ini sangat berbahaya misalnya jika kita ingin menggabungkan suatu String dengan nilai String lainnya secara terus menerus, karena akan menghabiskan banyak memori.

Lalu Bagaimana dengan Class String Buffer. String Buffer adalah suatu class khusus yang digunakan untuk memanipulasi untaian karakater dan sifatnya tidak tetap (mutable). Pemanipulasian menggunakan StringBuffer menjadi lebih cepat dan tidak menghabiskan banyak memori, karena java tidak perlu membuat StringBuffer temporary untuk memanipulasi suatu string.


REFERENSI
Javadocs.

Minggu, 15 November 2009

MACAM - MACAM ORACLE FLASHBACK

Pada postingan saya yang sebelumnya, saya telah membahas apa itu flashback database dan bagaimana konfigurasinya. Kali ini saya akan membahas macam - macam Oracle Flashback. Seperti yang kita ketahui oracle menyediakan fitur yang sangat bagus untuk me-recovery data yaitu Oracle Flashback.

Sebagai contoh, ketika kita secara tidak sengaja menghapus sebagian record di file Excel, untuk mengembalikannya, kita cukup klik tombol UNDO. Kita klik UNDO sekian kali untuk kembali ke kondisi data yang kita inginkan. Ketika kita tidak sengaka menghapus (drop/delete) file, untuk mengembalikan file tersebut kita cukup me-restore-nya dari recycle bin. Nah, sederhanya, Oracle Flashback Technology menyediakan feature seperi UNDO dan RECYCLE BIN di Windows. Enak, bukan?

Macam-macam Oracle flashback:

1. Oracle Flashback Query.
Berguna untuk melihat (query) isi tabel di masa lalu. Misalkan siang ini kita baru saja men-delete atau update record. Karena terkanjur commit, kita tidak bisa melakukan rollback. Dengan Oracle Flashback Query, kita bisa melihat record (isi tabel) tadi pagi sebelum kita delete atau update. Berikut ini contoh command-nya (Catatan: nama tabel yang saya pakai untuk contoh di artikel ini adalah TB):

SQL> SELECT * FROM TB AS OF TIMESTAMP
TO_TIMESTAMP('2009-06-03 06:08:03', 'yyyy-mm-dd hh24:mi:ss');
SQL> SELECT * FROM TB AS OF TIMESTAMP
TO_TIMESTAMP('2009-06-03 06:08:03', 'yyyy-mm-dd hh24:mi:ss') where nomor=3;

Keterbatasan:

  1. Karena feature ini memanfaatkan UNDO segment di UNDO tablespace, maka size dari UNDO tablespace sangat mempengaruhi sampai berapa lama masa lalu yang bisa dikembalikan lagi. Semakin besar UNDO tablespace maka semakin besar (lama) masa lalu yang bisa dikembalikan.Bila data yang diquery sudah tidak ada lagi di UNDO tablespace maka akan muncul error berikut:
    ORA-08180: no snapshot found based on specified time
  2. Batas yang bisa query adalah setelah operasi DDL (data definition language) terakhir. Contoh DDL adalah mengubah definisi tabel (alter table, add column, alter column, truncate, dll). Bila data yang di-query ada pada waktu sebelum DDL terakhir (last DDL) maka akan muncul error berikut:
    ORA-01466: unable to read data - table definition has changed

2. Oracle Flashback Table.
Berguna untuk mengembalikan kondisi (isi) tabel seperti kondisi di masa lalu. Seperti contoh di atas, kita bisa mengembalikan tabel TB sebagimana tadi pagi sebelum kita melakukan delete atau update record. Berikut ini perintahnya:

SQL> FLASHBACK TABLE TB TO TIMESTAMP
TO_TIMESTAMP('2009-06-03 06:08:03', 'yyyy-mm-dd hh24:mi:ss');

Syaratnya: “ROW MOVEMENT” harus di-enable. Berikut ini command-nya:

SQL> ALTER TABLE TB ENABLE ROW MOVEMENT;

Kalau tidak di-enable, bila menjalankan command FLASHBACK TABLE akan muncul error message berikut:

ORA-08189: cannot flashback the table because row movement is not enabled

Keterbatasan: sama dengan Oracle Flashback Query.

User yang tidak punya ROLE DBA, agar bisa melakukan flashback harus mempunyai privilege FLASHBACK ANY TABLE. Contoh memberi privilege ke user EMP:

SQL> grant FLASHBACK ANY TABLE to EMP;

3. Oracle Flashback Drop.
Berguna untuk mengembalikan tabel yang telah di-drop. Kalau di Windows adalah restore file dari recycle bin. Command untuk melihat isi dari recycle bin:

SQL> select * from dba_recyclebin;
SQL> select * from user_recyclebin;
SQL> select * from recyclebin;

Restore tabel:

SQL> FLASHBACK TABLE TB TO BEFORE DROP;

Kita juga bisa me-restore dan mengubah nama tabel tersebut:

SQL> FLASHBACK TABLE TB TO BEFORE DROP RENAME TO TB_OLD;

Keterbatasan:
Setelah (misalkan) tabel TB di-drop, secara physic data masih ada di tablespace, tidak dihapus, hanya diberi tanda (flag) bahwa space yang dipakai oleh tabel tersebut sewaktu-waktu bisa dihapus dan dipakai untuk yang lain. Ketika space kosong di tablespace sudah habis, sementara dibutuhkan space lagi untuk data yang baru masuk, maka space dari tabel TB tersebut akan dibersikan dan siap dipakai untuk data baru. Jadi, sampai berapa lama tabel akan disimpan di recycle bin? Ya tergantung ketersediaan free space di tablespace yang bersangkutan.

Catatan:
Berkaitan dengan truncate, dalam beberapa hal saya menghindari truncate dan lebih memilih drop table. Karena truncate adalah DDL maka kita tidak bisa mengembalikan data (table) pada kondisi sebelum truncate. Sementara itu drop table bisa di-restore kembali oleh Oracle Flashback Drop.

4. Oracle Flashback Database.

Merupakan alternatif lain dari database Point-In-Time Recovery.
Kalau sempat akan saya bahas di lain kesempatan.

sumber : http://rohmad.net/2009/06/05/oracle-flashback-technology-recycle-bin/#more-147

Flashback Database

Flashback database merupakan fitur baru dalam Oracle 10g, dengan flashback database kita bisa mengembalikan database ke kondisi tertentu berdasarkan waktu atau SCN. Flashback database digunakan untuk melakukan recovery database karena user melakukan truncate large table, drop user atau terjadi kesalahan transaksi yang sangat kompleks sehingga terlalu sulit untuk telusuri.
Walaupun flashback database lebih mudah dan lebih simple dibandingkan dengan INCOMPLETE RECOVERY namun ada keterbatasan terhadap flashback database. Flashback database tidak bisa dilakukan dalam kondisi seperti:

  • Kerusakan media disk, kita tetap harus melakukan restore file database dari media backup dan melakukan recovery baik complete ataupun incomplete
  • Datafile sudah berubah ukuran menjadi lebih kecil atau biasa disebut shrinking datafiles (defrag datafile)
  • Control baru direstore atau recreate
  • Drop tablespace dan recovery dengan OPEN RESETLOGS
  • Tidak bisa melakukan flashback database ke SCN yang lebih kecil dari SCN yang ada di flashback log

KONFIGURASI FLASHBACK

Secara default database yang kita buat belum bisa untuk melakukan flashback database. Kita harus melakukan beberapa konfigurasi dulu

1. SETTING ARCHIVELOG MODE DATABASE
Flashback database mensyaratkan database harus ARCHIVELOG. Untuk mengetahui apakah database sudah archivelog atau belum, cek dengan perintah berikut:

SQL> ARCHIVE LOG LIST;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 1
Next log sequence to archive 3
Current log sequence 3

Info diatas menunjukkan database sudah ARCHIVELOG. Jika belum lakukan konfigurasi dengan cara seperti berikut :

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT ;
SQL> ALTER DATABASE ARCHIVELOG ;
SQL> ALTER DATABASE OPEN ;

2. SETTING UKURAN FLASH RECOVERY AREA

SQL> SHOW PARAMETER db_recovery_file_dest_size;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
db_recovery_file_dest_size big integer 2G

Ukuran flash recovery area adalah 2 GB, jika ukuran dirasa kurang, flash recovery area bisa dibesarkan dengan perintah :

SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3G;
System altered.

3. SETTING RETENTION FLASHBACK
Misalkan maksimum bisa flashbak sampai 2 hari ke belakang.

SQL> ALTER SYSTEM SET
2 DB_FLASHBACK_RETENTION_TARGET=2880
3 SCOPE=BOTH; System altered.


4. AKTIFKAN FITUR FLASHBACK DATABASE

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 272629760 bytes
Fixed Size 1248504 bytes
Variable Size 88081160 bytes
Database Buffers 180355072 bytes
Redo Buffers 2945024 bytes
Database mounted.

SQL> alter database flashback on;
Database altered.
SQL> alter database open;
Database altered.

MONITORING FLASHBACK

Flashback database bisa dimonitor melalui dynamic view V$DATABASE, V$FLASHBACK_DATABASE_LOG dan V$FLASHBACK_DATABASE STATS.
View V$DATABASE menampilkan informasi apakah Flashback Database enable atau disable, jika enable bernilai YES dan disable bernilai NO.

SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES

View V$FLASHBACK_DATABASE_LOG view baru di Oracle 10g dan dibuat untuk mendukung fasilitas Flashback Database. Informasi dari view ini adalah total space yang diperlukan di recovery area untuk mendukung aktifitas flashback database. View ini juga menampilkan ukuran flashback data yaitu pada kolom FLASHBACK_SIZE. Kolom ESTIMATED_FLASHBACK_SIZE digunakan untuk menentukan perkiraan ukuran flashback data yang diperlukan untuk setting retention target yang sudah kita lakukan.

SQL> select
2 oldest_flashback_scn AS OLD_SCN,
3 TO_CHAR(oldest_flashback_time,'DD-MM-YYYY:HH24:MI:SS') AS OLD_TIME,
4 retention_target as RET_TARGET,
5 estimated_flashback_size,
6 FLASHBACK_SIZE
7 from v$flashback_database_log;
OLD_SCN OLD_TIME RET_TARGET EST_FB_SIZE FLASHBACK_SIZE
------- ---------------- ---------- ----------- --------------
741507 02-10-2007:13:16 2880 0 8192000

Database Anda sudah siap untuk fitur FLASHBACK DATABASE.

sumber : http://www.klik-oracle.web.id/?tag=flashback-database