VPN-ის გაწყვეტის შემდეგ SQL Server-იდან Oracle-ში ჩატვირთვის აღდგენა
გაწყვეტილი VPN მომძახებელს გაურკვევლობაში ტოვებს, დასრულდა თუ არა commit Oracle-ში. მდგრადი პარტიის ID საშუალებას იძლევა ამოღებაზე, გამოყენებასა და შეჯერებაზე სათითაოდ ვუპასუხოთ.
მონაცემთა ბაზებს შორის გადატანა იღუპება, როცა VPN წყდება, და „კიდევ ერთხელ გაუშვი“ აღდგენის გეგმა არ არის. წყაროს ამოღება შეიძლება დასრულებული იყოს, სამიზნემ შეიძლება უკვე commit გააკეთოს, ან პასუხი უბრალოდ დაიკარგა უკანა გზაზე. ეს სამი მდგომარეობა სხვადასხვა ქმედებას მოითხოვს, და მხოლოდ „შეცდომის“ მცოდნე კლიენტი ვერ გაარჩევს მათ.
გადაწყვეტა არქიტექტურულია: მიეცი ყოველ გაშვებას მდგრადი პარტიის იდენტობა, და მიეცი მონაცემთა ბაზებს კითხვებზე პასუხის გაცემის საშუალება იმის ნაცვლად, რომ კლიენტმა გამოიცნოს.
რას იძლევა სინამდვილეში გარანტიას მონაცემთა ბაზა
SQL Server და Oracle ორივე ტრანზაქციის შიგნით ატომურობას იძლევა. არც ერთი არ გაძლევს ატომურობას ორივეს შორის. დაკარგული კავშირი არ აფუჭებს მონაცემთა ბაზას და ხელით უკუგორებასაც არ აიძულებს, რადგან სერვერი თავის ტრანზაქციას შენ გარეშე წყვეტს. რაც იმტვრევა, მომძახებლის ცოდნაა შედეგის შესახებ.
ცალ-ცალკე commit ნიშნავს ცალ-ცალკე commit-ს. ორივე კავშირის მატარებელი VPN ორ commit-ს ერთ სამუშაო ერთეულში არ აერთიანებს.
ის commit, რომელზეც არასდროს გსმენიათ
ერთი მარცხის რეჟიმი ნეგება გულუბრყვილო ხელახალი ცდის ლოგიკას: სერვერი commit-ს აკეთებს, და დადასტურება არასდროს აღწევს მომძახებელამდე. Oracle ამას უცნობი შედეგის პრობლემად ადოკუმენტირებს და ამისთვის Transaction Guard-ს იძლევა ტრანზაქციების დოკუმენტაციაში. კომუნიკაციის შეცდომა არ არის მტკიცებულება, რომ გაგზავნილი commit ჩავარდა, და მის მტკიცებულებად მოქცევა ის გზაა, რომლითაც პარტია ორჯერ იგზავნება. განსხვავება ყველაზე მნიშვნელოვანია ხელახალი ცდის გზაზე, სადაც ოპერატორს აქვს შეცდომის შეტყობინება და მოქმედებისთვის სხვა სიგნალი არ აქვს.
ამიტომ აღდგენის ნაბიჯმა შედეგი სამიზნიდან უნდა წაიკითხოს, და არა შეცდომის ტექსტიდან გამოიტანოს.
მიეცი გადატანას პარტიის იდენტობა
ყოველი გაშვება იღებს უცვლელ პარტიის ID-ს, და სამიზნე აფიქსირებს, რა გააკეთა ამ ID-ით. სასიცოცხლო ციკლი ოთხი ნაბიჯია, და ის ერთნაირად გამოიყურება მიმწოდებლის მიუხედავად:
- ამოღება იდენტიფიცირებული, უცვლელი წყაროს პარტია ჩაწერილი სქემითა და საზღვრით.
- გადატანა სამიზნის მოსამზადებელ ზონაში, და არასრული ან წინააღმდეგობრივი შიგთავსის გამოვლენა მზად გამოცხადებამდე.
- გამოყენება სამიზნის საკუთარი უნიკალურობის ან ჩაკეტვის წესებით, და დასრულების ჩაწერა იმავე ლოკალურ ტრანზაქციაში.
- შეჯერება მდგრადი შედეგისა მხარდაჭერილი პროტოკოლით დადასტურებამდე ან ხელახალ ცდამდე.
ხელახალი ცდები იმავე ID-ს იყენებენ. ყოველი ცდისთვის ახალი ID არღვევს დუბლიკატების პრევენციას, რომელიც ახლახან ააშენე, რაც ცხადი ჩანს მანამ, სანამ ხელახალი ცდის გარსი ავტომატურად არ შექმნის ერთს.
ID ასევე გაძლევს რაღაცას, რასაც მოგვიანებით შეაჯერებ, კლიენტის პროცესის გაქრობიდან დიდი ხნის შემდეგ.
მოითხოვე პარტია, შემდეგ გამოიყენე
გამოყენების ნაბიჯმა უნდა მოითხოვოს პარტიის ID, განახორციელოს ბიზნეს ცვლილებები და ჩაწეროს დასრულება ერთ ლოკალურ ტრანზაქციაში. შემოწმებისა და ჩასმის ცალკე განცხადებებად შესრულება აბრუნებს იმ რბოლას, რომლის მოშორებასაც ცდილობდი. თუ ორი მუშა ეჯიბრება, ზუსტად ერთი მოთხოვნა იმარჯვებს და მეორეს ამის შესახებ აცნობებენ.
დასრულების ჩანაწერის არარსებობა არ არის მტკიცებულება, რომ მიმდინარე ტრანზაქცია არასდროს commit-ს არ გააკეთებს. მოთხოვნამ უნდა მოახდინოს კონკურენტული ცდების სერიალიზაცია, ან პროტოკოლმა უნდა წაიკითხოს მდგრადი შედეგი ნებისმიერი გადაწყვეტილების წინ.
ამ სერიალიზაციისთვის გამოიყენე მონაცემთა ბაზის მხარდაჭერილი მექანიზმი, და არა შეამოწმე-და-გაიმეორე ციკლი აპლიკაციის კოდში.
რასაც დიზაინი ჯერ კიდევ ვერ დაჰპირდება
მომზადება სამუშაოს ხდის განახლებადს და ამცირებს დამოკიდებულებას ერთ ხანგრძლივ სესიაზე. ის არ ქმნის ერთ ატომურ commit-ს SQL Server-ის, Oracle-ისა და ნებისმიერი გარე გვერდითი ეფექტის გასწვრივ, რომელსაც სამუშაო ასრულებს. თუ ბიზნესს ნამდვილად სჭირდება ეს, დააპროექტე და დააკვალიფიცირე მხარდაჭერილი განაწილებული ტრანზაქცია ან შეჯერების პროცესი, მათ შორის, ვის ეკუთვნის გაურკვეველი შედეგის სამუშაო. ამაზე სუსტი ყველაფერი შეჯერების სახელმძღვანელოშია, და არა გადატანის კოდში.
მიიღე შეწყვეტა სამ ადგილას: გადატანის დროს, გამოყენების დროს, და commit-ის შემდეგ, მაგრამ დადასტურებამდე. შემდეგ შეამოწმე ბიზნეს შედეგი და არა კლიენტის შეტყობინება, და მიეცი პარტიის წიგნს თქმის საშუალება, სამუშაო არასრულია, commit-ულია, თუ ჯერ კიდევ გადაუწყვეტელი.