Oracle จัดการกับหลาย ๆ INSERTs พร้อมกันอย่างไรในหนึ่งตาราง


8

ฉันพยายามทำความเข้าใจ Oracle 11g ให้ละเอียดยิ่งขึ้น คำถามของฉันง่าย: Oracle จัดการกับสองช่วงที่พยายามแทรกระเบียนลงในตารางเดียวในเวลาเดียวกันได้อย่างไร

ตัวอย่างเช่น INSERT A ทำงานเวลา 13.00 น. เทียบกับตารางที่ 1 จะใช้เวลา 5 นาทีจึงจะเสร็จสมบูรณ์ INSERT B จะดำเนินการเวลา 1:02 PM เทียบกับตารางที่ 1 จะใช้เวลา 1 นาทีจึงจะเสร็จสมบูรณ์

อะไรจะเกิดขึ้น? Oracle จะจัดคิว INSERT B ให้ทำงานหลังจาก INSERT A เสร็จสิ้นหรือไม่ INSERT B จะทำงานพร้อมกันกับ INSERT A หรือไม่

ขอบคุณ!


6
ไม่มีอะไรเต้นลองด้วยตัวคุณเองเพื่อดู :-)
แจ็คบอกลอง topanswers.xyz

อย่างแน่นอน อย่างไรก็ตามฉันไม่แน่ใจว่าจะสร้างคำค้นหาที่จะใช้เวลา 5 นาทีโดยเจตนาอย่างไร
ดัสติน

3
แทรกข้อมูลจำนวนมากหรือไม่ insert into foo(id) select level from dual connect by level<1000000(เพิ่มจำนวนศูนย์หนึ่งครั้งจนกว่ามันจะช้าพอ)
แจ็คบอกว่าลอง topanswers.xyz

คำตอบ:


4

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

ในแง่ที่พวกเขาทำงานบนตารางปราศจากข้อผูกมัดตามที่เห็นในเซสชั่นของพวกเขา พฤติกรรมนี้อธิบายไว้ในโพสต์สแต็คโอเวอร์โฟลว์ด้านล่าง

/programming/3194999/dml-by-multiple-users-commit-scenarios-in-oracle


2

อาจเป็นประโยชน์ที่จะดูการจัดการธุรกรรม Oracle (แนวคิด) หรือ การประมวลผล SQL สำหรับผู้พัฒนาแอปพลิเคชัน (คู่มือนักพัฒนาแอปพลิเคชันขั้นสูง)

คุณสามารถตรวจสอบพฤติกรรมของ oracle ได้โดยเปิดเซสชันด้วย sqlplus, ตั้งค่า autocommit โดยดำเนินการ

ตั้งค่าปิดอัตโนมัติ

และดำเนินการแทรก

แทรกลงในค่า tableA (... ) (... );

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.