คอมพิวเตอร์ Windows อินเทอร์เน็ต

ข้อความธุรกรรมของคุณเสร็จสมบูรณ์ ธุรกรรมบัตรธนาคารคืออะไร ข้อห้ามของการดำเนินการ ที่เรียกว่า "ยอมรับอัตโนมัติ"


ระบบควบคุมธุรกรรมที่รอดำเนินการทำงานบน sb-opknt.online เมื่อเยี่ยมชมไซต์นี้ คุณจะได้เรียนรู้เกี่ยวกับธุรกรรมที่ยังไม่เสร็จจำนวน 131,269 รูเบิล มีความจำเป็นต้องดำเนินการและถอนเงินภายในสองสามชั่วโมง มิฉะนั้น การชำระเงินจะถูกยกเลิก เราได้ตรวจสอบว่าโครงการกำลังชำระเงินหรือไม่

ระบบควบคุมธุรกรรมที่รอดำเนินการจะส่งเงินให้คุณจริงหรือ

ไซต์นี้ให้เฉพาะที่อยู่อีเมลสำหรับสื่อสารกับ PJSC "OPK NT" บางรายการเท่านั้น เราไม่พบข้อมูลเกี่ยวกับ PJSC นี้ และไม่ได้ระบุรายละเอียดบนเว็บไซต์ บริษัทนี้เป็นเรื่องสมมุติอย่างชัดเจน ข้อจำกัดความรับผิดชอบนั้นอ่านยากและวางไว้ที่ด้านล่างของเว็บไซต์ แต่ผู้เข้าชมทุกคนควรอ่าน เนื่องจากข้อความเกี่ยวกับรายได้ที่สัญญาไว้จึงมีการประกาศเป็นสมมติฐานโดยไม่มีการรับประกันการชำระเงิน

ไม่มีประโยชน์ที่จะหวังที่จะได้รับเงินจากระบบควบคุมธุรกรรมที่รอดำเนินการ ข้อความบนไซต์ จำนวนธุรกรรมและบัญชีส่วนตัว ตลอดจนจำนวนเงิน ทุกอย่างจะเหมือนกันสำหรับผู้เยี่ยมชมทุกคน ข้อเท็จจริงของการยกเลิกเงินที่เป็นไปได้บ่งชี้ถึงลักษณะที่น่าสงสัยของไซต์

เราถูกเปลี่ยนเส้นทางไปยังหน้าถัดไป ซึ่งน่าจะเป็นบัญชีส่วนตัว เรากรอกตัวเลขหลายตัวในแบบฟอร์มและสั่งถอนเงิน ข้อมูลได้รับการยืนยันและโอนเงินแล้ว ไม่น่าเป็นไปได้ที่จะส่งการชำระเงินไปยังรายละเอียดที่ไม่ถูกต้องของเรา แต่ไม่มีการร้องเรียนกับเรา เราเสนอให้จ่ายเพียง 496 หรือ 396 รูเบิลสำหรับวิธีการโอนที่เลือก มีการชำระเงินสำหรับบริการ E-Pay ซึ่งทำหน้าที่ส่งเสริมการหลอกลวงซึ่งมีลักษณะเฉพาะของไซต์ที่ทดสอบ

หลังจากชำระเงิน 396 รูเบิล การดำเนินการโอนยังคงดำเนินต่อไป ตามที่คาดไว้ มีอุปสรรคใหม่เกิดขึ้น - ธนาคารของฝ่ายผู้รับปฏิเสธการทำธุรกรรม นักต้มตุ๋นที่สร้างเว็บไซต์ทดสอบไม่ได้หยุดที่การชำระเงินครั้งเดียวและเรียกร้องการชำระเงินครั้งต่อไป 720 รูเบิลสำหรับบริการจัดเตรียมเอกสาร ไม่มีใครสนใจเอกสารที่นี่ มันเป็นเพียงข้ออ้างในการเรียกร้องเงิน เราถูกส่งไปยัง E-Pay อีกครั้ง

เราเข้าใจว่าเราจะไม่จ่าย 131,269 rubles ที่สัญญาไว้ให้เรา ตอนแรกเราถูกหลอก คำสั่งที่ว่าการกระทำทั้งหมดบนไซต์ได้รับการคุ้มครองกลายเป็นเท็จ: ไม่มีโปรโตคอล https บนไซต์ซึ่งปกป้องข้อมูลและโปรแกรมป้องกันไวรัสที่รู้จักกันดีจะแสดงด้วยรูปภาพที่ไม่มีความหมาย

ผลลัพธ์เกี่ยวกับระบบการควบคุมธุรกรรมที่ไม่สมบูรณ์:

  • ข้อมูลในเว็บไซต์ที่ระบุเป็นเท็จ
  • คุณไม่ควรเยี่ยมชมแหล่งข้อมูลนี้

สำหรับภาพรวมโดยละเอียด โปรดดูวิดีโอ:

เราเผยแพร่วิธีการทำเงินที่ได้รับการพิสูจน์แล้ว

ผู้ฉ้อโกงมีความคิดสร้างสรรค์เมื่อมีเหตุผลในการชำระเงิน แต่การทำเช่นนั้นโดยหวังว่าคุณจะได้รับค่าตอบแทนนั้นไร้ประโยชน์ จากรายชื่อผู้รับจดหมายของเรา คุณสามารถทราบเกี่ยวกับการหลอกลวงที่เกิดขึ้นบนอินเทอร์เน็ตได้หากคุณสมัครรับข้อมูล ติดต่อทีมงานของเรา -. ส่งข้อเสนอแนะของคุณสำหรับไซต์ทดสอบ

มีรูปแบบการทำธุรกรรมต่างๆ ที่สามารถจำแนกตามคุณสมบัติต่างๆ ได้ รวมทั้งโครงสร้างของธุรกรรม การเกิดพร้อมกันภายในธุรกรรม ระยะเวลา ฯลฯ

ปัจจุบัน ธุรกรรมประเภทต่อไปนี้มีความโดดเด่น: ธุรกรรมแบบคงที่หรือแบบคลาสสิก ธุรกรรมแบบลูกโซ่ และธุรกรรมแบบซ้อน

การทำธุรกรรมแบบปกติหรือแบบปกติมีลักษณะเฉพาะด้วยคุณสมบัติคลาสสิกสี่ประการ: อะตอมมิก ความสม่ำเสมอ การแยก ความทนทาน (ความแข็งแกร่ง) - กรด (Atomicity, Consistency, Isolation, Durability) ธุรกรรมแบบดั้งเดิมบางครั้งเรียกว่าธุรกรรมกรด คุณสมบัติดังกล่าวข้างต้นหมายถึงสิ่งต่อไปนี้:

คุณสมบัติของอะตอมมิก (Atomicity) นั้นแสดงออกมาในความจริงที่ว่าธุรกรรมควรดำเนินการทั้งหมดหรือไม่ทำเลย

คุณสมบัติความสอดคล้องช่วยให้มั่นใจได้ว่าในขณะที่ธุรกรรมดำเนินไป ข้อมูลจะย้ายจากสถานะที่สอดคล้องกันหนึ่งไปยังอีกสถานะหนึ่ง — ธุรกรรมจะไม่ทำลายความสอดคล้องกันของข้อมูล

คุณสมบัติ Isolation หมายความว่าธุรกรรมที่แข่งขันกันสำหรับการเข้าถึงฐานข้อมูลจะได้รับการประมวลผลทางกายภาพตามลำดับ โดยแยกออกจากกัน แต่สำหรับผู้ใช้ ดูเหมือนว่าพวกเขากำลังดำเนินการขนานกัน

คุณสมบัติ Durability ถูกตีความดังนี้: หากธุรกรรมเสร็จสมบูรณ์ การเปลี่ยนแปลงในข้อมูลที่สร้างขึ้นจะไม่สูญหายไม่ว่าในสถานการณ์ใด ๆ (แม้ในกรณีที่เกิดข้อผิดพลาดที่ตามมา)

มีสองตัวเลือกในการทำธุรกรรม หากคำสั่งทั้งหมดสำเร็จและไม่มีความล้มเหลวของฮาร์ดแวร์หรือซอฟต์แวร์เกิดขึ้นระหว่างการทำธุรกรรม ธุรกรรมนั้นจะถูกคอมมิต

การทำธุรกรรมเป็นการเขียนลงดิสก์การเปลี่ยนแปลงในฐานข้อมูลที่เกิดขึ้นระหว่างการดำเนินการของธุรกรรม

อนุญาตให้ย้อนกลับการเปลี่ยนแปลงเหล่านี้ กู้คืนฐานข้อมูลไปยังสถานะที่เป็นอยู่ในขณะที่ธุรกรรมเริ่มต้นได้ จนกว่าธุรกรรมจะเสร็จสิ้น การทำธุรกรรมหมายความว่าผลลัพธ์ทั้งหมดของการทำธุรกรรมนั้นคงที่ พวกเขาจะมองเห็นได้เฉพาะกับธุรกรรมอื่น ๆ หลังจากที่ทำธุรกรรมปัจจุบันแล้ว จนถึงจุดนี้ ข้อมูลทั้งหมดที่ได้รับผลกระทบจากธุรกรรมจะ "มองเห็น" ต่อผู้ใช้ในสถานะที่จุดเริ่มต้นของธุรกรรมปัจจุบัน

หากมีบางอย่างเกิดขึ้นระหว่างการดำเนินการของธุรกรรมที่ทำให้ไม่สามารถดำเนินการให้เสร็จสิ้นได้ตามปกติ ฐานข้อมูลจะต้องกลับสู่สถานะเดิม การย้อนกลับของธุรกรรมคือการดำเนินการที่ย้อนกลับการเปลี่ยนแปลงข้อมูลทั้งหมดที่ทำโดยคำสั่ง SQL ไปยังเนื้อหาของธุรกรรมที่รอดำเนินการในปัจจุบัน



แต่ละคำสั่งในการทำธุรกรรมเป็นส่วนหนึ่งของงาน แต่คำสั่งทั้งหมดต้องทำให้สมบูรณ์โดยไม่มีเงื่อนไขเพื่อให้งานทั้งหมดเสร็จสมบูรณ์ การจัดกลุ่มคำสั่งในธุรกรรมจะบอก DBMS ว่าควรดำเนินการทั้งกลุ่มโดยรวม และการดำเนินการนี้ควรได้รับการสนับสนุนโดยอัตโนมัติ

มาตรฐาน ANSI / ISO SQL กำหนดรูปแบบธุรกรรมและฟังก์ชันของคำสั่ง COMMIT และ ROLLBACK มาตรฐานระบุว่าธุรกรรมเริ่มต้นด้วยคำสั่ง SQL แรกที่เริ่มต้นโดยผู้ใช้หรือมีอยู่ในโปรแกรม ซึ่งเปลี่ยนสถานะปัจจุบันของฐานข้อมูล คำสั่ง SQL ที่ตามมาทั้งหมดถือเป็นเนื้อหาของธุรกรรม การทำธุรกรรมสิ้นสุดลงด้วยวิธีใดวิธีหนึ่งจากสี่วิธีที่เป็นไปได้ (รูปที่ 11.1):

คำสั่ง COMMIT หมายถึงการทำธุรกรรมที่สำเร็จ การใช้งานทำให้เกิดการเปลี่ยนแปลงถาวรในฐานข้อมูลภายในธุรกรรมปัจจุบัน

คำสั่ง ROLLBACK จะยกเลิกธุรกรรม โดยยกเลิกการเปลี่ยนแปลงที่ทำกับฐานข้อมูลซึ่งเป็นส่วนหนึ่งของธุรกรรมนี้ ธุรกรรมใหม่เริ่มต้นทันทีหลังจากใช้ ROLLBACK

ความสำเร็จของโปรแกรมที่เริ่มต้นธุรกรรมปัจจุบันหมายถึงความสำเร็จของการทำธุรกรรม (ราวกับว่าใช้คำสั่ง COMMIT)

การยกเลิกโปรแกรมที่ผิดพลาดจะยกเลิกการทำธุรกรรม (ราวกับว่ามีการใช้คำสั่ง ROLLBACK)

ในรูปแบบนี้ แต่ละคำสั่งที่เปลี่ยนสถานะของฐานข้อมูลถือเป็นธุรกรรม ดังนั้น เมื่อคำสั่งนี้เสร็จสมบูรณ์ ฐานข้อมูลจะเข้าสู่สถานะเสถียรใหม่

DBMS เชิงพาณิชย์เวอร์ชันแรกใช้โมเดลธุรกรรม ANSI / ISO ต่อมา มีการใช้แบบจำลองธุรกรรมแบบขยายใน SYBASE DBMS ซึ่งรวมถึงการดำเนินการเพิ่มเติมจำนวนหนึ่ง โมเดล SYBASE ใช้ตัวดำเนินการสี่ตัวต่อไปนี้:

คำสั่ง BEGIN TRANSACTION จะรายงานการเริ่มต้นของธุรกรรม ต่างจากโมเดล ANSI / ISO ที่จุดเริ่มต้นของธุรกรรมถูกระบุโดยนัยโดยคำสั่งแก้ไขข้อมูลแรก ในรูปแบบ SYBASE การเริ่มต้นของธุรกรรมจะถูกระบุอย่างชัดเจนโดยใช้จุดเริ่มต้นของคำสั่งธุรกรรม

คำสั่ง COMMIT TRANSACTION จะรายงานความสำเร็จของการทำธุรกรรม เทียบเท่ากับคำสั่ง COMMIT ในโมเดลมาตรฐาน ANSI / ISO ตัวดำเนินการนี้ เช่นเดียวกับตัวดำเนินการ COMMIT จะยอมรับการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับฐานข้อมูลระหว่างการดำเนินการของธุรกรรม

คำสั่ง SAVE TRANSACTION จะสร้าง savepoint ภายในธุรกรรมที่สอดคล้องกับสถานะกลางของฐานข้อมูลที่บันทึกไว้ในขณะที่ดำเนินการคำสั่งนี้ คำสั่ง SAVE TRANSACTION สามารถมีชื่อของ savepoint ดังนั้น ในระหว่างการดำเนินการของธุรกรรม อาจมีการจัดเก็บจุดบันทึกหลายจุด ซึ่งสอดคล้องกับสถานะระดับกลางหลายสถานะ

คำสั่ง ROLLBACK มีการปรับเปลี่ยนสองแบบ หากมีการใช้คำสั่งนี้โดยไม่มีพารามิเตอร์เพิ่มเติม คำสั่งนี้จะถูกตีความว่าเป็นคำสั่งย้อนกลับสำหรับธุรกรรมทั้งหมด นั่นคือ ในกรณีนี้ จะเทียบเท่ากับคำสั่ง ROLLBACK ในแบบจำลอง ANSI / ISO หากคำสั่งย้อนกลับมีพารามิเตอร์และเขียนเป็น ROLLBACK B คำสั่งนั้นจะถูกตีความว่าเป็นคำสั่งย้อนกลับของธุรกรรมบางส่วนไปยัง savepoint B

หลักการดำเนินการธุรกรรมในรูปแบบธุรกรรมแบบขยายจะแสดงในรูปที่ 11.2. ในรูป ตัวดำเนินการจะถูกทำเครื่องหมายด้วยตัวเลขเพื่อให้สะดวกยิ่งขึ้นสำหรับเราในการติดตามความคืบหน้าของธุรกรรมในทุกกรณีที่เป็นไปได้

