Author Topic: sintak MySql cek table sedang dikunci  (Read 6125 times)

0 Members and 1 Guest are viewing this topic.

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: sintak MySql cek table sedang dikunci
« Reply #15 on: April 14, 2009, 09:49:52 AM »
@fansul: flag closing-in-process bisa berupa cursor temp aja kalo gitu... yang diset agar  hilang dengan sendirinya (bisa ga ya) bila proses berhenti karena selesai atau mental keluar misalnya karena manti lampu

Offline fansul

  • Hero Member
  • *
  • Posts: 894
Re: sintak MySql cek table sedang dikunci
« Reply #16 on: April 14, 2009, 10:36:06 AM »
masak bisa sich cursor temp vfp, cursor temp kan hanya berlaku dikomputer itu ajak, kecuali cursor temp nya di server ya ? klu pakai jaringan internet bagaimana ya ? mungkin bisa pakai sp di mysql create cursor temp, selesai pakai di delete, klu komputer hang cursor temp akan terhapus dengan sendirian dengan jangka waktu tertentu. Bisa nggak ya ?

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: sintak MySql cek table sedang dikunci
« Reply #17 on: April 14, 2009, 10:55:31 AM »
@fansul: la iya maksudku emang di server dan create pakai sp... kan mo kerja PR malam ini biar ga tanggung banyaknya gitu loh...

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: sintak MySql cek table sedang dikunci
« Reply #18 on: April 14, 2009, 04:28:51 PM »
@foxpro.NET: sebenarnya lock tables bisa dihindari dengan menggunakan lock aplikasi get_lock() dan release_lock() yang kayaknya lebih aman tapi tidak terlalu restrictive. baca disini:
http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_get-lock
Amannya karena lock ini akan terlepas otomatis apabila client yang menglock terkeluar paksa.
Tapi itu berarti semua bagian aplikasi yang melakukan insert/update/delete dan pelaporan harus selalu terlebih dahulu melakukan check terhadap lock sebelum proceed.
untuk sekedar check apakah locking sedang berlangsung bisa pakai fungsi is_free_lock(namalock)
« Last Edit: April 14, 2009, 05:22:46 PM by davidmustakim »

Offline Foxpro.NET

  • Junior Member
  • *
  • Posts: 105
Re: sintak MySql cek table sedang dikunci
« Reply #19 on: April 14, 2009, 04:43:12 PM »
yup benar pak david denga function itu bisa, sy perjelas yah pertanyaan sy, gmana caranya mengetahui table "sedang di lock or tidak ?" bukan gmana cara lock table.....hehehehehhe

klo di foxpro kan tinggal bijini :

IF FLOCK()
    wait wind "lagi digembok tablenya"
ENDI

nah di mysql piye check table yg sedang dilock

btw thanks

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: sintak MySql cek table sedang dikunci
« Reply #20 on: April 14, 2009, 04:45:23 PM »
lah... get_lock() itu bukan meng-lock table cuman menglock() nama dan ada return valuenya jadi kalau tidak dapat lock tidak bisa lanjut gitu loh -->  if flock() ~ if applikasi_lock / if get_lock(namalock)...  bedanya: ibaratnya klo kamu takut laptopmu di ruang kantor dibaca2 orang, tidak harus check apakah laptop udah dilock ... cukup juga kan cuman check pintu ruang kantornya udah di-lock. Kalau cuman untuk cek doang tidak meng-lock bisa pake is_free_lock(namalock)
-- ini setara ISFLOCKED() menghindari IF FLOCK() kalo niatnya cuman mau ngecheck
« Last Edit: April 14, 2009, 05:22:10 PM by davidmustakim »

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: sintak MySql cek table sedang dikunci
« Reply #21 on: April 14, 2009, 04:49:35 PM »
jadi "nama lock" itu kayak global variable di aplikasi kita
cuman ingat bahwa database juga mungkin diperlu oleh aplikasi lain misalnya hanya untuk tujuan referensi aja
jadi lock tables mungkin memang tidak bagus karena aplikasi lain itu tidak perduli closing periode di aplikasi yang sedang kita closing periode, itu sebabnya locking aplikasi ini metode yang lebih tepat karena menghindari pencekalan database, hanya pencekalan aplikasi kita terhadap database itu

