ฉันจะเพิ่มการอ่านหลังจากที่ได้ทำรายการระดับการยุติการทำรายการแล้วหรือไม่?


9

ภายในโพรซีเดอร์ที่เก็บฉันมีดังต่อไปนี้: (sql server 2008)

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH

เนื่องจากนี่คือธุรกรรมตามความคิดของฉันคือการเชื่อมต่อฐานข้อมูลส่วนที่เหลือจะไม่ได้รับผลกระทบจาก SERIALIZABLE

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

คำตอบ:



5

ไม่คุณไม่จำเป็นต้องตั้งค่าระดับการแยกโดยปริยายกลับไปอ่านข้อตกลง

จากหนังสือออนไลน์

หากคุณออก SET ISACTATION ISOLATION LEVEL ในขั้นตอนหรือทริกเกอร์ที่เก็บไว้เมื่อวัตถุคืนการควบคุมระดับการแยกจะถูกรีเซ็ตเป็นระดับที่มีผลเมื่อวัตถุถูกเรียกใช้ ตัวอย่างเช่นถ้าคุณตั้ง REPEATABLE READ ในแบทช์และแบทช์จะเรียกโพรซีเดอร์ที่เก็บไว้ซึ่งตั้งค่าระดับการแยกเป็น SERIALIZABLE การตั้งค่าระดับการแยกจะเปลี่ยนเป็น REPEATABLE READ เมื่อโพรซีเดอร์ที่เก็บไว้ส่งคืนการควบคุมเป็นแบทช์


3

คำสั่งที่คุณโพสต์เพียงแค่เรียกใช้ธุรกรรมใน SP TRANSACTION ISOLATION LEVEL SERIALIZABLEด้วย การเชื่อมต่ออื่น ๆ จะใช้ค่าเริ่มต้นเป็นระดับการแยกเริ่มต้น - อ่านที่กำหนด (ยกเว้นกรณีที่ระบุระดับการแยกอื่นอย่างชัดเจน)

มีชุดที่ยอดเยี่ยมโดย Paul White - ระดับการแยก SQL Server: ชุดซึ่งจะช่วยให้คุณเข้าใจในเชิงลึกความหมายระดับแยกที่แตกต่างกันและทำเมื่อพวกเขาใช้


-3

อัลกอริธึมที่ค่อนข้างใหม่ที่จะหลีกเลี่ยงข้อเสียของวิธีการก่อนหน้านี้เกือบทั้งหมด ใช้วิธีการมองโลกในแง่ดีช่วยให้การทำธุรกรรมดำเนินต่อไปโดยไม่ปิดกั้น เมื่อธุรกรรมต้องการยอมรับมันจะถูกตรวจสอบและจะถูกยกเลิกหากการดำเนินการไม่ได้ต่อเนื่องกันได้ รายละเอียดเพิ่มเติมของแอปทั้งหมดที่: http://writeulearn.com/relational-database-transactions/


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