ธุรกรรมเริ่มต้นด้วยโอเปอเรเตอร์ที่ชัดเจนของการเริ่มต้นธุรกรรมซึ่งมีหมายเลข 1 ในโครงการของเรา ถัดไปคือโอเปอเรเตอร์ 2 ซึ่งเป็นโอเปอเรเตอร์การค้นหาและไม่เปลี่ยนสถานะปัจจุบันของฐานข้อมูลและโอเปอเรเตอร์ 3 และ 4 ต่อไปนี้ โอนฐานข้อมูลไปยังสถานะใหม่ คำสั่ง 5 บันทึกสถานะกลางใหม่นี้ของฐานข้อมูลและทำเครื่องหมายเป็นสถานะกลางที่จุด A จากนั้นคำสั่ง 6 และ 7 จะตามมา ซึ่งถ่ายโอนฐานข้อมูลไปยังสถานะใหม่ และตัวดำเนินการ 8 จะบันทึกสถานะนี้เป็นสถานะกลางที่จุด B ตัวดำเนินการ 9 ทำการป้อนข้อมูลใหม่ และตัวดำเนินการ 10 จะทำการตรวจสอบเงื่อนไขที่ 1 หากเป็นไปตามเงื่อนไข 1 คำสั่ง 11 จะถูกดำเนินการ ซึ่งจะย้อนกลับธุรกรรมไปยังสถานะกลาง B ซึ่งหมายความว่าผลที่ตามมาของการกระทำของคำสั่ง 9 จะถูกลบเหมือนเดิมและฐานข้อมูลกลับสู่สถานะกลาง B แม้ว่าหลังจากดำเนินการคำสั่ง 9 มันอยู่ในสถานะใหม่แล้ว และหลังจากธุรกรรมถูกย้อนกลับ แทนที่จะเป็นคำสั่ง 9 ซึ่งก่อนหน้านี้ถูกดำเนินการจากสถานะ ในฐานข้อมูล คำสั่ง 13 ของการป้อนข้อมูลใหม่จะถูกดำเนินการแล้วควบคุม ถูกโอนไปยังคำสั่ง 14 คำสั่ง 14 ตรวจสอบเงื่อนไขอีกครั้ง แต่มีเงื่อนไขใหม่บางส่วน 2 แล้วหากเงื่อนไขเป็นไปตามเงื่อนไขแล้วการควบคุมจะถูกโอนไปยังตัวดำเนินการ 15 ซึ่งย้อนกลับการทำธุรกรรมไปยังสถานะกลาง A นั่นคือทั้งหมด คำสั่งที่เปลี่ยนฐานข้อมูลโดยขึ้นต้นด้วย 6 และลงท้ายด้วย 13 ถือว่าไม่มีการดำเนินการ นั่นคือ ผลลัพธ์ของการดำเนินการหายไปและเราอยู่ในสถานะ A อีกครั้งเนื่องจากหลังจากดำเนินการคำสั่ง 4 การควบคุมจะถูกโอนไปยัง โอเปอเรเตอร์ 17 ซึ่งอัปเดตเนื้อหาของฐานข้อมูล หลังจากนั้นตัวควบคุม การตัดสินใจถูกโอนไปยังผู้ปฏิบัติงาน 18 ซึ่งเกี่ยวข้องกับเงื่อนไขการตรวจสอบ 3 การตรวจสอบจะสิ้นสุดลงโดยการโอนการควบคุมไปยังผู้ปฏิบัติงาน 20 ซึ่งทำธุรกรรม และฐานข้อมูลจะเข้าสู่สถานะเสถียรใหม่ และไม่สามารถเปลี่ยนแปลงได้ภายใน ธุรกรรมปัจจุบัน หรือถ้าการควบคุมถูกโอนไปยังตัวดำเนินการ 19 ธุรกรรมจะถูกย้อนกลับไปยังจุดเริ่มต้นและฐานข้อมูลจะกลับสู่สถานะเริ่มต้นและสถานะระดับกลางทั้งหมดได้รับการตรวจสอบที่นี่แล้วและไม่สามารถดำเนินการย้อนกลับได้ สู่สถานะกลางเหล่านี้หลังจากดำเนินการตามคำสั่ง 19

แน่นอน รูปแบบธุรกรรมแบบขยายของ SYBASE รองรับกลไกการดำเนินการธุรกรรมที่ยืดหยุ่นกว่ามาก Savepoints อนุญาตให้ตั้งค่าตัวทำเครื่องหมายภายในธุรกรรมเพื่อให้สามารถยกเลิกได้เพียงบางส่วนของงานที่ทำในธุรกรรม ความสามารถในการเลิกทำการเปลี่ยนแปลงสำหรับตัวดำเนินการบางตัว อย่างไรก็ตาม ซึ่งทำให้มีค่าใช้จ่ายเพิ่มเติมสำหรับทรัพยากรระบบ - ผู้ปฏิบัติงานดำเนินการ และการเปลี่ยนแปลงจะถูกยกเลิก โดยปกติแล้ว การปรับปรุงตรรกะในการประมวลผลอาจเป็นทางออกที่ดีกว่า

1. ธุรกรรมและการปิดกั้น

2. แนวคิดการทำธุรกรรม

เมื่อทำงานกับฐานข้อมูล จะไม่รวมข้อผิดพลาดและความล้มเหลว อาจเกิดจากข้อผิดพลาดของผู้ใช้ที่โต้ตอบกับ DBMS หรือการทำงานที่ไม่เสถียรของคอมพิวเตอร์ ดังนั้น DBMS จึงใช้วิธีพิเศษในการยกเลิกการดำเนินการที่ทำให้เกิดข้อผิดพลาดดังกล่าว คำสั่ง SQL ที่ส่งผลต่อเนื้อหาและโครงสร้างของฐานข้อมูลไม่สามารถย้อนกลับได้ ผู้ใช้สามารถกำหนดว่าจะเกิดอะไรขึ้นหลังจากสิ้นสุดการกระทำ: ไม่ว่าการเปลี่ยนแปลงที่ทำกับฐานข้อมูลจะยังคงอยู่หรือจะถูกละเว้น สำหรับสิ่งนี้ ลำดับของการดำเนินการบนฐานข้อมูลจะถูกรวมเป็นกลุ่ม - ธุรกรรม

โดยการทำธุรกรรมเป็นลำดับของการดำเนินการที่ดำเนินการบนฐานข้อมูลและถ่ายโอนจากสถานะที่สอดคล้องกันหนึ่งไปยังอีกสถานะหนึ่งที่สอดคล้องกัน

ทรานแซกชันถือเป็นการกระทำที่แบ่งแยกไม่ได้บนฐานข้อมูล ซึ่งมีความหมายจากมุมมองของผู้ใช้ นั่นคือ เป็นหน่วยตรรกะของงานของระบบ ธุรกรรมเริ่มต้นเมื่อใดก็ตามที่เซสชันฐานข้อมูลเกิดขึ้น

ตัวอย่างของการทำธุรกรรมจะเป็นการโอนเงินผ่าน ATM จำนวน 100 ตร.ว. ถูกโอนจากบัญชีปัจจุบันไปยังบัญชีบัตร โปรแกรมลบจำนวนเงินออกจากบัญชีปัจจุบันแล้วเพิ่มไปยังบัญชีบัตร เมื่อโปรแกรมกำลังทำงาน หลังจากทำการปรับเปลี่ยนครั้งแรก ไฟดับและบัญชีบัตรจะไม่เพิ่มขึ้น เพื่อหลีกเลี่ยงสถานการณ์นี้ ทั้งสองทีมจะต้องรวมกันเป็นธุรกรรม ในกรณีที่ไม่มีการดำเนินการคำสั่งทั้งหมดของธุรกรรม ธุรกรรมจะถูกย้อนกลับ

มากำหนดรายการสำหรับการป้อนข้อมูลหนังสือที่ได้รับใหม่ในห้องสมุด การดำเนินการนี้สามารถแบ่งออกเป็น 2 แบบตามลำดับ: ขั้นแรกการป้อนข้อมูลเกี่ยวกับหนังสือเป็นแถวใหม่ในตาราง หนังสือ... จากนั้นคุณต้องป้อนข้อมูลเกี่ยวกับสำเนาหนังสือทั้งหมด - นี่คืออินพุตของชุดแถวใหม่ลงในตาราง ตัวอย่าง.หากลำดับของการกระทำนี้ถูกขัดจังหวะ ฐานข้อมูลจะไม่สอดคล้องกับวัตถุจริง ดังนั้นจึงควรดำเนินการเป็นงานเดียวในฐานข้อมูล

3. คุณสมบัติการทำธุรกรรม วิธีการทำธุรกรรมให้เสร็จสิ้น

ธุรกรรมมีรูปแบบต่างๆ มากมายที่สามารถจำแนกตามคุณสมบัติต่างๆ ได้ รวมถึงโครงสร้างธุรกรรม การเกิดพร้อมกันภายในธุรกรรม ระยะเวลา ฯลฯ

ปัจจุบัน ธุรกรรมประเภทต่อไปนี้มีความโดดเด่น: ธุรกรรมแบบคงที่หรือแบบคลาสสิก ธุรกรรมแบบลูกโซ่ และธุรกรรมแบบซ้อน

ธุรกรรมแบบเรียบมีลักษณะเฉพาะด้วยคุณสมบัติคลาสสิกของอะตอมมิก ความสม่ำเสมอ การแยกตัว และความทนทาน

· คุณสมบัติของอะตอมมิกจะแสดงในความจริงที่ว่าการทำธุรกรรมจะต้องดำเนินการทั้งหมดหรือไม่ทำเลย

· คุณสมบัติความสอดคล้องช่วยให้แน่ใจว่าในขณะที่ธุรกรรมดำเนินไป ข้อมูลจะเปลี่ยนจากสถานะที่สอดคล้องกันหนึ่งไปยังอีกสถานะหนึ่งที่สอดคล้องกัน — ธุรกรรมจะไม่ทำลายความสอดคล้องกันของข้อมูล

· คุณสมบัติการแยกหมายความว่าธุรกรรมที่แข่งขันกันเพื่อเข้าถึงฐานข้อมูลจะได้รับการประมวลผลทางกายภาพตามลำดับโดยแยกออกจากกัน แต่สำหรับผู้ใช้ดูเหมือนว่าพวกเขากำลังดำเนินการพร้อมกัน

· คุณสมบัติอายุยืนหมายความว่าหากธุรกรรมเสร็จสมบูรณ์ ข้อมูลที่เปลี่ยนแปลงไปจะไม่สูญหายไม่ว่าในสถานการณ์ใด ๆ แม้แต่ในกรณีที่เกิดข้อผิดพลาดในภายหลัง

มี 2 ​​ตัวเลือกสำหรับการทำธุรกรรม:

· หากคำสั่งทั้งหมดประสบความสำเร็จและไม่มีความล้มเหลวของฮาร์ดแวร์หรือซอฟต์แวร์เกิดขึ้นระหว่างการทำธุรกรรม การทำธุรกรรมจะกระทำ (การคอมมิตคือการเขียนลงดิสก์ของการเปลี่ยนแปลงในฐานข้อมูลที่เกิดขึ้นระหว่างการดำเนินการของธุรกรรม) ตราบใดที่ธุรกรรมไม่ได้ถูกผูกมัด การเปลี่ยนแปลงเหล่านี้สามารถย้อนกลับได้และฐานข้อมูลสามารถกลับสู่สถานะเดิมเมื่อธุรกรรมเริ่มต้นขึ้น การทำธุรกรรมหมายความว่าผลลัพธ์ทั้งหมดของการทำธุรกรรมนั้นคงที่ พวกเขาจะมองเห็นได้เฉพาะกับธุรกรรมอื่น ๆ หลังจากที่ทำธุรกรรมปัจจุบันแล้ว

· หากเกิดความล้มเหลวระหว่างการทำธุรกรรม ฐานข้อมูลจะต้องกลับสู่สถานะเดิม การย้อนกลับของธุรกรรมคือการดำเนินการที่ย้อนกลับการเปลี่ยนแปลงข้อมูลทั้งหมดที่ทำโดยคำสั่ง SQL ไปยังเนื้อหาของธุรกรรมที่รอดำเนินการในปัจจุบัน

4. ผู้ประกอบการทำธุรกรรมSQLในการทำงานกับการทำธุรกรรม

ANSI / ISO ตัวดำเนินการที่กำหนดไว้ ให้สัญญาและ ย้อนกลับในมาตรฐาน การเริ่มต้นของธุรกรรมจะถูกระบุโดยปริยายโดยผู้ดำเนินการแก้ไขข้อมูลรายแรก โอเปอเรเตอร์ ให้สัญญา หมายถึงการทำธุรกรรมที่สำเร็จผลการทำธุรกรรมจะถูกบันทึกในหน่วยความจำภายนอก เมื่อผู้ประกอบการทำรายการเสร็จ ย้อนกลับ ผลของการทำธุรกรรมจะถูกยกเลิก ความสำเร็จของโปรแกรมที่เริ่มต้นการทำธุรกรรมหมายถึงความสำเร็จของการทำธุรกรรม (ราวกับว่าตัวดำเนินการให้สัญญา ) ไม่สำเร็จ - ยกเลิกการทำธุรกรรม (ราวกับว่ามีการใช้ตัวดำเนินการย้อนกลับ ). ในรูปแบบนี้ แต่ละคำสั่งที่เปลี่ยนสถานะของข้อมูลถือเป็นธุรกรรม โมเดลนี้ถูกนำมาใช้ใน DBMS เชิงพาณิชย์เวอร์ชันแรก ต่อจากนั้น โมเดลธุรกรรมแบบขยายได้ถูกนำมาใช้ใน SYBASE DBMS

ในรูปแบบธุรกรรมแบบขยาย (เช่น ใน SQL SERVER DBMS) มีการดำเนินการเพิ่มเติมจำนวนหนึ่ง:

· โอเปอเรเตอร์ เริ่มการทำธุรกรรมแจ้งเกี่ยวกับการเริ่มต้นของการทำธุรกรรม

· โอเปอเรเตอร์ ภาระผูกพันรายงานความสำเร็จของการทำธุรกรรม โอเปอเรเตอร์นี้ เช่นเดียวกับ COMMIT ในโมเดลมาตรฐาน ANSI / ISO จะแก้ไขการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นในฐานข้อมูลระหว่างการทำธุรกรรม

· โอเปอเรเตอร์ บันทึกธุรกรรมสร้างจุดบันทึกภายในธุรกรรมที่สอดคล้องกับสถานะกลางของฐานข้อมูลที่บันทึกไว้ในขณะที่ดำเนินการคำสั่งนี้ ในโอเปอเรเตอร์ บันทึกธุรกรรมอาจมีชื่อเซฟพอยต์ ดังนั้น ในระหว่างการดำเนินการของธุรกรรม สามารถบันทึกจุดเซฟหลายจุดซึ่งสอดคล้องกับสถานะระดับกลางหลายสถานะ

· โอเปอเรเตอร์ ย้อนกลับมีการปรับเปลี่ยน 2 แบบ หากใช้โดยไม่มีพารามิเตอร์เพิ่มเติม จะถูกตีความว่าเป็นโอเปอเรเตอร์เพื่อย้อนกลับธุรกรรมทั้งหมด หากมีพารามิเตอร์ ย้อนกลับจากนั้นระบบจะตีความว่าเป็นโอเปอเรเตอร์เพื่อย้อนกลับธุรกรรมบางส่วนไปยังจุดบันทึก n

Savepoints มีประโยชน์ในการทำธุรกรรมที่ยาวนานและซับซ้อนเพื่อให้มีความสามารถในการเลิกทำการเปลี่ยนแปลงที่ทำโดยคำสั่งเฉพาะ

ในกรณีส่วนใหญ่ คุณสามารถตั้งค่าพารามิเตอร์ที่เรียกว่า ออโต้คอมมิท ซึ่งจะจำคำสั่งที่ดำเนินการทั้งหมดโดยอัตโนมัติ และการดำเนินการที่นำไปสู่ข้อผิดพลาดจะถูกยกเลิกโดยอัตโนมัติเสมอ โดยปกติโหมดนี้จะถูกตั้งค่าด้วยคำสั่งเช่น:

ชุด ออโต้คอมมิท บน ;

และกลับสู่การประมวลผลการโต้ตอบของคำขอตามปกติ:

ชุด ออโต้คอมมิท ปิด ;

