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.

Aplikasi Java Kartu ID (JasperReport,Barcode)

Saya pernah membuat aplikasi yang berguna mencetak kartu id. memanfaatkan teknologinya jasperreport.
dibawah ini link untuk mendownloadnya. untuk tutorialnya masih dalam rencana. hehehe

Java Jasperreport barcode

klik tombol download.

Selamat mencoba.

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 :D

@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 :D

@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 :D

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 :D

@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 :D
Selamat Belajar.

Previous Older Entries

Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 43 pengikut lainnya.