VPN uzilgandan keyin SQL Server'dan Oracle'ga yuklashni tiklash
Uzilgan VPN chaqiruvchini Oracle'dagi commit bajarilganmi-yo'qmi degan noaniqlikda qoldiradi. Barqaror partiya ID'si ajratib olish, qo'llash va solishtirish savollariga birma-bir javob berish imkonini beradi.
VPN uzilganda ma'lumotlar bazalari o'rtasidagi uzatish o'ladi va «qayta ishga tushir» tiklash rejasi emas. Manbadan ajratib olish tugagan bo'lishi mumkin, maqsad allaqachon commit qilgan bo'lishi mumkin yoki javob qaytish yo'lida shunchaki yo'qolgan bo'lishi mumkin. Bu uch holat turli harakatlarni talab qiladi va faqat «xato» ni biladigan mijoz ularni ajrata olmaydi.
Yechim arxitekturaviy: har bir ishga tushishga barqaror partiya identifikatorini bering va mijoz taxmin qilishiga yo'l qo'yish o'rniga ma'lumotlar bazalari savollarga javob bersin.
Ma'lumotlar bazasi aslida nimaga kafolat beradi
SQL Server va Oracle ikkalasi ham tranzaksiya ichida atomlikni beradi. Hech biri ikkalasining orasida atomlik bermaydi. Yo'qolgan aloqa ma'lumotlar bazasini buzmaydi va qo'lda orqaga qaytarishga majbur qilmaydi, chunki server o'z tranzaksiyasini sizsiz hal qiladi. Buziladigan narsa chaqiruvchining natija haqidagi bilimidir.
Alohida commit qilingan alohida commit qilingan degani. Ikkala aloqani tashuvchi VPN ikki commitni bitta ish birligiga birlashtirmaydi.
Siz hech qachon eshitmagan commit
Bitta nosozlik rejimi sodda qayta urinish mantiqini jazolaydi: server commit qiladi va tasdiq hech qachon chaqiruvchiga yetib bormaydi. Oracle buni noma'lum natija muammosi sifatida hujjatlashtiradi va buning uchun tranzaksiya hujjatlarida Transaction Guard taqdim etadi. Aloqa xatosi yuborilgan commit muvaffaqiyatsiz bo'lganiga dalil emas, uni dalil sifatida qabul qilish esa partiyaning ikki marta joylanish yo'lidir. Bu farq qayta urinish yo'lida eng muhim, u yerda operatorning qo'lida xato xabari bor va harakat qilish uchun boshqa signal yo'q.
Shuning uchun tiklash qadami natijani xato matnidan chiqarish o'rniga maqsaddan o'qishi kerak.
Uzatishga partiya identifikatorini bering
Har bir ishga tushish o'zgarmas partiya ID'sini oladi va maqsad bu ID bilan nima qilganini qayd etadi. Hayot tsikli to'rt qadamdan iborat va sotuvchidan qat'i nazar bir xil ko'rinadi:
- Ajratib oling qayd etilgan sxema va chegara bilan aniqlangan, o'zgarmas manba partiyasini.
- Uzating uni maqsadning tayyorlash hududiga va tayyor deb e'lon qilishdan oldin to'liq bo'lmagan yoki ziddiyatli tarkibni aniqlang.
- Qo'llang uni maqsadning o'z noyoblik yoki qulflash qoidalari bo'yicha va tugatishni o'sha mahalliy tranzaksiyada qayd eting.
- Moslashtiring barqaror natijani qo'llab-quvvatlanadigan protokol orqali, tasdiqlash yoki qayta urinishdan oldin.
Qayta urinishlar o'sha ID'ni qayta ishlatadi. Har bir urinish uchun yangi ID endigina qurgan takrorlanishning oldini olishni buzadi, bu qayta urinish o'rami avtomatik ravishda bittasini yaratmaguncha aniq ko'rinadi.
ID sizga keyinchalik moslashtirish uchun narsa beradi, mijoz jarayoni allaqachon yo'q bo'lganidan keyin ham.
Partiyani da'vo qiling, so'ng qo'llang
Qo'llash qadami partiya ID'sini da'vo qilishi, biznes o'zgarishlarini amalga oshirishi va tugatishni bitta mahalliy tranzaksiyada qayd etishi kerak. Tekshirish va kiritishni alohida bayonotlar sifatida bajarish siz olib tashlamoqchi bo'lgan poygani qaytaradi. Agar ikki ishchi raqobatlashsa, aynan bitta da'vo g'olib bo'ladi va ikkinchisiga bu haqda xabar beriladi.
Tugatish yozuvining yo'qligi davom etayotgan tranzaksiya hech qachon commit qilmaydi degan dalil emas. Da'vo raqobatdosh urinishlarni ketma-ketlashtirishi kerak yoki protokol har qanday qarordan oldin barqaror natijani o'qishi kerak.
Bu ketma-ketlashtirish uchun ilova kodidagi tekshir-va-takrorla sikli o'rniga ma'lumotlar bazasining qo'llab-quvvatlanadigan mexanizmidan foydalaning.
Dizayn hali nima va'da qila olmaydi
Tayyorlash ishni qayta boshlash mumkin bo'lgan holga keltiradi va bitta uzoq sessiyaga bog'liqlikni kamaytiradi. Bu SQL Server, Oracle va ish bajaradigan har qanday tashqi yon ta'sir bo'ylab yagona atom commit yaratmaydi. Agar biznesga bu haqiqatan kerak bo'lsa, qo'llab-quvvatlanadigan taqsimlangan tranzaksiya yoki moslashtirish jarayonini loyihalang va malakasini tasdiqlang, shu jumladan natijasi noaniq ish kimga tegishli ekanini. Bundan kuchsizroq har qanday narsa uzatish kodida emas, moslashtirish qo'llanmasida bo'ladi.
Uch joyda uzilishni qabul qiling: uzatish paytida, qo'llash paytida va commit'dan keyin, lekin tasdiqlashdan oldin. Keyin mijoz xabari o'rniga biznes natijasini tekshiring va partiya daftari ish tugallanmagan, commit qilingan yoki hali hal qilinmaganligini aytsin.