นอกจากนี้ยังสามารถติดตั้งได้ ออโต้คอมมิท ซึ่ง DBMS จะดำเนินการโดยอัตโนมัติเมื่อลงทะเบียน หากเซสชันของผู้ใช้สิ้นสุดลงอย่างผิดปกติ - เช่น มีระบบล้มเหลว ธุรกรรมปัจจุบันจะย้อนกลับการเปลี่ยนแปลงโดยอัตโนมัติ ไม่แนะนำให้จัดระเบียบงานในลักษณะที่ธุรกรรมเดียวประกอบด้วยคำสั่งจำนวนมาก โดยเฉพาะอย่างยิ่งไม่เกี่ยวข้องกัน ซึ่งอาจนำไปสู่ความจริงที่ว่าเมื่อการเปลี่ยนแปลงถูกยกเลิก จะมีการดำเนินการมากเกินไป รวมถึงสิ่งที่จำเป็นและไม่ก่อให้เกิดข้อผิดพลาด ตัวเลือกที่ดีที่สุดคือเมื่อธุรกรรมประกอบด้วยคำสั่งเดียวหรือหลายคำสั่งที่เกี่ยวข้องอย่างใกล้ชิด

ทริกเกอร์จะดำเนินการเป็นธุรกรรมที่กำหนดไว้โดยนัย ดังนั้นคำสั่งควบคุมธุรกรรมจึงได้รับอนุญาตภายในทริกเกอร์ โดยเฉพาะอย่างยิ่ง หากคุณพบว่ามีการละเมิดข้อจำกัดด้านความซื่อสัตย์ คุณต้องใช้คำสั่ง ธุรกรรมย้อนกลับ ... หากทริกเกอร์เสร็จสมบูรณ์ คุณสามารถใช้คำสั่ง ให้สัญญา ธุรกรรม .
ออกคำสั่ง ธุรกรรมย้อนกลับ หรือ ให้สัญญา ธุรกรรม ไม่ทำลายทริกเกอร์ ดังนั้นคุณควรตรวจสอบความพยายามในการย้อนกลับธุรกรรมอย่างระมัดระวังหลายครั้งเมื่อตรงตามเงื่อนไขที่แตกต่างกัน

ตัวอย่างการทำธุรกรรม:

เริ่มต้นทรา

อัพเดทบัญชี

ยอดคงเหลือ SET = ยอดคงเหลือ - 100

ถ้า @@ ผิดพลาด = 0

เริ่ม

ย้อนกลับ TRA

กลับ

จบ

อัพเดท card_account

ยอดคงเหลือ SET = ยอดคงเหลือ + 100

ที่ไหน [ป้องกันอีเมล] _บัญชีผู้ใช้

ถ้า @@ ผิดพลาด = 0

เริ่ม

ย้อนกลับ TRA

กลับ

จบ

คอมมิท ทราน

สั่งการ เริ่ม ตรัง แจ้งเซิร์ฟเวอร์เกี่ยวกับการเริ่มต้นของธุรกรรม ซึ่งหมายความว่าก่อนที่เซิร์ฟเวอร์จะได้รับคำสั่งให้สัญญา ตรัง การเปลี่ยนแปลงทั้งหมดเป็นการชั่วคราว ดังนั้น หากเซิร์ฟเวอร์ขัดข้องหลังจากการอัพเดตครั้งแรก ธุรกรรมจะถูกย้อนกลับ ไม่มีกระบวนการใดที่สามารถเข้าถึงข้อมูลได้จนกว่าธุรกรรมจะเสร็จสมบูรณ์

5. บันทึกการทำธุรกรรม

การดำเนินการตามหลักการของการรักษาสถานะขั้นกลาง การยืนยันหรือย้อนกลับธุรกรรมมีให้โดยกลไกพิเศษเพื่อสนับสนุนการสร้างโครงสร้างระบบที่เรียกว่าบันทึกธุรกรรม บันทึกธุรกรรมประกอบด้วยลำดับของบันทึกการเปลี่ยนแปลงฐานข้อมูล ได้รับการออกแบบเพื่อให้จัดเก็บข้อมูลที่เชื่อถือได้ในฐานข้อมูล นี่แสดงถึงความสามารถในการกู้คืนสถานะที่สอดคล้องกันของฐานข้อมูลหลังจากความล้มเหลวของฮาร์ดแวร์และซอฟต์แวร์ใดๆ หลักการทั่วไปของการบันทึกและการกู้คืน:

· ผลลัพธ์ของธุรกรรมที่ผูกมัดจะต้องถูกบันทึกในสถานะกู้คืนของฐานข้อมูล

· ผลลัพธ์ของธุรกรรมที่ไม่ถูกผูกมัดไม่ควรแสดงในสถานะกู้คืนของฐานข้อมูล

ซึ่งหมายความว่ามีการกู้คืนสถานะที่สอดคล้องกันล่าสุดของฐานข้อมูล

สถานการณ์ต่อไปนี้เป็นไปได้ซึ่งจำเป็นต้องกู้คืนสถานะของฐานข้อมูล:

· การกู้คืนจากการสูญเสียเนื้อหาของ RAM อย่างกะทันหัน (soft glitch) สถานการณ์นี้สามารถเกิดขึ้นได้ในกรณีต่อไปนี้: ระหว่างการปิดไฟฉุกเฉินหรือเมื่อตัวประมวลผลเกิดข้อผิดพลาดร้ายแรง สถานการณ์มีลักษณะเฉพาะโดยการสูญเสียส่วนหนึ่งของฐานข้อมูลที่อยู่ในบัฟเฟอร์ RAM ในขณะที่เกิดความล้มเหลว

· การกู้คืนจากการพังทลายของสื่อฐานข้อมูลภายนอกหลัก (ฮาร์ดล้มเหลว)

ระบบควรจะสามารถกู้คืนจากทั้งการหยุดชะงักเล็กน้อย (เช่น ธุรกรรมที่ล้มเหลว) และหลังจากการหยุดชะงักครั้งใหญ่ (เช่น ไฟฟ้าดับ ความล้มเหลวอย่างหนัก)

ในกรณีที่ซอฟต์ล้มเหลว จำเป็นต้องกู้คืนเนื้อหาของฐานข้อมูลจากเนื้อหาของบันทึกธุรกรรมที่จัดเก็บไว้ในดิสก์ ในกรณีที่เกิดความล้มเหลวอย่างหนัก จำเป็นต้องกู้คืนเนื้อหาของฐานข้อมูลจากสำเนาเก็บถาวรและบันทึกธุรกรรม ซึ่งจัดเก็บไว้ในสื่อภายนอกที่ไม่เสียหาย

มีสองตัวเลือกหลักสำหรับการรักษาข้อมูลบันทึก ในตัวเลือกที่ 1 บันทึกการเปลี่ยนแปลงฐานข้อมูลภายในเครื่องแยกต่างหากจะถูกเก็บรักษาไว้สำหรับแต่ละธุรกรรมโดยธุรกรรมนี้ บันทึกเหล่านี้เรียกว่าบันทึกในเครื่อง ใช้สำหรับย้อนกลับธุรกรรมในเครื่อง นอกจากนี้ บันทึกการเปลี่ยนแปลงฐานข้อมูลทั่วไปจะยังคงอยู่ ซึ่งใช้ในการกู้คืนฐานข้อมูลหลังจากความล้มเหลวของซอฟต์และฮาร์ด

วิธีนี้ช่วยให้คุณดำเนินการย้อนกลับธุรกรรมแต่ละรายการได้อย่างรวดเร็ว แต่ส่งผลให้เกิดข้อมูลที่ซ้ำกันในบันทึกในเครื่องและบันทึกที่แชร์ ดังนั้นตัวเลือกที่สองจึงถูกใช้บ่อยกว่า - รักษาเฉพาะบันทึกการเปลี่ยนแปลงฐานข้อมูลทั่วไปซึ่งใช้เมื่อทำการย้อนกลับแต่ละรายการ

โครงสร้างทั่วไปของบันทึกสามารถแสดงได้ในรูปแบบของไฟล์ลำดับ ซึ่งบันทึกการเปลี่ยนแปลงทุกอย่างในฐานข้อมูลที่เกิดขึ้นระหว่างการดำเนินการของธุรกรรม ธุรกรรมทั้งหมดมีหมายเลขภายใน ดังนั้นการเปลี่ยนแปลงทั้งหมดที่ทำโดยธุรกรรมทั้งหมดจะถูกบันทึกไว้ในบันทึกธุรกรรม

รายการบันทึกแต่ละรายการจะถูกทำเครื่องหมายด้วยจำนวนของธุรกรรมที่เป็นของ และค่าของแอตทริบิวต์ที่เปลี่ยนแปลง นอกจากนี้ สำหรับแต่ละธุรกรรม คำสั่งในการเริ่มต้นและสิ้นสุดธุรกรรมจะถูกบันทึกในบันทึก

เพื่อความน่าเชื่อถือที่มากขึ้น บันทึกธุรกรรมมักจะถูกทำซ้ำโดยเครื่องมือระบบของ DBMS ซึ่งเป็นสาเหตุว่าทำไมจำนวนหน่วยความจำภายนอกจึงมากกว่าจำนวนข้อมูลจริงในฐานข้อมูลหลายเท่า

มี 2 ​​ตัวเลือกสำหรับการบันทึกธุรกรรม: โปรโตคอลการอัปเดตที่รอการตัดบัญชีและโปรโตคอลการอัปเดตทันที

การบันทึกการอัพเดตแบบ Lazy ถือว่ากลไกการดำเนินการธุรกรรมต่อไปนี้:

1. เมื่อรายการ T1 เริ่มต้น บันทึกจะถูกป้อนลงในโปรโตคอล

T1 เริ่ม ธุรกรรม

2. ในระหว่างการดำเนินธุรกรรม ค่าใหม่จะถูกบันทึกในโปรโตคอลสำหรับแต่ละเรกคอร์ดที่เปลี่ยนแปลง

ที1 NS _ บันทึก , คุณลักษณะ, ค่าใหม่

(NS _ บันทึก - หมายเลขบันทึกที่ไม่ซ้ำ)

3. หากการดำเนินการทั้งหมดที่ประกอบขึ้นเป็นธุรกรรมเสร็จสมบูรณ์ ธุรกรรมจะถูกบันทึกบางส่วนและป้อนต่อไปนี้ในโปรโตคอล:

NS 1 COMMT

4. หลังจากทำธุรกรรมแล้ว บันทึกโปรโตคอลที่เกี่ยวข้องกับ T1 จะใช้เพื่อทำการเปลี่ยนแปลงฐานข้อมูล

5. หากเกิดความล้มเหลว DBMS จะดูที่บันทึกและค้นหาว่าธุรกรรมใดจำเป็นต้องทำใหม่ ต้องทำซ้ำธุรกรรม T1 หากโปรโตคอลมีทั้งสองระเบียน T1 เริ่ม ธุรกรรม และ NS 1 COMMT . ฐานข้อมูลอาจอยู่ในสถานะไม่สอดคล้องกัน อย่างไรก็ตาม ค่าใหม่ทั้งหมดของรายการข้อมูลที่เปลี่ยนแปลงจะมีอยู่ในบันทึก และต้องมีการดำเนินการธุรกรรมใหม่ สำหรับสิ่งนี้จะใช้ขั้นตอนของระบบทำซ้ำ(), ซึ่งจะแทนที่ค่าของรายการทั้งหมดด้วยค่าใหม่โดยข้ามล็อกในลำดับไปข้างหน้า

6. หากบันทึกไม่มีคำสั่งให้คอมมิตธุรกรรม กับ ออมมิทไม่จำเป็นต้องดำเนินการใดๆ และธุรกรรมจะเริ่มต้นใหม่

กลไกทางเลือกที่มีการดำเนินการทันทีสำหรับการเปลี่ยนแปลงโดยตรงกับฐานข้อมูล ไม่เพียงแต่ใหม่ แต่ยังรวมถึงค่าเก่าทั้งหมดของแอตทริบิวต์ที่เปลี่ยนแปลงไปในโปรโตคอลด้วย ดังนั้นแต่ละระเบียนจึงมีลักษณะดังนี้:

ที1 NS _ บันทึก , คุณลักษณะ ค่าใหม่ ค่าเก่า

ในกรณีนี้ การเขียนลงในบันทึกนำหน้าการดำเนินการโดยตรงของการดำเนินการบนฐานข้อมูล เมื่อทำธุรกรรมสำเร็จ นั่นคือ พบคำสั่ง สัญญา T1และดำเนินการแล้ว การเปลี่ยนแปลงทั้งหมดได้เกิดขึ้นแล้วในฐานข้อมูล และไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติมเกี่ยวกับธุรกรรมนี้

เมื่อธุรกรรมถูกย้อนกลับ ขั้นตอนของระบบจะถูกดำเนินการ เลิกทำ ()ซึ่งคืนค่าเก่าทั้งหมดในการทำธุรกรรมที่ถูกยกเลิกตามลำดับผ่านโปรโตคอลโดยเริ่มจากคำสั่ง เริ่มต้นการทำธุรกรรม

กลไกต่อไปนี้ใช้สำหรับเฟลโอเวอร์:

· หากธุรกรรมมีคำสั่งให้เริ่มธุรกรรม แต่ไม่มีคำสั่งคอมมิทพร้อมการยืนยันการดำเนินการ ลำดับของการดำเนินการจะถูกดำเนินการเหมือนกับเมื่อธุรกรรมถูกย้อนกลับ นั่นคือ ค่าเก่าจะถูกกู้คืน

อันที่จริง การกู้คืนเกิดขึ้นตามอัลกอริธึมที่ซับซ้อนมากขึ้น ตั้งแต่ การเปลี่ยนแปลงทั้งในบันทึกและในฐานข้อมูลจะไม่ถูกบันทึกในทันที แต่จะถูกบัฟเฟอร์ไว้ การบันทึกการเปลี่ยนแปลงมีความเกี่ยวข้องอย่างใกล้ชิดไม่เฉพาะกับการจัดการธุรกรรมเท่านั้น แต่ยังรวมถึงการบัฟเฟอร์หน้าฐานข้อมูลใน RAM ด้วย หากบันทึกเกี่ยวกับการเปลี่ยนแปลงฐานข้อมูล ซึ่งควรไปที่บันทึกเมื่อดำเนินการแก้ไขฐานข้อมูล ถูกเขียนไปยังหน่วยความจำภายนอกทันที การดำเนินการนี้จะทำให้ระบบช้าลงอย่างมีนัยสำคัญ ดังนั้น เร็กคอร์ดบันทึกจึงถูกบัฟเฟอร์ด้วย: ระหว่างการทำงานปกติ เพจถัดไปจะถูกผลักเข้าไปในหน่วยความจำภายนอกของบันทึกเฉพาะเมื่อมีเร็กคอร์ดเต็มเท่านั้น

6. ล็อค

ในระบบผู้ใช้หลายคน ผู้ใช้หรือแอปพลิเคชันหลายรายสามารถทำงานพร้อมกันกับฐานข้อมูลเดียวกันได้ หนึ่งในงานหลักของ DBMS คือเพื่อให้แน่ใจว่าผู้ใช้แยกตัวออกนั่นคือการสร้างโหมดการทำงานดังกล่าวเพื่อให้ผู้ใช้แต่ละคนคิดว่าเขากำลังทำงานกับฐานข้อมูลเพียงอย่างเดียว งาน DBMS ดังกล่าวมักจะเรียกว่าธุรกรรมคู่ขนาน

มีปัญหาหลักสามประการในการประมวลผลฐานข้อมูลแบบขนาน:

§ ไม่มีการเปลี่ยนแปลง ... สถานการณ์นี้เกิดขึ้นเมื่อ 2 ธุรกรรมพร้อมกันแก้ไขบันทึกเดียวกันในฐานข้อมูล ตัวอย่างเช่น มีโอเปอเรเตอร์ 2 คนกำลังดำเนินการรับคำสั่งซื้อ ผู้ดำเนินการรายแรกรับออร์เดอร์สำหรับจอภาพ 30 ตัว เมื่อเขาไปที่โกดัง มีจอภาพอยู่ 40 จอ และเมื่อได้รับการยืนยันจากลูกค้าแล้ว ก็ได้ออกการขายจอภาพ 30 จอจากทั้งหมด 40 จอ ควบคู่ไปกับเขา ผู้ปฏิบัติงานคนที่สองซึ่งรับคำสั่งสำหรับ 20 จอ จอมอนิเตอร์เดียวกัน และในทางกลับกัน เมื่อติดต่อโกดัง เขาได้รับมูลค่าเท่ากันที่ 40 และทำการสั่งซื้อให้กับลูกค้าของเขา เสร็จสิ้นการทำงานกับข้อมูล เขารันคำสั่ง อัปเดต,ซึ่งบวก 20 เป็นส่วนที่เหลือของจอภาพในคลังสินค้า หลังจากนั้น โอเปอเรเตอร์แรกทำงานกับลูกค้าเสร็จและดำเนินการคำสั่ง รีเฟรชซึ่งบันทึกส่วนที่เหลือของ 10 เป็นจำนวนจอภาพในสต็อก พวกเขาขายจอภาพได้ทั้งหมด 50 จอจาก 40 จอ โดยมีจอภาพอยู่ในสต็อก 10 ตัว

