Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Önermiyorum - 2
#9
Herhangi bir stored procedure içinde birden fazla tabloyu ilgilendiren değişiklikler olacak ise; mantıken bu iş bir transaction içinde olmalıdır. Çünkü bu birden fazla işten herhangi birisinde hata meydana gelebilir ve veritabanı güvenliği için ya hep ya hiç mantığı devreye girmelidir. Bu sayede veriler de tutarlı olur. Bu bağlamda; benim örneğini verdiğim stored procedure'ler içinde kesinlikle bir transaction başlatılmalı ve commit ya da rollback çağrımları da duruma göre kodlanmalıdır.

Birden fazla stored procedure bu şekilde oluşturulduktan sonra, Delphi tarafında bu stored procedure'lere ihtiyacınız olduğunda durum ne olacak peki ? Birinci procedure düzgün şekilde çalışacak, stoklar güncellenecek, ikincisi procedure çalışacak ve cariler güncellenecek ancak son procedurenin çalışması sırasında yani muhasebe verileri güncellenirken bir hata olursa bu durumda ne olmuş olacak ? Stokları ve Carileri güncel olup muhasebe kayıtları güncel olmayan prematüre kayıtlarımız olacak.

Yani çok ciddi bir problemimiz olacak.

Procedure'ler içinde transaction başlatıp, rollback ile ya da commit ile sonlandırmaz isek ne olur peki ? İstediğimiz olmaz mı ? Hayır yine olmaz. Bu durumda, işlemlerin düzgün yürüyebilmesi için Delphi tarafında bir transaction başlatmayı unutmamalıyız. Peki unutur da sp'yi bir transaction başlatmadan çağırır isek ne olur. Örneğin Stok sp'sini Delphi tarafında transaction başlatmadan çağırdık. Bu durumda, ilgili procedure içinde güncellenen 3 adet tablodan 3ncüsünün güncellenmesi sırasında hata olursa bu durumda ondan önce güncellenen 2 adet tablodaki kayıtlar ne olacak ? Onlar otomatikman commit oldular. Yine tutarsız veriler ile dolu bir veritabanımız olacak.

Oysaki OOP mantığı icabı, her obje sadece kendisi ile alakalı işlerden sorumlu olmalı. Bu durumda, her procedure kendi içinde transaction başlatmalı ve bunu kontrol etmelidir. Birden fazla procedure ile işlem yapılacaksa da en dışta bir kapsayıcı transaction başlatılmalı ve hangi procedure'de olursa olsun bir hata durumunda ilgili transaction rollback edilmelidir.

Ayrıca, bir başka ciddi ve saçma husus; bir transaction açık durumda iken bir başka transaction açılmaya çalışılmasının açık olan transaction'u commit etmesi ! Bu da inanılmaz saçma unsurlardan bir diğeri. Hadi nested transaction desteklemiyorsun, bari ikinci bir transaction'u açmaya çalışır isek hata üret !

Bir veritabanı programcısı bir transaction başlatmış ise, bunu ilerleyen satırlarda commit ile ya da rollback ile sonlandırmak amacı ile başlatmıştır. Bu durumda, yeni bir transaction başlatılmaya çalışılması hatalı bir eylem olur (nested transaction desteklemediği için böyle söylüyorum). Bu durumda, ne demeye açık olan önceki transaction'u commit edersin be MySQL !
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla


Bu Konudaki Yorumlar
Önermiyorum - 2 - Yazar: Tuğrul HELVACI - 12-12-2018, Saat: 11:38
Önermiyorum - 2 - Yazar: esistem - 12-12-2018, Saat: 11:43
Cvp: Önermiyorum - 2 - Yazar: Tuğrul HELVACI - 12-12-2018, Saat: 12:03
Önermiyorum - 2 - Yazar: nguzeller - 12-12-2018, Saat: 12:12
Cvp: Önermiyorum - 2 - Yazar: Tuğrul HELVACI - 12-12-2018, Saat: 12:20
Cvp: Önermiyorum - 2 - Yazar: esistem - 12-12-2018, Saat: 13:35
Önermiyorum - 2 - Yazar: nguzeller - 12-12-2018, Saat: 13:35
Önermiyorum - 2 - Yazar: klavye - 12-12-2018, Saat: 16:43
Cvp: Önermiyorum - 2 - Yazar: Tuğrul HELVACI - 12-12-2018, Saat: 17:53
Önermiyorum - 2 - Yazar: narkotik - 12-12-2018, Saat: 18:57
Cvp: Önermiyorum - 2 - Yazar: uparlayan - 12-12-2018, Saat: 19:44
Cvp: Önermiyorum - 2 - Yazar: Tuğrul HELVACI - 12-12-2018, Saat: 21:12
Cvp: Önermiyorum - 2 - Yazar: narkotik - 12-12-2018, Saat: 22:23
Cvp: Önermiyorum - 2 - Yazar: Tuğrul HELVACI - 13-12-2018, Saat: 08:42
Cvp: Önermiyorum - 2 - Yazar: narkotik - 13-12-2018, Saat: 09:04
Cvp: Önermiyorum - 2 - Yazar: Bay_Y - 13-12-2018, Saat: 16:10
Önermiyorum - 2 - Yazar: boreas - 13-12-2018, Saat: 09:11
Cvp: Önermiyorum - 2 - Yazar: Tuğrul HELVACI - 13-12-2018, Saat: 15:57
Önermiyorum - 2 - Yazar: engerex - 13-12-2018, Saat: 19:56
Önermiyorum - 2 - Yazar: 3ddark - 13-12-2018, Saat: 21:01

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Önermiyorum - 4 Tuğrul HELVACI 9 6.856 25-01-2019, Saat: 15:03
Son Yorum: yhackup
  Önermiyorum - 9 (MySQL'de ALTER komutunun olmaması) Tuğrul HELVACI 13 8.537 16-01-2019, Saat: 09:01
Son Yorum: Tuğrul HELVACI
  Önermiyorum - 8 Tuğrul HELVACI 3 2.676 12-01-2019, Saat: 07:57
Son Yorum: Bay_Y
  Önermiyorum - 7 (Update ettiğin tabloyu Where kısmında kullanamazsın) Tuğrul HELVACI 14 8.562 04-01-2019, Saat: 14:12
Son Yorum: mad85
  Önermiyorum - 6 (Check_ConstrainsYok) uparlayan 9 5.960 04-01-2019, Saat: 09:13
Son Yorum: csunguray



Konuyu Okuyanlar: 1 Ziyaretçi