Oracle Proses ke Lock atau ke kunci

Saya mau share tentang oracle, kadang ketika kita menjalankan sebuah store procedure yang berisi banyak logic yang rumit sehingga kadang membuat proses di oracle nya menjadi deadlock atau berhenti, sehingga berpengaruh pada table table yang ada di dalam logic store procedure tidak bisa di alter ataupun di select. untuk itu solusinya kita harus kill sesionnya supaya bisa normal kembali. dibawah ini adalah query untuk mendapatkan sid dan serial proses yang deadlock tadi.

   select s.sid, s.serial#, p.spid 
from 
   v$session s, 
   v$process p 
where 
   s.paddr = p.addr 
and 
   s.sid in (select SESSION_ID from v$locked_object);

setelah ada hasilnya, silah column sid dan serial#

jalankan query dibawah ini :

ALTER SYSTEM KILL SESSION 'sid,serial#';

*sid dan serial# diisi dengan sid dan serial# hasil query sebelumnya.

Startup and Shutdown Instance Oracle

$ set ORACLE_SID=EXAMPLEORACLE
$ sqlplus /nolog
SQL> conn / as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size                  2040952 bytes
Variable Size            1040194440 bytes
Database Buffers          553648128 bytes
Redo Buffers               14729216 bytes
Database mounted.
Database opened.
SQL> exit

Code SQL untuk Mengcopy Satu Table Berserta Records nya Oracle

Untuk mengkopi sebuah table gak perlu susah2 membuat query create table yang panjang serta query khusus untuk insert table lama ke table baru yang rumit banget, coba pakai query dibawah ini :
create table table_baru
as select * from table_lama;

Selamat mencoba 😀

@bahrie_bhe

JDBC Java memanggil Store Procedure Oracle Update Delete PL/SQL

Di artikel sebelumnya sudah saya tulis bagaimana java memanggil sp yang isinya insert dan select, dan yang sekarang adalah untuk operasi update dan delete. seperti biasa sebelumnya kita buat dulu Store Procedurenya untuk Update dan Delete :

Store Procedure Update

create or replace
PROCEDURE SP_BHE_MHS_U 
(
nim_in         IN bhe_mhs.nim%type,
name_in        IN bhe_mhs.name%type,
address_in     IN bhe_mhs.address%type,
result_cursor  OUT SYS_REFCURSOR
)
AS 
BEGIN
  update bhe_mhs 
  set
  name      =name_in,
  address   =address_in
      where 
      nim=nim_in;
        
         OPEN result_cursor FOR
  select 'success' as status from dual;
END;

Store Procedure untuk Delete

create or replace
PROCEDURE SP_BHE_MHS_D 
(
nim_in         IN bhe_mhs.nim%type,
result_cursor  OUT SYS_REFCURSOR
)
AS 
BEGIN
  
  delete from bhe_mhs 
      where 
      nim=nim_in;
  
END;

Code java yang memanggilnya :

code Update

public void update(Mahasiswa o) throws SQLException {
        String updateMahasiswa = "{call bahrie_bhe.sp_bhe_mhs_u(?,?,?,?)}";
        CallableStatement callableStatement = DatabaseUtilities.getConnection().prepareCall(updateMahasiswa);
        callableStatement.setString(1, o.getNim());
        callableStatement.setString(2, o.getNama());
        callableStatement.setString(3, o.getAlamat());
        callableStatement.registerOutParameter(4, OracleTypes.CURSOR);
        callableStatement.executeUpdate();
    }

Code java untuk delete

public void delete(String nim) throws SQLException {
        String deleteMahasiswa = "{call bahrie_bhe.sp_bhe_mhs_d(?,?)}";
        CallableStatement callableStatement = DatabaseUtilities.getConnection().prepareCall(deleteMahasiswa);
        callableStatement.setString(1, nim);
        callableStatement.registerOutParameter(2, OracleTypes.CURSOR);
        callableStatement.executeUpdate();
    }

insert select update delete sudah saya kasih contoh, silahkan teman2 kembangkan sendiri dalam belajar.
Selamat mencoba 😀

@bahrie_bhe

JDBC Java memanggil Store Procedure Oracle Select PL/SQL