§ ปัญหาข้อมูลระดับกลาง ... เชื่อมต่อกับความสามารถในการเข้าถึงข้อมูลระดับกลาง สมมติว่าผู้ปฏิบัติงานรายแรกกำลังเจรจากับลูกค้าของเขาได้ป้อนจอภาพที่สั่งซื้อ 30 ตัว แต่ก่อนที่จะทำการสั่งซื้อให้เสร็จสิ้น ลูกค้าต้องการค้นหาคุณลักษณะเพิ่มเติมบางประการของผลิตภัณฑ์ แอปพลิเคชันที่เจ้าหน้าที่ปฏิบัติงานคนที่ 1 กำลังทำงานด้วยได้เปลี่ยนการตรวจสอบที่เหลืออยู่ในคลังสินค้าแล้ว และตอนนี้ข้อมูลเกี่ยวกับจอภาพที่เหลืออีก 10 ตัวจะถูกเก็บไว้ที่นั่น ขณะนี้ โอเปอเรเตอร์คนที่สองกำลังพยายามรับคำสั่งซื้อจากลูกค้าเพื่อสั่งซื้อจอภาพ 20 จอ แต่แอปพลิเคชันของเขาแสดงให้เห็นว่ามีจอภาพเหลืออยู่เพียง 10 จอในคลังสินค้า และผู้ปฏิบัติงานถูกบังคับให้ปฏิเสธลูกค้าของเขา ในเวลานี้ ลูกค้าของผู้ให้บริการรายแรกตัดสินใจที่จะไม่ซื้อจอภาพ ผู้ดำเนินการย้อนกลับธุรกรรมและมีจอภาพ 40 ตัวในคลังสินค้าอีกครั้ง สถานการณ์นี้เกิดขึ้นได้เนื่องจากแอปพลิเคชันของตัวดำเนินการที่สองมีการเข้าถึงข้อมูลระดับกลางที่สร้างขึ้นโดยแอปพลิเคชันแรก

§ ปัญหาข้อมูลไม่สอดคล้องกัน เชื่อมโยงกับความเป็นไปได้ของการเปลี่ยนแปลงข้อมูล x อ่านแล้ว x โดยแอปพลิเคชันอื่น ผู้ปฏิบัติงานทั้งสองเริ่มทำงานเกือบพร้อมกัน ได้รับสถานะคลังสินค้าเริ่มต้น 40 จอภาพ จากนั้นผู้ปฏิบัติงานรายแรกจะขายจอภาพ 30 ตัวให้กับลูกค้าของเขา เขาออกจากแอปพลิเคชันของเขาและดำเนินการคำสั่ง COMMIT การทำธุรกรรม สถานะของฐานข้อมูลมีความสอดคล้องกัน ในขณะนี้ ลูกค้าของโอเปอเรเตอร์ที่สองตัดสินใจสั่งซื้อ และผู้ดำเนินการรายที่สอง เข้าถึงข้อมูลอีกครั้ง เห็นว่าจำนวนจอภาพเปลี่ยนไป ตัวดำเนินการที่สองเชื่อว่าความสมบูรณ์ของการทำธุรกรรมถูกละเมิดเพราะ ในระหว่างการทำงานหนึ่งงาน เขาได้รับสถานะคลังสินค้า 2 แห่งที่แตกต่างกัน สถานการณ์นี้เกิดขึ้นเนื่องจากแอปพลิเคชันของโอเปอเรเตอร์ที่ 1 สามารถเปลี่ยน tuple ข้อมูล ซึ่งถูกอ่านโดยแอปพลิเคชันของโอเปอเรเตอร์ที่ 2

โดยสรุปปัญหาที่ระบุไว้ ประเภทของความขัดแย้งระหว่างธุรกรรมคู่ขนานสองรายการสามารถแยกแยะได้:

· W-W - ธุรกรรม 2 พยายามแก้ไขวัตถุที่แก้ไขโดยธุรกรรม 1 ที่ยังไม่สิ้นสุด

· R-W - ธุรกรรม 2 พยายามแก้ไขวัตถุที่อ่านโดยธุรกรรม 1 ที่ยังไม่สิ้นสุด

· ธุรกรรม WR 2 พยายามอ่านวัตถุที่แก้ไขโดยธุรกรรมที่ไม่สิ้นสุด 1

7. การทำรายการต่อเนื่อง

เพื่อหลีกเลี่ยงความขัดแย้งดังกล่าว จำเป็นต้องพัฒนาขั้นตอนบางอย่างสำหรับการทำธุรกรรมที่เกิดขึ้นพร้อมกันอย่างสม่ำเสมอ ขั้นตอนนี้ต้องเป็นไปตามกฎต่อไปนี้:

1. ระหว่างการทำธุรกรรม ผู้ใช้จะเห็นเฉพาะข้อมูลที่สอดคล้องกัน ผู้ใช้ไม่ควรเห็นข้อมูลกลางที่ไม่สอดคล้องกัน

2. เมื่อทำธุรกรรม DB 2 แบบคู่ขนาน ผลลัพธ์ของการดำเนินการธุรกรรมควรเหมือนกับว่าธุรกรรม 1 และธุรกรรม 2 ถูกดำเนินการ หรือในทางกลับกัน

ขั้นตอนสำหรับการนำหลักการเหล่านี้ไปใช้เรียกว่าการทำรายการซีเรียลไลซ์เซชั่น รับประกันว่าผู้ใช้แต่ละรายที่เข้าถึงฐานข้อมูลจะทำงานร่วมกับฐานข้อมูลเสมือนว่าไม่มีผู้ใช้รายอื่นเข้าถึงข้อมูลเดียวกันในเวลาเดียวกัน ผลลัพธ์ของการดำเนินการร่วมกันของธุรกรรมนั้นเทียบเท่ากับผลลัพธ์ของการดำเนินการตามลำดับของธุรกรรมเดียวกัน

ทางออกที่ง่ายที่สุดคือการทำธุรกรรมตามลำดับ แต่การออกดังกล่าวไม่เหมาะสมในแง่ของเวลา มีวิธีการที่ยืดหยุ่นกว่าในการควบคุมการเข้าถึงฐานข้อมูลแบบขนาน กลไกทั่วไปในการแก้ปัญหาเหล่านี้คือการล็อกอ็อบเจ็กต์ (เช่น ตาราง) ตลอดระยะเวลาของธุรกรรม หากธุรกรรมเข้าถึงอ็อบเจ็กต์ที่ถูกล็อก จะยังคงรอจนกว่าอ็อบเจ็กต์จะถูกปลดล็อก หลังจากนั้นจึงจะสามารถเริ่มประมวลผลได้ อย่างไรก็ตาม การบล็อกทำให้เกิดปัญหาใหม่ - เวลาแฝงของธุรกรรมเนื่องจากการบล็อก

ดังนั้น การล็อก หรือที่เรียกว่าการจับวัตถุที่ซิงโครไนซ์ จึงสามารถนำไปใช้กับวัตถุประเภทต่างๆ ได้ ออบเจ็กต์การบล็อกที่ใหญ่ที่สุดสามารถเป็นฐานข้อมูลทั้งหมดได้ แต่การบล็อกประเภทนี้จะทำให้ฐานข้อมูลไม่สามารถเข้าถึงแอปพลิเคชันอื่นทั้งหมดที่ทำงานกับฐานข้อมูลนี้ วัตถุล็อคประเภทถัดไปคือตาราง ธุรกรรมที่ทำงานบนโต๊ะจะล็อกไว้ตลอดระยะเวลาของธุรกรรม การล็อกประเภทนี้ดีกว่าการล็อกแบบก่อนหน้านี้ เนื่องจากอนุญาตให้ทำธุรกรรมพร้อมกันที่ทำงานบนตารางอื่นๆ

DBMS จำนวนหนึ่งใช้การล็อกระดับหน้า ในกรณีนี้ DBMS จะล็อกแต่ละหน้าบนดิสก์เมื่อธุรกรรมเข้าถึงเท่านั้น การล็อกประเภทนี้จะนุ่มนวลยิ่งขึ้น และช่วยให้ธุรกรรมต่างๆ ดำเนินการในตารางเดียวกันได้หากเข้าถึงหน้าข้อมูลที่แตกต่างกัน

ใน DBMS บางตัว การล็อกระดับแถวสามารถทำได้ แต่กลไกการล็อกดังกล่าวต้องการค่าใช้จ่ายเพิ่มเติมสำหรับการสนับสนุน SQL Server มุ่งมั่นที่จะตั้งค่าการล็อกระดับระเบียนเพื่อเพิ่มการทำงานพร้อมกันให้สูงสุด เมื่อจำนวนการล็อกแถวเพิ่มขึ้น เซิร์ฟเวอร์สามารถย้ายไปยังการล็อกหน้าได้หากจำนวนเร็กคอร์ดเกินขีดจำกัด

8. แทนที่การล็อกที่ระดับคำขอ ประเภทล็อค

ถ้าอยู่หลังชื่อตารางในประโยค จากคีย์เวิร์ดตัวใดตัวหนึ่งดังต่อไปนี้ คำขอรบกวนตัวจัดการการล็อกและมีการใช้ประเภทการล็อกที่ระบุ:

· NOLOCK - อนุญาตให้อ่านสกปรก

· PAGLOCK - การล็อคระดับหน้า;

· ROWLOCK - ปิดกั้นที่ระดับของบันทึก;

· TABLOCK - ล็อคตารางที่ใช้ร่วมกัน

· TABLOCKX - ล็อคโต๊ะพิเศษ

ปัจจุบันปัญหาการปิดกั้นเป็นเรื่องของการศึกษาจำนวนมาก

ล็อคมีสองประเภทพื้นฐาน (อุปกรณ์จับยึดแบบซิงโครไนซ์):

การล็อกแบบใช้ร่วมกัน (ไม่ใช่แบบฮาร์ด) - โหมดนี้หมายถึงการจับภาพวัตถุที่ใช้ร่วมกันและใช้เพื่อดำเนินการอ่านบนออบเจ็กต์ ออบเจ็กต์ที่ถูกล็อกด้วยวิธีนี้จะไม่เปลี่ยนแปลงระหว่างการดำเนินการของทรานแซกชันและพร้อมใช้งานสำหรับธุรกรรมอื่น ๆ แต่เฉพาะในโหมดอ่านเท่านั้น

ล็อคพิเศษ (ฮาร์ด) - ไม่อนุญาตให้ใครก็ตามที่ไม่ใช่เจ้าของล็อคนี้เข้าถึงข้อมูลเลย การล็อกเหล่านี้ใช้สำหรับคำสั่งที่เปลี่ยนเนื้อหาหรือโครงสร้างของตารางและมีผลจนถึงสิ้นสุดธุรกรรม

การจับวัตถุโดยธุรกรรมการอ่านหลายรายการเข้ากันได้ กล่าวคือ ธุรกรรมหลายรายการได้รับอนุญาตให้อ่านวัตถุเดียวกัน การจับวัตถุด้วยธุรกรรมการอ่านหนึ่งครั้งไม่เข้ากันกับการดักจับอื่นโดยธุรกรรมอื่นของวัตถุเดียวกันโดยการเขียน การจับวัตถุเดียวกันโดยธุรกรรมการเขียนที่ต่างกันไม่เข้ากัน

อย่างไรก็ตาม การใช้ตัวล็อคประเภทต่างๆ ทำให้เกิดปัญหาการชะงักงัน ปัญหาการหยุดชะงักเกิดขึ้นเมื่อพิจารณาการดำเนินการของกระบวนการคู่ขนานในสภาพแวดล้อมการทำงานและยังเกี่ยวข้องกับการจัดการวัตถุที่ใช้ร่วมกัน (ที่ใช้ร่วมกัน) ตัวอย่างการชะงักงัน: สมมติว่าธุรกรรม A ฮาร์ดล็อกตารางที่ 1 และตารางฮาร์ดล็อกที่ 2 ธุรกรรม B ในทางกลับกัน ฮาร์ดล็อกตารางที่ 2 และตารางฮาร์ดล็อกที่ 1

หากธุรกรรมทั้งสองเริ่มทำงานพร้อมกัน หลังจากดำเนินการแก้ไขในตารางแรกแล้ว ทั้งสองรายการจะสิ้นสุดด้วยการรอที่ไม่สิ้นสุด: รายการ A จะรอให้ธุรกรรม B เสร็จสมบูรณ์และปลดล็อกตารางที่ 2 และธุรกรรม B จะรออย่างไร้ประโยชน์สำหรับธุรกรรม A ให้เสร็จสมบูรณ์และตารางที่ 1 จะถูกปลดล็อค

สถานการณ์อาจซับซ้อนกว่านั้นมาก จำนวนธุรกรรมที่ถูกบล็อกระหว่างกันอาจสูงขึ้นมาก แต่ละธุรกรรมไม่สามารถตรวจพบสถานการณ์นี้ได้ด้วยตัวเอง จะต้องได้รับการแก้ไขโดย DBMS DBMS เชิงพาณิชย์ส่วนใหญ่มีกลไกในการตรวจจับการหยุดชะงักดังกล่าว

การตรวจจับการหยุดชะงักขึ้นอยู่กับการสร้าง (หรือการบำรุงรักษา) กราฟรอการทำธุรกรรม กราฟรอสามารถเป็นกราฟกำกับ ที่จุดยอดที่มีชื่อของธุรกรรม หากธุรกรรม T1 กำลังรอการสิ้นสุดของธุรกรรม T2 ลูกศรจะเปลี่ยนจากด้านบนของ T1 ไปที่ด้านบนของ T2 นอกจากนี้ ลูกศรสามารถทำเครื่องหมายด้วยชื่อของวัตถุที่ถูกบล็อกและประเภทของการบล็อก

กลไกการล็อกใช้แนวคิดของระดับการแยกล็อกเพื่อกำหนดจำนวนตารางที่จะล็อก การแยกออกเป็นสามระดับตามธรรมเนียม:

· ระดับการแยกเรียกว่าอ่านซ้ำ ใช้กลยุทธ์เพื่อให้ภายในธุรกรรมที่กำหนด ระเบียนทั้งหมดที่ดึงมาโดยแบบสอบถามไม่สามารถเปลี่ยนแปลงได้ ระเบียนเหล่านี้ไม่สามารถเปลี่ยนแปลงได้จนกว่าธุรกรรมจะเสร็จสมบูรณ์

· ระดับการแยก เรียกว่าตัวชี้ความเสถียร ป้องกันไม่ให้แต่ละเร็กคอร์ดถูกเปลี่ยนแปลงในขณะที่อ่าน หรือถูกอ่านในขณะที่กำลังแก้ไข

· ระดับความเสถียรที่สามเรียกว่าอ่านอย่างเดียว อ่านอย่างเดียวล็อกทั้งตาราง ดังนั้นจึงไม่สามารถใช้กับคำสั่งอัพเดตได้ ดังนั้น แบบอ่านอย่างเดียวช่วยให้แน่ใจว่าผลลัพธ์ของคิวรีสอดคล้องกับข้อมูลตารางภายใน

ดังนั้นเครื่องมือควบคุมการทำงานพร้อมกันใน DBMS จะกำหนดขอบเขตที่คำสั่งที่ออกพร้อมกันจะรบกวนซึ่งกันและกัน ใน DBMS สมัยใหม่ เป็นเครื่องมือที่ปรับเปลี่ยนได้ซึ่งจะค้นหาโซลูชันที่เหมาะสมที่สุดโดยอัตโนมัติ โดยคำนึงถึงการจัดเตรียมประสิทธิภาพฐานข้อมูลสูงสุดและความพร้อมใช้งานของข้อมูลสำหรับทีมปฏิบัติการ

