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 жасалған немесе әлі шешілмегенін айтуға мүмкіндік беріңіз.