د VPN له پرېکیدو وروسته د SQL Server څخه Oracle ته بار بحال کړئ
د VPN پرېکیدل کال کوونکی په دې کې ناڅرګند پرېږدي چې په Oracle کې commit پېښ شوی که نه۔ یو دوامداره د ټولګې ID اجازه ورکوي چې استخراج، پلي کول او سره سمون یو یو ځواب شي۔
کله چې VPN پرېکیږي، د ډیټابیسونو تر منځ لېږد مري، او «بیا یې چلوه» د بحالي پلان نه دی۔ د سرچینې استخراج ممکن بشپړ وي، هدف ممکن لا دمخه commit کړی وي، یا ځواب ممکن په بېرته راتلو لاره کې یوازې ورک شوی وي۔ دا درې حالتونه بېلابېل ګامونه غواړي، او یوازې «تېروتنه» پېژندونکی کلاینټ نشي کولی هغه سره توپیر کړي۔
حل معماري دی: هرې چلند ته یو دوامداره د ټولګې هویت ورکړئ، او پرځای د دې چې کلاینټ اټکل وکړي، ډیټابیسونو ته اجازه ورکړئ چې پوښتنو ته ځواب ووايي۔
ډیټابیس په رښتیا څه تضمینوي
SQL Server او Oracle دواړه د معاملې په داخل کې اتومیتوب ورکوي۔ هیڅ یو یې د دواړو تر منځ اتومیتوب نه درکوي۔ ورک شوې اړیکه ډیټابیس نه خرابوي او نه هم لاسي بیرته تګ ته اړ باسي، ځکه سرور خپله معامله پرته له تاسې حل کوي۔ څه چې ماتېږي هغه د کال کوونکي پوهه ده د پایلې په اړه۔
جلا commit کول یعنې جلا commit کول۔ هغه VPN چې دواړه اړیکې وړي، دوه commit په یوه کاري واحد کې نه یوځای کوي۔
هغه commit چې تاسې هیڅکله نه دی اورېدلی
یو د ناکامۍ حالت ساده بیا هڅونې منطق ته سزا ورکوي: سرور commit کوي، او تصدیق هیڅکله کال کوونکي ته نه رسیږي۔ Oracle دا د ناڅرګندې پایلې ستونزه بولي او د دې لپاره په د معاملو اسنادو کې Transaction Guard برابروي۔ د اړیکو تېروتنه د دې ثبوت نه دی چې لېږل شوی commit ناکام شوی، او هغه د ثبوت په توګه نیول هغه لار ده چې ټولګه دوه ځله خپرېږي۔ دا توپیر په بیا هڅونې لار کې تر ټولو مهم دی، چېرې چې آپریټر یوازې د تېروتنې پیغام لري او د عمل لپاره بل هیڅ اشاره نه لري۔
نو د بحالي ګام باید پایله له هدف څخه ولولي، نه دا چې له تېروتنې متن څخه یې اټکل وکړي۔
لېږد ته د ټولګې هویت ورکړئ
هر چلند یو نه بدلېدونکی د ټولګې ID اخلي، او هدف ثبتوي چې له هغه ID سره یې څه وکړل۔ ژوندلیک څلور ګامه دی، او د پلورونکي له نظره یو شان ښکاري:
- استخراج یوه پېژندل شوې، نه بدلېدونکې سرچینه ټولګه د ثبت شوي سکیم او پولې سره۔
- لېږد هغه د هدف د چمتووالي سیمې ته، او د بشپړې یا متضادې منځپانګې کشفول مخکې له دې چې چمتو اعلان شي۔
- پلي کول هغه د هدف د خپل ځانګړتیا یا قفل کولو مقرراتو لاندې، او د بشپړیدو ثبت په هماغه ځایي معامله کې۔
- سره سمون دوامداره پایله د ملاتړ شوي پروتوکول له لارې، مخکې له تصدیق یا بیا هڅونې۔
بیا هڅونې هماغه ID بیا کاروي۔ هرې هڅې ته نوی ID هغه د تکرار مخنیوی چې تاسې همدا اوس جوړ کړ، له منځه وړي، کوم چې تر هغه روښانه ښکاري چې یو د بیا هڅونې پوښ په اتوماتيک ډول یو جوړ کړي۔
ID تاسې ته یو څه درکوي چې وروسته ورسره سمون وکړئ، ډېر وخت وروسته له دې چې د کلاینټ بهیر ورک شو۔
ټولګه ترلاسه کړئ، بیا یې پلي کړئ
د پلي کولو ګام باید د ټولګې ID ترلاسه کړي، سوداګریز بدلونونه وکړي، او بشپړیدل په یوه ځایي معامله کې ثبت کړي۔ د کتنې او ننوتلو جلا جلا بیانونه کول هغه سیالي بیرته راولي چې تاسې یې د لرې کولو هڅه کوله۔ که دوه کارکونکي سیالي وکړي، په دقیق ډول یوه ترلاسه کول ګټي او بل ته دا ویل کیږي۔
د بشپړیدو د ثبت نه شتون د دې ثبوت نه دی چې روانه معامله به هیڅکله commit ونه کړي۔ ترلاسه کول باید سیالې هڅې پرله پسې کړي، یا پروتوکول باید مخکې له هرې پریکړې دوامداره پایله ولولي۔
د دې پرله پسې کولو لپاره د ډیټابیس ملاتړ شوی میکانیزم وکاروئ، نه په اپلیکیشن کوډ کې د کتنې-بیا-تکرار لوپ۔
څه چې ډیزاین لا هم ژمنه نه شي کولی
چمتووالی کار بیا پیل کېدونکی کوي او په یوه اوږدې ناستې تکیه کموي۔ دا د SQL Server، Oracle او هر هغه بهرني اړخیز اغیز چې کار یې کوي، په اوږدو کې یو واحد اتومي commit نه جوړوي۔ که سوداګري واقعاً دې ته اړتیا ولري، یو ملاتړ شوی ویشل شوی معامله یا د سره سمون بهیر ډیزاین او وړ کړئ، په شمول د دې چې د ناڅرګندې پایلې کار د چا دی۔ له دې کمزوری هر څه په لېږد کوډ کې نه، بلکې په د سره سمون لارښود کې ځای لري۔
درې ځایه مداخله ومنئ: د لېږد په جریان کې، د پلي کولو په جریان کې، او له commit وروسته خو مخکې له تصدیق۔ بیا د کلاینټ پیغام پرځای سوداګریزه پایله وګورئ، او د ټولګې ثبت ته اجازه ورکړئ چې ووایي کار نیمګړی دی، commit شوی، یا لا هم نه دی حل شوی۔