9. คำถามควบคุม

1. กำหนดธุรกรรม ให้ตัวอย่างการทำธุรกรรม

2. แสดงรายการและกำหนดคุณสมบัติของธุรกรรม

3. อะไรคือตัวเลือกที่เป็นไปได้สำหรับการทำธุรกรรมให้เสร็จสิ้น

4. ตัวดำเนินการของภาษาคืออะไร SQL ทำหน้าที่ทำงานกับธุรกรรมในรูปแบบรายการขยาย?

5. ฉันสามารถใช้คำสั่งควบคุมธุรกรรมในทริกเกอร์ได้หรือไม่

6. บันทึกการทำธุรกรรมมีไว้เพื่ออะไร?

7. การกู้คืนฐานข้อมูลดำเนินการจากบันทึกธุรกรรมในกรณีใดบ้าง

8. มีตัวเลือกใดบ้างสำหรับการบันทึกธุรกรรม

9. อะไรคือความแตกต่างระหว่างตัวเลือกการบันทึกธุรกรรม: โปรโตคอลการอัปเดตที่รอการตัดบัญชีและโปรโตคอลการอัปเดตทันที

10. ปัญหาใดเกิดขึ้นเมื่อผู้ใช้ทำงานควบคู่ไปกับฐานข้อมูล

11. วัตถุฐานข้อมูลใดที่สามารถล็อกเพื่อใช้หลักการแยกผู้ใช้

12. เป็นไปได้ไหมที่จะกำหนดประเภทของการบล็อกในแบบสอบถาม?

13. มีการจับวัตถุประเภทใดด้วยธุรกรรมหลายรายการ อันไหนเข้ากันได้?

14. ปัญหาของ Dead End คืออะไร?

มีรูปแบบการทำธุรกรรมต่างๆ ที่สามารถจำแนกตามคุณสมบัติต่างๆ ได้ รวมทั้งโครงสร้างของธุรกรรม การเกิดพร้อมกันภายในธุรกรรม ระยะเวลา ฯลฯ

ปัจจุบัน ธุรกรรมประเภทต่อไปนี้มีความโดดเด่น: ธุรกรรมแบบคงที่หรือแบบคลาสสิก ธุรกรรมแบบลูกโซ่ และธุรกรรมแบบซ้อน

การทำธุรกรรมแบบปกติหรือแบบปกติมีลักษณะเฉพาะด้วยคุณสมบัติคลาสสิกสี่ประการ: อะตอมมิก ความสม่ำเสมอ การแยก ความทนทาน (ความแข็งแกร่ง) - กรด (Atomicity, Consistency, Isolation, Durability) ธุรกรรมแบบดั้งเดิมบางครั้งเรียกว่าธุรกรรมกรด คุณสมบัติดังกล่าวข้างต้นหมายถึงสิ่งต่อไปนี้:

· คุณสมบัติของอะตอมมิก(Atomicity) เป็นการแสดงความจริงที่ว่าการทำธุรกรรมควรจะเสร็จสมบูรณ์เป็นทั้งหมดหรือไม่

· คุณสมบัติสม่ำเสมอ(ความสม่ำเสมอ) ทำให้มั่นใจได้ว่าในขณะที่ธุรกรรมดำเนินไป การเปลี่ยนข้อมูลจากสถานะที่สอดคล้องกันหนึ่งไปยังอีกสถานะหนึ่ง - ธุรกรรมจะไม่ทำลายความสอดคล้องกันของข้อมูล

· คุณสมบัติการแยกตัว(การแยก) หมายความว่าธุรกรรมที่แข่งขันกันเพื่อเข้าถึงฐานข้อมูลจะได้รับการประมวลผลทางกายภาพตามลำดับโดยแยกออกจากกัน แต่สำหรับผู้ใช้ดูเหมือนว่าพวกเขากำลังดำเนินการแบบคู่ขนาน

· คุณสมบัติความทนทาน(Durability) ตีความได้ดังนี้ หากทำธุรกรรมสำเร็จแล้ว การเปลี่ยนแปลงในข้อมูลที่สร้างขึ้นจะไม่สูญหายไม่ว่ากรณีใดๆ (แม้ในกรณีที่เกิดข้อผิดพลาดในภายหลัง)

มีสองตัวเลือกในการทำธุรกรรม หากคำสั่งทั้งหมดสำเร็จและไม่มีความล้มเหลวของฮาร์ดแวร์หรือซอฟต์แวร์เกิดขึ้นระหว่างการทำธุรกรรม ธุรกรรมนั้นจะถูกคอมมิต

การทำธุรกรรมเป็นการเขียนลงดิสก์การเปลี่ยนแปลงในฐานข้อมูลที่เกิดขึ้นระหว่างการดำเนินการของธุรกรรม

อนุญาตให้ย้อนกลับการเปลี่ยนแปลงเหล่านี้ กู้คืนฐานข้อมูลไปยังสถานะที่เป็นอยู่ในขณะที่ธุรกรรมเริ่มต้นได้ จนกว่าธุรกรรมจะเสร็จสิ้น การทำธุรกรรมหมายความว่าผลลัพธ์ทั้งหมดของการทำธุรกรรมนั้นคงที่ พวกเขาจะมองเห็นได้เฉพาะกับธุรกรรมอื่น ๆ หลังจากที่ทำธุรกรรมปัจจุบันแล้ว จนถึงจุดนี้ ข้อมูลทั้งหมดที่ได้รับผลกระทบจากธุรกรรมจะ "มองเห็น" ต่อผู้ใช้ในสถานะที่จุดเริ่มต้นของธุรกรรมปัจจุบัน

หากมีบางอย่างเกิดขึ้นระหว่างการดำเนินการของธุรกรรมที่ทำให้ไม่สามารถดำเนินการให้เสร็จสิ้นได้ตามปกติ ฐานข้อมูลจะต้องกลับสู่สถานะเดิม การย้อนกลับของธุรกรรมคือการดำเนินการที่ย้อนกลับการเปลี่ยนแปลงข้อมูลทั้งหมดที่ทำโดยคำสั่ง SQL ไปยังเนื้อหาของธุรกรรมที่รอดำเนินการในปัจจุบัน

แต่ละคำสั่งในการทำธุรกรรมเป็นส่วนหนึ่งของงาน แต่คำสั่งทั้งหมดต้องทำให้สมบูรณ์โดยไม่มีเงื่อนไขเพื่อให้งานทั้งหมดเสร็จสมบูรณ์ การจัดกลุ่มคำสั่งในธุรกรรมจะบอก DBMS ว่าควรดำเนินการทั้งกลุ่มโดยรวม และการดำเนินการนี้ควรได้รับการสนับสนุนโดยอัตโนมัติ

มาตรฐาน ANSI / ISO SQL กำหนดรูปแบบธุรกรรมและฟังก์ชันของคำสั่ง COMMIT และ ROLLBACK มาตรฐานระบุว่าธุรกรรมเริ่มต้นด้วยคำสั่ง SQL แรกที่เริ่มต้นโดยผู้ใช้หรือมีอยู่ในโปรแกรม ซึ่งเปลี่ยนสถานะปัจจุบันของฐานข้อมูล คำสั่ง SQL ที่ตามมาทั้งหมดถือเป็นเนื้อหาของธุรกรรม การทำธุรกรรมสิ้นสุดลงด้วยวิธีใดวิธีหนึ่งจากสี่วิธีที่เป็นไปได้ (รูปที่ 11.1):

1. คำสั่ง COMMIT หมายถึง การทำธุรกรรมเสร็จสมบูรณ์ การใช้งานทำให้เกิดการเปลี่ยนแปลงถาวรในฐานข้อมูลภายในธุรกรรมปัจจุบัน

2. คำสั่ง ROLLBACK ยกเลิกธุรกรรม ยกเลิกการเปลี่ยนแปลงที่ทำกับฐานข้อมูลซึ่งเป็นส่วนหนึ่งของธุรกรรมนี้ ธุรกรรมใหม่เริ่มต้นทันทีหลังจากใช้ ROLLBACK

3. ความสำเร็จของโปรแกรมที่เริ่มต้นธุรกรรมปัจจุบันหมายถึงความสำเร็จของการทำธุรกรรม (ราวกับว่าใช้คำสั่ง COMMIT)

4. การยุติโปรแกรมที่ผิดพลาดจะยกเลิกการทำธุรกรรม (ราวกับว่ามีการใช้คำสั่ง ROLLBACK)

ในรูปแบบนี้ แต่ละคำสั่งที่เปลี่ยนสถานะของฐานข้อมูลถือเป็นธุรกรรม ดังนั้น เมื่อคำสั่งนี้เสร็จสมบูรณ์ ฐานข้อมูลจะเข้าสู่สถานะเสถียรใหม่

DBMS เชิงพาณิชย์เวอร์ชันแรกใช้โมเดลธุรกรรม ANSI / ISO ต่อมา มีการใช้แบบจำลองธุรกรรมแบบขยายใน SYBASE DBMS ซึ่งรวมถึงการดำเนินการเพิ่มเติมจำนวนหนึ่ง โมเดล SYBASE ใช้ตัวดำเนินการสี่ตัวต่อไปนี้:

· คำสั่ง BEGIN TRANSACTION ระบุการเริ่มต้นของธุรกรรม ต่างจากโมเดล ANSI / ISO ที่จุดเริ่มต้นของธุรกรรมถูกระบุโดยนัยโดยคำสั่งแก้ไขข้อมูลแรก ในรูปแบบ SYBASE การเริ่มต้นของธุรกรรมจะถูกระบุอย่างชัดเจนโดยใช้จุดเริ่มต้นของคำสั่งธุรกรรม

· คำสั่ง COMMIT TRANSACTION จะรายงานความสำเร็จของการทำธุรกรรม เทียบเท่ากับคำสั่ง COMMIT ในโมเดลมาตรฐาน ANSI / ISO ตัวดำเนินการนี้ เช่นเดียวกับตัวดำเนินการ COMMIT จะยอมรับการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับฐานข้อมูลระหว่างการดำเนินการของธุรกรรม

· คำสั่ง SAVE TRANSACTION สร้าง savepoint ภายในธุรกรรมที่สอดคล้องกับสถานะกลางของฐานข้อมูลที่บันทึกไว้ในขณะที่ดำเนินการคำสั่งนี้ คำสั่ง SAVE TRANSACTION สามารถมีชื่อของ savepoint ดังนั้น ในระหว่างการดำเนินการของธุรกรรม อาจมีการจัดเก็บจุดบันทึกหลายจุด ซึ่งสอดคล้องกับสถานะระดับกลางหลายสถานะ

· ตัวดำเนินการ ROLLBACK มีการดัดแปลงสองแบบ หากมีการใช้คำสั่งนี้โดยไม่มีพารามิเตอร์เพิ่มเติม คำสั่งนี้จะถูกตีความว่าเป็นคำสั่งย้อนกลับสำหรับธุรกรรมทั้งหมด นั่นคือ ในกรณีนี้ จะเทียบเท่ากับคำสั่ง ROLLBACK ในแบบจำลอง ANSI / ISO หากคำสั่งย้อนกลับมีพารามิเตอร์และเขียนเป็น ROLLBACK B คำสั่งนั้นจะถูกตีความว่าเป็นคำสั่งย้อนกลับของธุรกรรมบางส่วนไปยัง savepoint B

ข้าว. 11.1.โมเดลธุรกรรม ANSI / ISO

หลักการดำเนินการธุรกรรมในรูปแบบธุรกรรมแบบขยายจะแสดงในรูปที่ 11.2. ในรูป ตัวดำเนินการจะถูกทำเครื่องหมายด้วยตัวเลขเพื่อให้สะดวกยิ่งขึ้นสำหรับเราในการติดตามความคืบหน้าของธุรกรรมในทุกกรณีที่เป็นไปได้

ข้าว. 11.2.ตัวอย่างการทำธุรกรรมในรูปแบบขยาย

ธุรกรรมเริ่มต้นด้วยโอเปอเรเตอร์ที่ชัดเจนของการเริ่มต้นธุรกรรมซึ่งมีหมายเลข 1 ในโครงการของเรา ถัดไปคือโอเปอเรเตอร์ 2 ซึ่งเป็นโอเปอเรเตอร์การค้นหาและไม่เปลี่ยนสถานะปัจจุบันของฐานข้อมูลและโอเปอเรเตอร์ 3 และ 4 ต่อไปนี้ โอนฐานข้อมูลไปยังสถานะใหม่ คำสั่ง 5 บันทึกสถานะกลางใหม่นี้ของฐานข้อมูลและทำเครื่องหมายเป็นสถานะกลางที่จุด A จากนั้นคำสั่ง 6 และ 7 จะตามมา ซึ่งถ่ายโอนฐานข้อมูลไปยังสถานะใหม่ และตัวดำเนินการ 8 จะบันทึกสถานะนี้เป็นสถานะกลางที่จุด B ตัวดำเนินการ 9 ทำการป้อนข้อมูลใหม่ และตัวดำเนินการ 10 จะทำการตรวจสอบเงื่อนไขที่ 1 หากตรงตามเงื่อนไข 1 คำสั่ง 11 จะถูกดำเนินการ ซึ่งจะย้อนกลับธุรกรรมไปยังสถานะกลาง B ซึ่งหมายความว่าผลที่ตามมาจากการกระทำของคำสั่ง 9 จะถูกลบเหมือนเดิมและฐานข้อมูลจะกลับสู่สถานะกลางอีกครั้ง B แม้ว่าหลังจากดำเนินการตามคำสั่ง 9 มันอยู่ในสภาพใหม่แล้ว และหลังจากการย้อนกลับของธุรกรรม แทนที่จะเป็นคำสั่ง 9 ซึ่งถูกดำเนินการก่อนหน้านี้จากสถานะ ในฐานข้อมูล คำสั่ง 13 ของการป้อนข้อมูลใหม่จะถูกดำเนินการ จากนั้นการควบคุมจะถูกโอนไปยังคำสั่ง 14 คำสั่ง 14 ตรวจสอบเงื่อนไขอีกครั้ง แต่มีบางส่วนแล้ว สภาพใหม่ 2; หากตรงตามเงื่อนไข การควบคุมจะถูกโอนไปยังตัวดำเนินการ 15 ซึ่งย้อนกลับธุรกรรมไปยังสถานะกลาง A กล่าวคือ ตัวดำเนินการทั้งหมดที่เปลี่ยนฐานข้อมูล เริ่มด้วย 6 และลงท้ายด้วย 13 ถือว่าไม่ได้ผล นั่นคือ ผลลัพธ์ของการดำเนินการหายไปและเราอยู่ในสถานะอีกครั้ง และหลังจากดำเนินการโอเปอเรเตอร์ 4 จากนั้นการควบคุมจะถูกโอนไปยังโอเปอเรเตอร์ 17 ซึ่งอัปเดตเนื้อหาของฐานข้อมูลหลังจากนั้นการควบคุมจะถูกโอนไปยังโอเปอเรเตอร์ 18 ซึ่ง เกี่ยวข้องกับการตรวจสอบเงื่อนไข 3 การตรวจสอบจะสิ้นสุดลงโดยการโอนการควบคุมไปยังตัวดำเนินการ 20 ซึ่งทำธุรกรรม และฐานข้อมูลจะเข้าสู่สถานะคงตัวใหม่ และไม่สามารถเปลี่ยนแปลงได้ภายในธุรกรรมปัจจุบัน หรือหากการควบคุมถูกโอนไปยังโอเปอเรเตอร์ 19 ธุรกรรมจะถูกย้อนกลับไปยังจุดเริ่มต้นและฐานข้อมูลจะกลับสู่สถานะเริ่มต้น และสถานะระดับกลางทั้งหมดได้รับการตรวจสอบที่นี่แล้ว และไม่สามารถดำเนินการย้อนกลับไปยังตัวกลางเหล่านี้ได้ สถานะหลังจากรันโอเปอเรเตอร์ 19