Di artikel yang sebelumnya sudah saya bahas bagaimana memanggil SP insert, nah yang sekarang adalah contoh untuk operasi select. jadi pertama kita bkin Store Procedure di oracle setelah itu kita panggil dengan java. codenya dapat dilihat dibawah ini, oh ya keuntungan memakai Store Procedure dibandingkan kita query insert ada di program java yaitu dengan data transaction di tangani oleh Oracle maka proses yang ada di aplikasi kita akan menjadi lebih ringan karena proses transaksinya berada di database. dan biasanya mesin database dan mesin aplikasi itu di pisah, sehingga hit yang tinggi ke aplikasi tidak membuatnya hang karena proses transaksi di limpahkan ke oracle, java hanya sebagai penghubung atau jalan. bila penjelasannya masih belum bisa dipahami mungkin bisa tanya ke google atau bisa diskusi dengan saya 😀

Store Procedure Select

create or replace
PROCEDURE SP_BHE_MHS_S 
(
result_cursor OUT SYS_REFCURSOR
)
AS 
BEGIN
open result_cursor for
  SELECT  
    nim nim,
    name nama,
    address alamat
    from bhe_mhs;
END;

code java seperti dibawah ini :

public List<Mahasiswa> getAll() throws SQLException {
        String getMahasiswa = "{call bahrie_bhe.sp_bhe_mhs_s(?)}";
        CallableStatement callableStatement = DatabaseUtilities.getConnection().prepareCall(getMahasiswa);
        callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
        callableStatement.executeUpdate();
        ResultSet rs = (ResultSet) callableStatement.getObject(1);
        List<Mahasiswa> list = new ArrayList<Mahasiswa>();
        while (rs.next()) {
            Mahasiswa mhs = new Mahasiswa();
            mhs.setNim(rs.getString("nim"));
            mhs.setNama(rs.getString("nama"));
            mhs.setAlamat(rs.getString("alamat"));
            list.add(mhs);
        }
        return list;
    }

Selamat mencoba 😀

@bahrie_bhe

JDBC Java Memanggil Store Procedure Oracle Insert PL/SQL

Di Postingan sebelumnya sudah saya singgung tentang bikin schema oracle. Nah disini saya teruskan dengan membuat table serta membuat SP (store procedure) yang berfungsi sebagai jembatan untuk memasukan data dari aplikasi ke table.
jadi skemanya nanti java melempar parameter ke SP dan SP memproses memasukkan ke table.