Offline foxever_fox

  • Hero Member
  • *
  • Posts: 1.301
Re: sintak MySql cek table sedang dikunci
« Reply #22 on: April 14, 2009, 05:02:25 PM »
mungkin kalo SELECT   ada error nya berarti di lock  ...

Do while .t.

hsl  =Sqlexec(handle,"Select xxxxxxx")
 if hsl=1
  exit   
 endif
 

if timeout
exit
endif


enddo
 

begitu ga ..


"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." - Martin Fowler-

Offline Foxpro.NET

  • Junior Member
  • *
  • Posts: 105
Re: sintak MySql cek table sedang dikunci
« Reply #23 on: April 14, 2009, 05:15:57 PM »
klo ada errornya mendingan bos, ini mah nunggu alias attemting to lock...sampe yg ngelock meng unlock table, kagak muncul error apa2

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: sintak MySql cek table sedang dikunci
« Reply #24 on: April 14, 2009, 05:18:29 PM »
is_free_lock(namalock) langsung return 0 atau 1
« Last Edit: April 14, 2009, 05:23:44 PM by davidmustakim »

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: sintak MySql cek table sedang dikunci
« Reply #25 on: April 14, 2009, 06:27:39 PM »
........
Contoh konkrit-nya gini:

- pas sebelum modul closing periode dijalankan:
Quote
lcSql="SELECT GET_LOCK('tutupperiode',1)"
lnOk=SQLEXEC( nkoneksi, lcSql, 'ceklock' )
if lnOk>0
   if ceklock.get_lock__tutupperiode__ = 1
      ... lanjut eksekusi proses tutup periode
   else
      messagebox("aduuuh... koq bos udah duluin aku tutup periode ya, ciloko !")
   endif
endif

Dan Buat fungsi pada aplikasi VFP kita yang dipanggil oleh  tiap modul yang melakukan perubahan inset/update/delete atau apapun pada data, atau yang melakukan read tetapi berpotensi/tujuan membuat laporan cetak resmi. Untuk yang read sekedar browsing untuk cari info referensi / pembanding tentunya tidak perlu
Quote
lcSql="SELECT IS_FREE_LOCK('tutupperiode')"
lnOk=SQLEXEC( nkoneksi, lcSql, 'ceklock' )
if lnOk>0
   if ceklock.is_free_lock__tutupperiode__ = 1
      ... lanjut jalankan insert/update/delete atau modul laporan
   else
      ... messagebox("Sedang proses tutup periode, dilarang klewat serius kerja!)
   endif
endif

Solusi ini tidak lock tables (jadi mencegah ditanyain lagi kenapa oleh pak Taz  - hehehe )
MySql sendiri umumnya  'cenderung' menganjurkan subtitusi lock tables dengan methode diatas:
http://dev.mysql.com/doc/refman/5.0/en/lock-tables-notes.html
« Last Edit: April 14, 2009, 08:49:59 PM by davidmustakim »

Offline foxever_fox

  • Hero Member
  • *
  • Posts: 1.301
Re: sintak MySql cek table sedang dikunci
« Reply #26 on: April 15, 2009, 08:44:55 AM »
mmmm , kalo pake TimeOut gimana mas Yud  ............jika Querynya TimeOut berarti ke lock 

QueryTimeOut
Specifies the time to wait (in seconds) before returning a general time-out error. If you specify 0 (the default), the wait is indefinite and a time-out error is never returned. QueryTimeOut can be 0 to 600. Read/write.


 


"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." - Martin Fowler-

Offline Foxpro.NET

  • Junior Member
  • *
  • Posts: 105
Re: sintak MySql cek table sedang dikunci
« Reply #27 on: April 15, 2009, 08:53:50 AM »
iya neh, kayaknya tuk sementara pake time out deh, btw mySQL sintaknya select * from nmtbl timeout 1; ? dari maren error mulu neh query pake time out maklum masih cetek elmunya.........bijimane seh sintaknye ?

Offline foxever_fox

  • Hero Member
  • *
  • Posts: 1.301
Re: sintak MySql cek table sedang dikunci
« Reply #28 on: April 15, 2009, 09:52:32 AM »
timeout adanya di SQLSETPROP 



"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." - Martin Fowler-