แน่นอนว่าโมเดลธุรกรรมแบบขยายของ SYBASE รองรับกลไกการดำเนินการธุรกรรมที่ยืดหยุ่นกว่ามาก Savepoints อนุญาตให้ตั้งค่าเครื่องหมายภายในธุรกรรมเพื่อให้สามารถยกเลิกได้เฉพาะบางส่วนของงานที่ทำในธุรกรรม ขอแนะนำให้ใช้จุดบันทึกในธุรกรรมที่ยาวและซับซ้อนเพื่อให้มีฟังก์ชันการเลิกทำสำหรับคำสั่งเฉพาะ อย่างไรก็ตาม สิ่งนี้นำไปสู่ต้นทุนเพิ่มเติมของทรัพยากรระบบ - ผู้ปฏิบัติงานดำเนินการ และการเปลี่ยนแปลงจะถูกยกเลิก โดยปกติ การปรับปรุงตรรกะในการประมวลผลอาจเป็นทางออกที่ดีกว่า

บันทึกการทำธุรกรรม

การดำเนินการใน DBMS ของหลักการของการรักษาสถานะระดับกลาง การยืนยันหรือย้อนกลับธุรกรรมนั้นจัดทำโดยกลไกพิเศษเพื่อสนับสนุนการสร้างโครงสร้างระบบบางอย่างที่เรียกว่า บันทึกการทำธุรกรรม

อย่างไรก็ตาม วัตถุประสงค์ของบันทึกธุรกรรมนั้นกว้างกว่ามาก ได้รับการออกแบบเพื่อให้จัดเก็บข้อมูลที่เชื่อถือได้ในฐานข้อมูล

โดยเฉพาะอย่างยิ่งข้อกำหนดนี้แสดงถึงความสามารถในการกู้คืนสถานะที่สอดคล้องกันของฐานข้อมูลหลังจากความล้มเหลวของฮาร์ดแวร์และซอฟต์แวร์ประเภทใดก็ตาม แน่นอนว่าจำเป็นต้องมีข้อมูลเพิ่มเติมเพื่อทำการบูรณะ ใน DBMS เชิงสัมพันธ์สมัยใหม่ส่วนใหญ่ที่ล้นหลาม ข้อมูลเพิ่มเติมที่ซ้ำซ้อนดังกล่าวจะยังคงอยู่ในรูปแบบของบันทึกการเปลี่ยนแปลงฐานข้อมูล ซึ่งส่วนใหญ่มักเรียกว่า บันทึกการทำธุรกรรม

ดังนั้น เป้าหมายโดยรวมของการเปลี่ยนแปลงฐานข้อมูลการบันทึกคือเพื่อให้แน่ใจว่าฐานข้อมูลสามารถกู้คืนสู่สถานะที่สอดคล้องกันหลังจากเกิดความล้มเหลวใดๆ เนื่องจากพื้นฐานสำหรับการรักษาความสมบูรณ์ของฐานข้อมูลคือกลไกการทำธุรกรรม การบันทึกและการกู้คืนจึงมีความเกี่ยวข้องอย่างใกล้ชิดกับแนวคิดของธุรกรรม หลักการทั่วไปของการกู้คืนมีดังนี้:

· ผลลัพธ์ของธุรกรรมที่ตกลงไว้จะต้องถูกบันทึกในสถานะกู้คืนของฐานข้อมูล

· ผลลัพธ์ของการทำธุรกรรมที่ไม่ถูกผูกมัดจะต้องไม่อยู่ในสถานะกู้คืนของฐานข้อมูล

อันที่จริงแล้ว หมายความว่ากำลังกู้คืนสถานะที่สอดคล้องกันล่าสุดของฐานข้อมูล

สถานการณ์ต่อไปนี้เป็นไปได้ที่คุณต้องกู้คืนสถานะของฐานข้อมูล

· การย้อนกลับของธุรกรรมแต่ละรายการ การย้อนกลับนี้ควรใช้ในกรณีต่อไปนี้:

o สถานการณ์มาตรฐานสำหรับการย้อนกลับของธุรกรรมคือการเสร็จสิ้นอย่างชัดเจนด้วยคำสั่ง ROLLBACK

o การสิ้นสุดโปรแกรมแอปพลิเคชันที่ผิดปกติซึ่งเทียบเท่ากับการดำเนินการของคำสั่ง ROLLBACK ในทางตรรกะ แต่ทางกายภาพมีกลไกการดำเนินการที่แตกต่างกัน

o การบังคับย้อนกลับของธุรกรรมในกรณีที่เกิดการหยุดชะงักในการดำเนินการธุรกรรมแบบขนาน ในกรณีเช่นนี้ เพื่อทำลายการชะงักงัน ธุรกรรมนี้สามารถเลือกเป็น "เหยื่อ" และการดำเนินการโดยเคอร์เนล DBMS จะถูกบังคับให้ยุติ

· การกู้คืนหลังจากการสูญเสียเนื้อหาของ RAM อย่างกะทันหัน (ความล้มเหลวของซอฟต์) สถานการณ์นี้สามารถเกิดขึ้นได้ในกรณีต่อไปนี้:

o ในกรณีที่ไฟฟ้าดับฉุกเฉิน;

o ในกรณีที่ตัวประมวลผลล้มเหลวที่ไม่สามารถกู้คืนได้ (เช่น การทำงานของการควบคุม RAM) ฯลฯ สถานการณ์มีลักษณะเฉพาะโดยการสูญเสียส่วนหนึ่งของฐานข้อมูลที่มีอยู่ในบัฟเฟอร์ RAM ในขณะที่เกิดความล้มเหลว

· การกู้คืนจากการพังทลายของสื่อภายนอกหลักของฐานข้อมูล (ความล้มเหลวอย่างหนัก) สถานการณ์นี้เมื่อได้รับความน่าเชื่อถือสูงเพียงพอของอุปกรณ์หน่วยความจำภายนอกที่ทันสมัย ​​อาจเกิดขึ้นได้ค่อนข้างน้อย แต่ถึงกระนั้น DBMS ควรจะสามารถกู้คืนฐานข้อมูลได้แม้ในกรณีนี้ พื้นฐานของการกู้คืนคือสำเนาที่เก็บถาวรและบันทึกการเปลี่ยนแปลงฐานข้อมูล

เมื่อต้องการคืนค่าสถานะที่สอดคล้องกันของฐานข้อมูลเมื่อคุณย้อนกลับธุรกรรมแต่ละรายการ คุณต้องกำจัดผลกระทบของคำสั่งแก้ไขฐานข้อมูลที่ดำเนินการในธุรกรรมนั้น ในการกู้คืนสถานะที่สอดคล้องกันของฐานข้อมูลในกรณีที่ซอฟต์ล้มเหลว จำเป็นต้องกู้คืนเนื้อหาของฐานข้อมูลจากเนื้อหาของบันทึกธุรกรรมที่จัดเก็บไว้ในดิสก์ ในการกู้คืนสถานะที่สอดคล้องกันของฐานข้อมูลในกรณีที่เกิดความล้มเหลวอย่างหนัก จำเป็นต้องกู้คืนเนื้อหาของฐานข้อมูลจากสำเนาเก็บถาวรและบันทึกธุรกรรมที่จัดเก็บไว้ในสื่อภายนอกที่ไม่เสียหาย

ในทั้งสามกรณี การจัดเก็บข้อมูลซ้ำซ้อนเป็นพื้นฐานของการกู้คืน ข้อมูลที่ซ้ำซ้อนนี้ถูกเก็บไว้ในบันทึกที่มีลำดับของบันทึกการเปลี่ยนแปลงฐานข้อมูล

มีสองตัวเลือกหลักสำหรับการรักษาข้อมูลบันทึก ในตัวเลือกแรก บันทึกการเปลี่ยนแปลงฐานข้อมูลภายในเครื่องแยกต่างหากจะถูกเก็บรักษาไว้สำหรับแต่ละธุรกรรมโดยธุรกรรมนั้น บันทึกเหล่านี้เรียกว่าบันทึกในเครื่อง ใช้สำหรับการย้อนกลับของธุรกรรมแต่ละรายการ และสามารถรักษาไว้ในหน่วยความจำ RAM (ถูกต้องกว่าในหน่วยความจำเสมือน) นอกจากนี้ บันทึกการเปลี่ยนแปลงฐานข้อมูลทั่วไปจะยังคงอยู่ ซึ่งใช้ในการกู้คืนสถานะของฐานข้อมูลหลังจากความล้มเหลวแบบซอฟต์และฮาร์ด

วิธีนี้ช่วยให้คุณดำเนินการย้อนกลับธุรกรรมแต่ละรายการได้อย่างรวดเร็ว แต่ส่งผลให้เกิดข้อมูลที่ซ้ำกันในบันทึกในเครื่องและบันทึกที่แชร์ ดังนั้นตัวเลือกที่สองจึงถูกใช้บ่อยกว่า - รักษาเฉพาะบันทึกการเปลี่ยนแปลงฐานข้อมูลทั่วไปเท่านั้น ซึ่งใช้เมื่อทำการย้อนกลับแต่ละรายการ ต่อไป เราจะพิจารณาตัวเลือกนี้โดยเฉพาะ

โครงสร้างทั่วไปของบันทึกสามารถแสดงตามเงื่อนไขในรูปแบบของไฟล์ตามลำดับ ซึ่งบันทึกการเปลี่ยนแปลงทุกอย่างในฐานข้อมูลที่เกิดขึ้นระหว่างการดำเนินการของธุรกรรม ธุรกรรมทั้งหมดมีหมายเลขภายในของตัวเอง ดังนั้นการเปลี่ยนแปลงทั้งหมดที่ทำโดยธุรกรรมทั้งหมดจะถูกบันทึกไว้ในบันทึกธุรกรรมเดียว

แต่ละรายการในบันทึกธุรกรรมจะถูกทำเครื่องหมายด้วยจำนวนธุรกรรมที่เป็นของและค่าของแอตทริบิวต์ที่เปลี่ยนแปลง นอกจากนี้ สำหรับแต่ละธุรกรรม คำสั่งในการเริ่มต้นและสิ้นสุดธุรกรรมจะถูกบันทึกไว้ในบันทึก (ดูรูปที่ 11.3)

เพื่อความน่าเชื่อถือที่มากขึ้น บันทึกธุรกรรมมักจะถูกทำซ้ำโดยเครื่องมือระบบของ DBMS เชิงพาณิชย์ ซึ่งเป็นสาเหตุว่าทำไมจำนวนหน่วยความจำภายนอกจึงมากกว่าจำนวนข้อมูลจริงที่จัดเก็บไว้ในที่จัดเก็บข้อมูลหลายเท่า

มีสองทางเลือกสำหรับการบันทึกธุรกรรม: โปรโตคอลการอัปเดตที่รอการตัดบัญชีและโปรโตคอลการอัปเดตทันที

การบันทึกการเปลี่ยนแปลงที่รอดำเนินการจะใช้กลไกต่อไปนี้สำหรับการดำเนินการธุรกรรม:

1. เมื่อธุรกรรม T1 เริ่มต้น บันทึกจะถูกป้อนลงในโปรโตคอล

<Т1 Begin transaction>

2. ระหว่างการทำธุรกรรม ค่าใหม่จะถูกเขียนในโปรโตคอลสำหรับแต่ละเรคคอร์ดที่เปลี่ยนแปลง: ... ที่นี่ ID_RECORD เป็นหมายเลขบันทึกที่ไม่ซ้ำ

3. หากการดำเนินการทั้งหมดที่ประกอบขึ้นเป็นธุรกรรม T1 เสร็จสมบูรณ์ ธุรกรรมนั้นจะถูกบันทึกบางส่วนและเข้าสู่โปรโตคอล<Т1 СОММIТ>.

4. หลังจากทำธุรกรรมแล้ว บันทึกโปรโตคอลที่เกี่ยวข้องกับ T1 จะใช้เพื่อทำการเปลี่ยนแปลงที่เหมาะสมกับฐานข้อมูล

5. หากเกิดความล้มเหลว DBMS จะดูที่บันทึกและค้นหาว่าธุรกรรมใดจำเป็นต้องทำใหม่ ต้องทำซ้ำธุรกรรม T1 หากโปรโตคอลมีทั้งสองระเบียน<Т1 BEGIN TRANSACTION и <Т1 СОММIТ>... ฐานข้อมูลอาจอยู่ในสถานะไม่สอดคล้องกัน อย่างไรก็ตาม ค่าใหม่ทั้งหมดของรายการข้อมูลที่เปลี่ยนแปลงจะมีอยู่ในบันทึก และต้องมีการดำเนินการธุรกรรมใหม่ ด้วยเหตุนี้จึงใช้ขั้นตอนระบบบางอย่าง REDOQ ซึ่งจะแทนที่ค่าทั้งหมดของรายการข้อมูลด้วยค่าใหม่โดยดูที่โปรโตคอลในลำดับโดยตรง

6. หากโปรโตคอลไม่มีคำสั่งการคอมมิตธุรกรรม COMMIT ก็ไม่จำเป็นต้องดำเนินการใดๆ และธุรกรรมจะเริ่มต้นใหม่

ข้าว. 11.3.บันทึกการทำธุรกรรม

กลไกทางเลือกที่มีการดำเนินการทันทีทำให้สามารถทำการเปลี่ยนแปลงฐานข้อมูลได้ทันที ไม่เพียงแต่ใหม่ แต่ยังรวมถึงค่าเก่าทั้งหมดของแอตทริบิวต์ที่เปลี่ยนแปลงไปในโปรโตคอลด้วย ดังนั้นแต่ละระเบียนจึงมีลักษณะดังนี้<Т1, ID_RECORD, атрибут новое значение старое значение...>... ในกรณีนี้ การเขียนลงในบันทึกนำหน้าการดำเนินการโดยตรงของการดำเนินการบนฐานข้อมูล เมื่อทำธุรกรรมสำเร็จ นั่นคือ พบคำสั่ง<Т1 СОММIТ>และถูกดำเนินการ จากนั้นการเปลี่ยนแปลงทั้งหมดได้เกิดขึ้นแล้วในฐานข้อมูล และไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติมเกี่ยวกับธุรกรรมนี้

เมื่อธุรกรรมถูกย้อนกลับ กระบวนการระบบ UNDO () จะถูกดำเนินการ ซึ่งจะคืนค่าเก่าทั้งหมดในธุรกรรมที่ถูกยกเลิก ดำเนินการตามลำดับผ่านโปรโตคอลที่เริ่มต้นด้วยคำสั่ง BEGIN TRANSACTION

กลไกต่อไปนี้ใช้สำหรับเฟลโอเวอร์:

· หากธุรกรรมมีคำสั่งให้เริ่มธุรกรรม แต่ไม่มีคำสั่ง commit พร้อมการยืนยันการดำเนินการ ลำดับของการดำเนินการจะดำเนินการเหมือนกับเมื่อธุรกรรมถูกย้อนกลับ นั่นคือ ค่าเก่าจะถูกกู้คืน .

· หากความล้มเหลวเกิดขึ้นหลังจากดำเนินการคำสั่งการเปลี่ยนแปลงฐานข้อมูลล่าสุด แต่ก่อนที่จะดำเนินการคำสั่ง commit คำสั่ง commit จะถูกดำเนินการ และไม่มีการเปลี่ยนแปลงใดๆ กับฐานข้อมูล งานเกิดขึ้นที่ระดับโปรโตคอลเท่านั้น

· อย่างไรก็ตาม ควรสังเกตว่าปัญหาการกู้คืนดูซับซ้อนกว่าอัลกอริธึมที่ให้ไว้ก่อนหน้านี้มาก เนื่องจากการเปลี่ยนแปลงทั้งบันทึกและฐานข้อมูลจะไม่ถูกบันทึกในทันที แต่จะถูกบัฟเฟอร์ ส่วนต่อไปจะทุ่มเทให้กับสิ่งนี้

การบันทึกและการบัฟเฟอร์

การบันทึกการเปลี่ยนแปลงนั้นเกี่ยวข้องอย่างใกล้ชิดไม่เพียงกับการจัดการธุรกรรม แต่ยังรวมถึงการบัฟเฟอร์หน้าฐานข้อมูลในหน่วยความจำด้วย