table BHE_MHS didalam schema BAHRIE_BHE :

  CREATE TABLE "BAHRIE_BHE"."BHE_MHS" 
   (	"NIM" VARCHAR2(20 BYTE) NOT NULL ENABLE, 
	"NAME" VARCHAR2(50 BYTE), 
	"ADDRESS" VARCHAR2(100 BYTE), 
	 CONSTRAINT "BHE_MHS_PK" PRIMARY KEY ("NIM")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "BAHRI_TUTORIAL"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "BAHRI_TUTORIAL" ;
 

setelah itu bikin Store Procedure insert nya :

create or replace
PROCEDURE SP_BHE_MHS_I 
(
nim_in         IN bhe_mhs.nim%type,
name_in        IN bhe_mhs.name%type,
address_in     IN bhe_mhs.address%type,
result_cursor  OUT SYS_REFCURSOR
)
AS 
BEGIN
  INSERT INTO bhe_mhs
  (
  nim,
  name,
  address
  )
  VALUES
  (
  nim_in,
  name_in,
  address_in
  );
  
 
  OPEN result_cursor FOR
  select 'success' as status from dual;
  EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
     OPEN result_cursor FOR
        select 'error' as status from dual;
   
END;

cara java memanggil sp tersebut dengan cara seperti dibawah ini :

public Mahasiswa insert(Mahasiswa o) throws SQLException {

        //use store procedure oracle
        String insertMahasiswa = "{call bahrie_bhe.sp_bhe_mhs_i(?,?,?,?)}";
        CallableStatement callableStatement = DatabaseUtilities.getConnection().prepareCall(insertMahasiswa);
        callableStatement.setString(1, o.getNim());
        callableStatement.setString(2, o.getNama());
        callableStatement.setString(3, o.getAlamat());
        callableStatement.registerOutParameter(4, OracleTypes.CURSOR);
        callableStatement.executeUpdate();
        ResultSet rs = (ResultSet) callableStatement.getObject(4);
        if(rs.next()){
        o.setStatus(rs.getString("status"));
        System.out.println(rs.getString("status"));
        }
        return o;
    }

Sekian tutorialnya. bila belumm paham bisa tinggalkan pesan dibawah atau mention aja di @bahrie_bhe 😀
Selamat Belajar.

Buat schema pada Database Oracle

Kita tahu kalau kita install database oracle, itu berarti kita hanya punya satu database. beda dengan Mysql yang kita dapat membuat banyak database didalamnya, kalau oracle databasenya hanya satu. nah untuk memudahkan dalam pengelompokan table atau pengen buat banyak aplikasi didalam satu database serta untuk memudahkan dalam pembuatan table maka lebih baik pisahkan aplikasi-aplikasi melalui schema. contohnya aplikasi A ada di schema A, aplikasi B ada di schema B. ini juga berguna untuk yang ingin latihan dan supaya lebih mudah dalam latihan pl/sql oracle supaya teratur dan tidak acak-acak’an serta table atau procedure mudah di cari.

dibawah ini adalah script yang saya bikin untuk latihan mengonekkan aplikasi java dengan store procedure yang ada di oracle. jadi setelah oracle di install, coba masuk pakai aplikasi seperti TOAD ataupun SQLDeveloper. setelah itu jalankan di editornya :

CREATE TABLESPACE  "BAHRI_TUTORIAL" 
LOGGING DATAFILE 'D:\tutorial\oracle\BAHRI_TUTORIAL_01.DBF'	 
SIZE 100M	
REUSE AUTOEXTEND ON NEXT 1280K 
MAXSIZE 32767M EXTENT MANAGEMENT LOCAL 
SEGMENT SPACE MANAGEMENT AUTO;

create user BAHRIE_BHE
profile default 
identified by "bahrie_bhe" 
default tablespace BAHRI_TUTORIAL
temporary tablespace TEMP	
account unlock;

grant connect, resource to BAHRIE_BHE;

GRANT UNLIMITED TABLESPACE TO BAHRIE_BHE;

SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='BAHRIE_BHE';
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='BAHRIE_BHE';

Selamat Mencoba 😀

Return JSONP pada CodeIgniter buat Sencha Touch

Awal ceritanya saya lagi bikin aplikasi mobile, dan aplikasi ini berkomunikasi dengan web service menggunakan json. jadi saya harus membuat kembalian dengan format json. namun dengan cara biasa emang sudah bisa jadi json. namun aplikasi tetep tak mau nerima json yang saya kirim karena dianggap bukan jsonp. setelah berselancar kesana kemari dari satu page ke page yang lain akhirnya yg saya inginkan dapet. dan code lengkapnya seperti dibawah ini. 😀


function get_all(){
        $data['data']=$this->model_kelas_model->get_all();
        $json = json_encode($data);

        echo isset($_GET['callback'])
            ? "{$_GET['callback']}($json)"
            : $json;
    }

dengan cara diatas akhirnya aplikasi mau menerima json saya. ini aplikasi saya kembangkan menggunakan sencha touch.
semoga bermanfaat bagi saya pribadi. dan bagi temen2 yang sedang mencari seperti saya.. 😀

Nambah Dependensi Postresql pada project Maven pom.xml

untuk menambahkan dependensi tinggal tambah code dibawah ini :

<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>8.4-701.jdbc4</version>
</dependency>

setelah direload supaya project maven mendownload librarynya. 😀

sumber: http://www.assembla.com/spaces/liftweb/wiki/PostgreSQL

Import .sql ke Dalam Database Postgresql

Masuk dulu ke postgres dengan cara dibawah ini lewat console/terminal.

psql [database name] [username]

database name bisa dibuat lewat phppgadmin, usename bisa dibuat lewat createuser seperti di artikel sebelumnya 😀
oh ya, setelah perintah diatas nanti akan diminta password, masukkan password username nya sesuai password saat createuser.

setelah masuk. lakukan perintah dibawah.

> \i [full path dan nama file dengan extention .sql]

semoga berhasil, selamat mencoba.. 😀

sumber : http://stackoverflow.com/questions/3393961/how-to-import-exsisting-sql-files-in-postgresql-8-4

Previous Older Entries