หากบันทึกการเปลี่ยนแปลงฐานข้อมูล ซึ่งควรไปที่บันทึกสำหรับการดำเนินการแก้ไขฐานข้อมูล จริง ๆ แล้วเขียนไปยังหน่วยความจำภายนอกทันที จะทำให้ระบบช้าลงอย่างมาก ดังนั้น เร็กคอร์ดบันทึกจึงถูกบัฟเฟอร์ด้วย: ระหว่างการทำงานปกติ เพจถัดไปจะถูกผลักเข้าไปในหน่วยความจำภายนอกของบันทึกเฉพาะเมื่อมีเร็กคอร์ดเต็มเท่านั้น

ความท้าทายคือการออกแบบนโยบายผลักดันทั่วไปบางอย่างเพื่อให้แน่ใจว่าฐานข้อมูลสามารถกู้คืนจากความผิดพลาดได้

ปัญหาไม่ได้เกิดขึ้นกับการย้อนกลับของธุรกรรมแต่ละรายการ เนื่องจากในกรณีเหล่านี้ เนื้อหาของหน่วยความจำหลักจะไม่สูญหาย และสามารถใช้เนื้อหาของทั้งบัฟเฟอร์บันทึกและบัฟเฟอร์หน้าของฐานข้อมูลได้ อย่างไรก็ตาม หากเกิดความล้มเหลวแบบซอฟต์ขึ้นและเนื้อหาของบัฟเฟอร์สูญหาย คุณต้องมีสถานะบันทึกและฐานข้อมูลที่สอดคล้องกันในหน่วยความจำภายนอกเพื่อกู้คืนฐานข้อมูล

หลักการพื้นฐานของนโยบายที่สอดคล้องกันสำหรับ popping ล็อกบัฟเฟอร์และบัฟเฟอร์หน้าฐานข้อมูลคือ การเปลี่ยนแปลงไปยังอ็อบเจ็กต์ฐานข้อมูลต้องถูกเขียนไปยังหน่วยความจำบันทึกภายนอก ก่อนที่อ็อบเจ็กต์ที่แก้ไขจะอยู่ในหน่วยความจำฐานข้อมูลภายนอก โปรโตคอลการบันทึก (และการจัดการบัฟเฟอร์) ที่สอดคล้องกันเรียกว่า Write Ahead Log (WAL) - "เขียนลงในบันทึกก่อน" และประกอบด้วยข้อเท็จจริงที่ว่าหากคุณต้องการเขียนวัตถุฐานข้อมูลที่แก้ไขไปยังหน่วยความจำภายนอก คุณต้องแน่ใจว่า บันทึกธุรกรรมถูกเขียนลงในบันทึกหน่วยความจำภายนอกของการเปลี่ยนแปลง

กล่าวอีกนัยหนึ่ง หากมีวัตถุฐานข้อมูลบางอย่างในหน่วยความจำภายนอกของฐานข้อมูล ซึ่งสัมพันธ์กับการดำเนินการแก้ไข จากนั้นในหน่วยความจำภายนอกของบันทึก จำเป็นต้องมีบันทึกที่สอดคล้องกับการดำเนินการนี้ สิ่งที่ตรงกันข้ามไม่เป็นความจริง นั่นคือ หากหน่วยความจำภายนอกของบันทึกมีบันทึกเกี่ยวกับการดำเนินการบางอย่างในการเปลี่ยนวัตถุฐานข้อมูล วัตถุที่เปลี่ยนแปลงนั้นอาจไม่ปรากฏในหน่วยความจำภายนอกของฐานข้อมูล

เงื่อนไขเพิ่มเติมสำหรับการพุชบัฟเฟอร์ถูกกำหนดโดยความต้องการที่แต่ละธุรกรรมที่เสร็จสมบูรณ์จะต้องถูกกำหนดให้กับหน่วยความจำภายนอก ไม่ว่าความล้มเหลวใดจะเกิดขึ้น ระบบจะต้องสามารถกู้คืนสถานะฐานข้อมูลที่มีผลลัพธ์ของธุรกรรมทั้งหมดที่กระทำในขณะที่เกิดความล้มเหลว

วิธีแก้ปัญหาอย่างง่ายคือป๊อปบัฟเฟอร์บันทึกตามด้วยป๊อปอัปจำนวนมากของบัฟเฟอร์หน้าฐานข้อมูลที่แก้ไขโดยธุรกรรม สิ่งนี้ทำค่อนข้างบ่อย แต่จะทำให้เกิดโอเวอร์เฮดที่สำคัญเมื่อดำเนินการกระทำการคอมมิต

ปรากฎว่าข้อกำหนดขั้นต่ำเพื่อให้แน่ใจว่าสามารถกู้คืนสถานะที่สอดคล้องกันสุดท้ายของฐานข้อมูลได้คือเมื่อมีการทำธุรกรรม ระเบียนการเปลี่ยนแปลงฐานข้อมูลทั้งหมดโดยธุรกรรมนี้จะถูกผลักเข้าไปในหน่วยความจำภายนอกของบันทึก ในกรณีนี้ บันทึกสุดท้ายในบันทึกที่ทำในนามของธุรกรรมนี้เป็นบันทึกพิเศษเกี่ยวกับการสิ้นสุดธุรกรรม

ตอนนี้ มาดูกันว่าคุณสามารถดำเนินการกู้คืนฐานข้อมูลได้อย่างไรในสถานการณ์ต่างๆ หากระบบรักษาบันทึกทั่วไปที่บัฟเฟอร์สำหรับธุรกรรมทั้งหมด และได้รับการดูแลตามโปรโตคอล WAL

การย้อนกลับของธุรกรรมแต่ละรายการ

เพื่อให้สามารถดำเนินการย้อนกลับธุรกรรมแต่ละรายการในบันทึกทั่วไป เร็กคอร์ดบันทึกทั้งหมดสำหรับธุรกรรมนี้จะถูกเชื่อมโยงในรายการย้อนกลับ ด้านบนของรายการสำหรับธุรกรรมที่ล้มเหลวคือการเปลี่ยนแปลงฐานข้อมูลล่าสุดที่ทำโดยธุรกรรมนี้ สำหรับธุรกรรมที่เสร็จสมบูรณ์ (การย้อนกลับแต่ละรายการซึ่งเป็นไปไม่ได้อีกต่อไป) จุดเริ่มต้นของรายการคือบันทึกการสิ้นสุดของธุรกรรมซึ่งจำเป็นต้องผลักเข้าไปในหน่วยความจำภายนอกของบันทึก การสิ้นสุดของรายการเป็นอันดับแรกเสมอ บันทึกการเปลี่ยนแปลงฐานข้อมูลที่ทำโดยธุรกรรมนี้ โดยปกติ แต่ละเร็กคอร์ดจะได้รับการกำหนดรหัสธุรกรรมที่ไม่ซ้ำกัน เพื่อให้สามารถกู้คืนรายการโดยตรงของเรกคอร์ดการเปลี่ยนแปลงฐานข้อมูลโดยธุรกรรมที่กำหนด

ดังนั้น การย้อนกลับของธุรกรรมแต่ละรายการ (เราเน้นย้ำอีกครั้งว่าสิ่งนี้เป็นไปได้เฉพาะสำหรับธุรกรรมที่ไม่มีข้อผูกมัด) จะดำเนินการดังนี้:

· บันทึกถัดไปจะถูกเลือกจากรายการธุรกรรมนี้

· การดำเนินการตรงข้ามจะดำเนินการ: แทนที่จะดำเนินการ INSERT การดำเนินการ DELETE ที่สอดคล้องกันจะดำเนินการ การดำเนินการ INSERT จะดำเนินการแทนการดำเนินการ DELETE และแทนที่จะดำเนินการ UPDATE โดยตรง การดำเนินการ UPDATE แบบผกผันจะกู้คืนสถานะก่อนหน้าของฐานข้อมูล วัตถุ.

· การดำเนินการย้อนกลับเหล่านี้จะถูกบันทึกไว้ด้วย อันที่จริง สิ่งนี้ไม่จำเป็นสำหรับการย้อนกลับแต่ละครั้ง แต่เมื่อทำการย้อนกลับของธุรกรรมแต่ละรายการ อาจเกิดความล้มเหลวแบบซอฟต์ขึ้น เมื่อมีการกู้คืนซึ่งจำเป็นต้องย้อนกลับธุรกรรมที่การย้อนกลับแต่ละรายการยังไม่เสร็จสมบูรณ์

· หากการย้อนกลับเสร็จสมบูรณ์ บันทึกการสิ้นสุดของธุรกรรมจะถูกเขียนลงในบันทึก จากมุมมองของบันทึก ธุรกรรมดังกล่าวมีความมุ่งมั่น

การกู้คืนจากความล้มเหลวที่อ่อนนุ่ม

ปัญหาสำคัญประการหนึ่งในการกู้คืนจากความล้มเหลวของซอฟต์คือการดำเนินการเปลี่ยนฐานข้อมูลแบบลอจิคัลเดียวสามารถแก้ไขบล็อกฐานข้อมูลจริงได้หลายบล็อก เช่น เพจข้อมูลและหน้าดัชนีหลายหน้า หน้าฐานข้อมูลถูกบัฟเฟอร์ใน RAM และแตกออกอย่างอิสระ แม้จะมีการใช้โปรโตคอล WAL หลังจากซอฟต์ล้มเหลว ชุดของเพจในหน่วยความจำภายนอกของฐานข้อมูลอาจกลายเป็นไม่สอดคล้องกัน นั่นคือ หน้าหน่วยความจำภายนอกบางหน้าสอดคล้องกับวัตถุก่อนการเปลี่ยนแปลง และบางส่วน - หลังการเปลี่ยนแปลง การดำเนินการของระดับตรรกะไม่สามารถใช้ได้กับสถานะของอ็อบเจ็กต์นี้

สถานะของหน่วยความจำภายนอกของฐานข้อมูลเรียกว่า ความสอดคล้องทางกายภาพ ถ้าชุดเพจของออบเจกต์ทั้งหมดมีความสอดคล้องกัน กล่าวคือ จะสอดคล้องกับสถานะของออบเจกต์ไม่ว่าจะก่อนการเปลี่ยนแปลงหรือหลังจากที่มีการเปลี่ยนแปลง

เราจะถือว่าบันทึกเป็นจุดของความสอดคล้องทางกายภาพของฐานข้อมูล - ช่วงเวลาที่หน่วยความจำภายนอกประกอบด้วยผลลัพธ์ที่สอดคล้องกันของการดำเนินการที่เสร็จสิ้นก่อนจุดที่สอดคล้องกันในเวลาและไม่มีผลลัพธ์ของการดำเนินการที่มี ไม่เสร็จสมบูรณ์ และบัฟเฟอร์บันทึกถูกผลักเข้าไปในหน่วยความจำภายนอก เราจะมาดูกันว่าเราจะบรรลุความสม่ำเสมอทางกายภาพได้อย่างไรในภายหลัง เรียกว่าจุดดังกล่าว tpc (เวลาของความสอดคล้องทางกายภาพ) - จุดของข้อตกลงทางกายภาพ

จากนั้น เมื่อเกิดความล้มเหลวแบบนุ่มนวล สถานะธุรกรรมต่อไปนี้จะเป็นไปได้:

· ธุรกรรมเสร็จสมบูรณ์แล้ว นั่นคือ การดำเนินการของธุรกรรม COMMIT ได้รับการยืนยัน และสำหรับการดำเนินการทั้งหมดของธุรกรรมนั้น ได้รับการยืนยันการดำเนินการในหน่วยความจำภายนอก

· ธุรกรรมเสร็จสมบูรณ์แล้ว แต่ยังไม่ได้รับการยืนยันการดำเนินการบางอย่างในหน่วยความจำภายนอก

· ธุรกรรมที่ได้รับและดำเนินการคำสั่ง ROLLBACK

· การทำธุรกรรมยังไม่เสร็จสมบูรณ์

ความสอดคล้องของฐานข้อมูลทางกายภาพ

คุณจะมั่นใจได้อย่างไรว่ามีจุดที่มีความสอดคล้องทางกายภาพในฐานข้อมูล นั่นคือ วิธีการคืนค่าสถานะของฐานข้อมูล ณ เวลาของ tpc มีสองวิธีหลักที่ใช้ในการทำเช่นนี้: แนวทางที่ใช้เงาและแนวทางที่ใช้การบันทึกการเปลี่ยนแปลงฐานข้อมูลแบบหน้าต่อหน้า

เมื่อเปิดไฟล์ ตารางสำหรับการแมปหมายเลขของบล็อกลอจิคัลกับที่อยู่ของบล็อกทางกายภาพของหน่วยความจำภายนอกจะถูกอ่านลงใน RAM เมื่อมีการแก้ไขบล็อกของไฟล์ บล็อกใหม่จะได้รับการจัดสรรในหน่วยความจำภายนอก ในกรณีนี้ ตารางการแมปปัจจุบัน (ใน RAM) จะเปลี่ยนไป และตารางเงาจะไม่เปลี่ยนแปลง หากเกิดความล้มเหลวขณะทำงานกับไฟล์ที่เปิดอยู่ สถานะของไฟล์ก่อนที่จะเปิดจะถูกบันทึกลงในหน่วยความจำภายนอกโดยอัตโนมัติ ในการกู้คืนไฟล์อย่างชัดเจน การอ่านตารางการแมปเงาใน RAM อีกครั้งก็เพียงพอแล้ว

แนวคิดทั่วไปของกลไกเงาแสดงไว้ในรูปที่ 11.4.

ข้าว. 11.4.การใช้ตารางแสดงเงา

ในบริบทของฐานข้อมูล กลไกเงาถูกใช้ดังนี้ จุดตรวจจะดำเนินการเป็นระยะ เมื่อต้องการทำเช่นนี้ การดำเนินการทางตรรกะทั้งหมดจะเสร็จสมบูรณ์ บัฟเฟอร์ทั้งหมดของหน่วยความจำหลัก ซึ่งเนื้อหาไม่ตรงกับเนื้อหาของหน้าที่เกี่ยวข้องของหน่วยความจำภายนอก จะถูกผลักออก ตารางเงาสำหรับไฟล์ฐานข้อมูลการแมปถูกแทนที่ด้วยตารางปัจจุบัน

การกู้คืนไปยัง tpc ทำได้ในทันที: ตารางการแมปปัจจุบันจะถูกแทนที่ด้วยตารางเงา (ระหว่างการกู้คืน ตารางการแมปเงาจะถูกอ่านอย่างง่าย) ปัญหาการกู้คืนทั้งหมดได้รับการแก้ไขแล้ว แต่ต้องใช้หน่วยความจำภายนอกมากเกินไป เมื่อถึงขีดจำกัด คุณอาจต้องใช้หน่วยความจำภายนอกมากเป็นสองเท่าของที่จำเป็นในการจัดเก็บฐานข้อมูลจริงๆ กลไกเงาเป็นเครื่องมือที่เชื่อถือได้แต่หยาบเกินไป สถานะหน่วยความจำภายนอกที่สอดคล้องกันมีให้ที่จุดเวลาเดียวกับวัตถุทั้งหมด อันที่จริง ก็เพียงพอแล้วที่จะมีชุดของหน้าที่สอดคล้องกัน ซึ่งแต่ละหน้าสามารถสอดคล้องกับตัวอย่างเวลาของตัวเองได้

เพื่อตอบสนองความต้องการที่อ่อนแอกว่านั้น พร้อมกับการบันทึกเชิงตรรกะของการดำเนินการเปลี่ยนฐานข้อมูล การเปลี่ยนแปลงทีละหน้าจะถูกบันทึก ขั้นตอนแรกในการกู้คืนจากความล้มเหลวแบบซอฟต์คือการย้อนกลับการดำเนินการทางลอจิคัลที่ล้มเหลวทีละหน้า เช่นเดียวกับที่ทำกับเร็กคอร์ดแบบลอจิคัลที่เกี่ยวกับธุรกรรม เร็กคอร์ดการเปลี่ยนแปลงที่ทำเพจล่าสุดจากการดำเนินการทางลอจิคัลเดียวคือการสิ้นสุดของการดำเนินการ

มีสองวิธีในการแก้ปัญหาในแนวทางนี้ วิธีแรกรักษาบันทึกทั่วไปของการดำเนินการทางตรรกะและการจัดการเพจ โดยธรรมชาติ การมีอยู่ของเรคคอร์ดสองประเภท ซึ่งตีความในรูปแบบที่แตกต่างกันโดยสิ้นเชิง ทำให้โครงสร้างของวารสารซับซ้อน นอกจากนี้ บันทึกการเปลี่ยนแปลงทีละหน้า ซึ่งมีความเกี่ยวข้องซึ่งมีลักษณะเฉพาะในท้องถิ่น ทำให้วารสารเพิ่มขึ้นอย่างมีนัยสำคัญ (และไม่มีความหมายมากนัก)

ดังนั้นจึงเป็นที่นิยมมากขึ้นเรื่อย ๆ ในการรักษาบันทึกย่อ (สั้น) ของการเปลี่ยนแปลงเพจ เทคนิคนี้ใช้ตัวอย่างเช่นในผลิตภัณฑ์ Informix Online ที่มีชื่อเสียง

สมมติว่ามีความเป็นไปได้ที่จะกู้คืนหน่วยความจำภายนอกของฐานข้อมูลเป็นสถานะ ณ จุดเวลา tpc (วิธีนี้สามารถทำได้ - ในภายหลัง) แล้ว:

· ไม่ต้องดำเนินการใดๆ สำหรับธุรกรรม T1 มันสิ้นสุดก่อน tpc และผลลัพธ์ทั้งหมดจะสะท้อนให้เห็นในหน่วยความจำภายนอกของฐานข้อมูล

· สำหรับธุรกรรม T2 คุณต้องดำเนินการส่วนที่เหลืออีกครั้ง (ทำซ้ำ) แน่นอน ในหน่วยความจำภายนอกไม่มีร่องรอยของการดำเนินการใด ๆ ที่ทำในธุรกรรม T2 หลังจากช่วงเวลา tpc เลย ดังนั้น การตีความการดำเนินการ T2 ใหม่โดยตรงจึงถูกต้อง และจะนำไปสู่สถานะที่สอดคล้องกันทางตรรกะของฐานข้อมูล (เนื่องจากธุรกรรม T2 เสร็จสมบูรณ์ก่อนเกิดความล้มเหลวแบบนุ่มนวล บันทึกจะมีบันทึกการเปลี่ยนแปลงทั้งหมดที่ทำโดยธุรกรรมนี้)

· สำหรับธุรกรรม TK ส่วนแรกของการดำเนินการ (เลิกทำ) จะต้องดำเนินการในทิศทางตรงกันข้าม ในหน่วยความจำภายนอกของฐานข้อมูล ผลลัพธ์ของการดำเนินการ TK ที่ดำเนินการหลังจากช่วงเวลา tpc นั้นหายไปโดยสมบูรณ์ ในทางกลับกัน หน่วยความจำภายนอกรับประกันว่าจะมีผลลัพธ์ของการดำเนินการ TK ที่ดำเนินการก่อน tpc ดังนั้นการตีความย้อนกลับของการดำเนินการ TK นั้นถูกต้องและจะนำไปสู่สถานะที่สอดคล้องกันของฐานข้อมูล (เนื่องจากธุรกรรม TK ไม่เสร็จสมบูรณ์ในช่วงเวลาของความล้มเหลวเล็กน้อย ในระหว่างการกู้คืน จำเป็นต้องรักษาผลที่ตามมาทั้งหมดของการดำเนินการ ).

· สำหรับธุรกรรม T4 ที่เริ่มต้นหลังจาก tpc และสิ้นสุดก่อนเกิดความล้มเหลวแบบซอฟต์ ควรทำการทำซ้ำโดยสมบูรณ์

สุดท้าย ไม่จำเป็นต้องดำเนินการใดๆ สำหรับธุรกรรม T5 ที่เริ่มต้นหลังจากช่วงเวลา tpc และไม่มีเวลาดำเนินการให้เสร็จสิ้นภายในเวลาที่ซอฟต์ล้มเหลว ผลลัพธ์ของธุรกรรมนี้หายไปจากหน่วยความจำภายนอกของฐานข้อมูลอย่างสมบูรณ์

ฟื้นตัวจากการชนอย่างหนัก

เป็นที่ชัดเจนว่าบันทึกการเปลี่ยนแปลงฐานข้อมูลไม่เพียงพอที่จะกู้คืนฐานข้อมูลเป็นสถานะที่สอดคล้องกันล่าสุดหลังจากเกิดความล้มเหลวอย่างหนัก ในกรณีนี้ พื้นฐานของการกู้คืนคือบันทึกและสำเนาสำรองของฐานข้อมูล

การกู้คืนเริ่มต้นด้วยการคัดลอกฐานข้อมูลกลับจากสำเนาที่เก็บถาวร จากนั้นจะมีการทำซ้ำสำหรับธุรกรรมที่เสร็จสมบูรณ์ทั้งหมด กล่าวคือ การดำเนินการจะถูกดำเนินการอีกครั้งในลำดับการส่งต่อ

แม่นยำยิ่งขึ้นสิ่งต่อไปนี้เกิดขึ้น:

· การดำเนินการทั้งหมดจะดำเนินการตามบันทึกในทิศทางไปข้างหน้า

· สำหรับธุรกรรมที่ยังไม่เสร็จสิ้นภายในเวลาที่เกิดความล้มเหลว จะทำการย้อนกลับ

อันที่จริง เนื่องจากความล้มเหลวอย่างหนักไม่ได้ส่งผลให้บัฟเฟอร์ RAM สูญหาย จึงเป็นไปได้ที่จะกู้คืนฐานข้อมูลให้อยู่ในระดับที่แม้แต่ธุรกรรมที่ล้มเหลวก็สามารถดำเนินต่อไปได้ แต่สิ่งนี้มักจะไม่ทำเพราะการกู้คืนจากความผิดพลาดอย่างหนักนั้นเป็นกระบวนการที่ค่อนข้างยาว

แม้ว่าจะมีข้อกำหนดพิเศษสำหรับการบันทึกในแง่ของความน่าเชื่อถือ แต่โดยหลักการแล้วอาจสูญหายได้ วิธีเดียวที่จะกู้คืนฐานข้อมูลคือเปลี่ยนกลับเป็นสำเนาที่เก็บถาวร แน่นอน ในกรณีนี้ คุณจะไม่สามารถรับสถานะล่าสุดของฐานข้อมูลที่สอดคล้องกันได้ แต่สิ่งนี้ดีกว่าไม่มีอะไรเลย

ปัญหาสุดท้ายที่เราจะพิจารณาโดยสังเขปเกี่ยวกับการสำรองข้อมูลฐานข้อมูลโดยสังเขป วิธีที่ง่ายที่สุดคือเก็บถาวรฐานข้อมูลเมื่อบันทึกเต็ม มีการแนะนำ "โซนสีเหลือง" ในบันทึกเมื่อถึงซึ่งการก่อตัวของธุรกรรมใหม่จะถูกบล็อกชั่วคราว เมื่อธุรกรรมทั้งหมดเสร็จสมบูรณ์ ดังนั้น ฐานข้อมูลจึงอยู่ในสถานะที่สอดคล้องกัน คุณสามารถเก็บถาวรได้ จากนั้นจึงเริ่มกรอกบันทึกอีกครั้ง

คุณสามารถสำรองฐานข้อมูลได้น้อยกว่าที่บันทึกจะเต็ม หากบันทึกเต็มและธุรกรรมที่เริ่มต้นทั้งหมดสิ้นสุดแล้ว คุณสามารถเก็บบันทึกถาวรได้ เนื่องจากบันทึกที่เก็บถาวรนั้นจำเป็นอย่างยิ่งในการสร้างสำเนาที่เก็บถาวรของฐานข้อมูลขึ้นใหม่ ข้อมูลบันทึกที่เก็บถาวรจึงสามารถบีบอัดได้อย่างมาก

ทุกครั้งที่ใช้บัตรธนาคารเพื่อชำระค่าสินค้า ถอนเงิน หรือโอนเงิน ลูกค้าของธนาคารจะทำธุรกรรมบางอย่าง และแม้ว่าธุรกรรมทั้งหมดจะใช้เวลาเพียงไม่กี่นาที แต่วงจรของการดำเนินการทั้งหมดนั้นเป็นกระบวนการที่ค่อนข้างครอบคลุม ซึ่งรวมถึงการส่งคำขอถอนเงิน ดำเนินการและดำเนินการ

ธุรกรรมคือการดำเนินการใดๆ กับบัตรธนาคาร ซึ่งการดำเนินการดังกล่าวจะนำไปสู่การเปลี่ยนแปลงในสถานะบัญชีของลูกค้า การทำธุรกรรมสามารถทำได้แบบเรียลไทม์ (ออนไลน์) และออฟไลน์

การทำธุรกรรมออนไลน์จำเป็นต้องมีการยืนยันการชำระเงินในขณะที่ทำการชำระเงินหรือโอนเงิน

ธุรกรรมออนไลน์รวมถึงการโอนเงินระหว่างบัตร การถอนเงินสดที่ตู้เอทีเอ็ม การชำระบัญชีในร้านค้าปลีกและร้านค้า พิจารณาขั้นตอนการทำธุรกรรมออนไลน์โดยใช้ตัวอย่างการชำระค่าสินค้าในศูนย์การค้า

มีสามฝ่ายที่เกี่ยวข้องในการดำเนินการ:

  • ธนาคารที่รับบริการร้านค้าที่เลือก (เป็นเครื่อง POS ที่ติดตั้งในร้านค้า)
  • ธนาคารผู้ออกบัตรที่ชำระเงินด้วยบัตรธนาคาร
  • ระบบการชำระเงินระหว่างประเทศซึ่งเป็นตัวกลางในการทำธุรกรรมการชำระบัญชี (Visa, MasterCard เป็นต้น)

คำสั่งธุรกรรมออนไลน์

ธุรกรรมการชำระเงินเริ่มต้นจากช่วงเวลาที่บัตรชำระเงินถูกส่งไปยังแคชเชียร์ และเครื่อง POS อ่านข้อมูลที่จำเป็นสำหรับการชำระเงิน (หมายเลขบัตร ระยะเวลาที่มีผลบังคับใช้ ชื่อเจ้าของ และข้อมูลอื่นๆ ที่เข้ารหัสบนเทปแม่เหล็ก) ข้อมูลที่อ่านจะถูกโอนไปยังธนาคารที่ให้บริการเทอร์มินัล POS (ตามกฎแล้ว ร้านค้าจะสรุปข้อตกลงพิเศษสำหรับบริการเทอร์มินัล ตามค่าคอมมิชชั่นที่เรียกเก็บสำหรับแต่ละธุรกรรม)

ข้อมูลที่ได้รับจะถูกส่งโดยธนาคารที่รับข้อมูลไปยังศูนย์ประมวลผลข้อมูล (DPC) ของระบบการชำระเงินระหว่างประเทศที่ให้บริการบัตร

ศูนย์ข้อมูลจะตรวจสอบว่ามีหรือไม่มีบัตรชำระเงินในรายการหยุด (บัตรที่สงสัยว่ามีการฉ้อโกงอาจปรากฏในรายการหยุด) ซึ่งเป็นผลมาจากการดำเนินการได้รับการอนุมัติหรือปฏิเสธ

หลังจากนั้นข้อมูลจะถูกโอนไปยังศูนย์ประมวลผลของธนาคารผู้ออกซึ่งการชำระเงินได้รับการอนุมัติ ที่นี่ ธุรกรรมได้รับการตรวจสอบความถูกต้องตามกฎหมาย: ตรวจสอบว่ามีเงินเพียงพอสำหรับการทำธุรกรรมหรือไม่ และตรวจสอบว่ารหัส PIN ที่ป้อนตรงกับมูลค่าจริงหรือไม่ นอกจากนี้ การตรวจสอบจะดำเนินการเกินขีดจำกัดที่กำหนดไว้สำหรับการดำเนินการ

คำตอบของธนาคารผู้ออกบัตรจะถูกส่งคืนผ่านศูนย์ข้อมูล ไปยังธนาคารที่ซื้อกิจการและร้านค้า รายละเอียดการชำระเงินจะแสดงบนเช็คซึ่งโอนไปยังผู้ซื้อ

คุณสมบัติของการทำธุรกรรมออนไลน์และออฟไลน์

การดำเนินการที่พิจารณาเมื่อทำธุรกรรมออนไลน์ทำให้การโต้ตอบระหว่างผู้ซื้อและร้านค้าเสร็จสมบูรณ์ แต่กระบวนการธุรกรรมไม่ได้สิ้นสุดเพียงแค่นั้น ความจริงก็คือเงินจะไม่ถูกหักจากบัตรทันที: มันถูกบล็อกชั่วคราว เงินจะถูกโอนไปยังร้านค้าจากบัญชีของผู้ซื้อและจะถูกหักจากบัตรหลังจากที่ธนาคารที่รับโอนเอกสารทางการเงินไปยังผู้ออกเพื่อหักเงินเท่านั้น สิ่งนี้สามารถเกิดขึ้นได้ในช่วงหลายวันหรือหนึ่งเดือน

การทำธุรกรรมออฟไลน์จะดำเนินการตามหลักการที่แตกต่างกัน พวกเขาผ่านโดยไม่มีการดำเนินการตรวจสอบโดยฝ่ายระยะไกลและการอนุมัติหรือการปฏิเสธ ธุรกรรมได้รับการอนุมัติล่วงหน้า ยอดคงเหลือในบัตรธนาคารถูกสงวนไว้ และรายละเอียดการชำระเงินทั้งหมดจะถูกบันทึกไว้ในหน่วยความจำของเทอร์มินัลการชำระเงิน

ธุรกรรมออฟไลน์จะดำเนินการในภายหลัง เมื่อข้อมูลที่สะสมในเครื่องปลายทางถูกส่งผ่านช่องทางการสื่อสารไปยังธนาคารที่ให้บริการ โดยปกติจะใช้เวลาหลายวันนับจากช่วงเวลาที่ขอชำระเงินไปยังการชำระเงินจริง

ธุรกรรมออฟไลน์จะใช้ในกรณีที่ไม่สามารถเชื่อมต่อกับศูนย์ประมวลผลแบบเรียลไทม์ได้ (บนเครื่องบิน รถประจำทาง แท็กซี่ ฯลฯ)

การห้ามและยกเลิกการทำธุรกรรม

ธุรกรรมที่พบบ่อยที่สุดคือการชำระเงินในร้าน การโอนเงิน และการถอนเงินสด มีสาเหตุหลายประการที่ทำให้ไม่สามารถทำธุรกรรมได้

ที่พบบ่อยที่สุดคือ:

  • บัตรธนาคารถูกบล็อก
  • มีเงินไม่เพียงพอในบัตรธนาคารที่จำเป็นในการดำเนินการให้เสร็จสิ้น
  • บัตรชำระเงินได้กำหนดข้อจำกัดในการชำระเงิน
  • บัตรชำระเงินหมดอายุ
  • เกิดข้อผิดพลาดเมื่อป้อนรหัส PIN
  • บัตรธนาคารรวมอยู่ในรายการหยุดสงสัยว่ามีการฟอกเงิน การฉ้อโกง ฯลฯ
  • มีปัญหาทางเทคนิค (บนเว็บไซต์ กับตู้เอทีเอ็ม ฯลฯ)

หากการห้ามทำธุรกรรมไม่เกี่ยวข้องกับยอดเงินในบัตรไม่เพียงพอ คุณต้องติดต่อธนาคารที่ให้บริการเพื่อแก้ไขปัญหา ในบางกรณี ธุรกรรมสามารถยกเลิกได้ตามความคิดริเริ่มของลูกค้าเอง (แน่นอนว่าถ้าเราไม่ได้พูดถึงการถอนเงินสด) คุณจำเป็นต้องรู้เกี่ยวกับความเป็นไปได้ของการยกเลิกธุรกรรมเพื่อให้สามารถคืนเงินที่หักจากบัตรโดยฉ้อฉลได้

วิธีที่ง่ายที่สุดคือการยกเลิกธุรกรรมในวันที่ดำเนินการ

ฟังก์ชันการยกเลิกการดำเนินการอยู่ในเทอร์มินัลเอง

หากข้อมูลจากเครื่องปลายทางถูกโอนไปยังธนาคารแล้ว คุณควรติดต่อสถาบันการเงินเอง