คำถามติดแท็ก transactions

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

10
วิธีแก้ไขการขาดธุรกรรมใน MongoDB?
ฉันรู้ว่ามีคำถามที่คล้ายกันที่นี่ แต่พวกเขามีทั้งบอกฉันเปลี่ยนกลับไปใช้ระบบ RDBMS ปกติถ้าผมต้องทำธุรกรรมหรือใช้การดำเนินงานของอะตอมหรือสองเฟสกระทำ ทางออกที่สองดูเหมือนจะเป็นทางเลือกที่ดีที่สุด ข้อที่สามฉันไม่ต้องการติดตามเพราะดูเหมือนว่ามีหลายสิ่งผิดปกติและฉันไม่สามารถทดสอบได้ในทุกด้าน ฉันมีเวลาในการปรับโครงสร้างโครงการของฉันอีกครั้งเพื่อดำเนินการปรมาณู ฉันไม่ทราบว่าสิ่งนี้มาจากมุมมองที่ จำกัด ของฉัน (ฉันเพิ่งทำงานกับฐานข้อมูล SQL จนถึงปัจจุบัน) หรือไม่สามารถทำได้จริง ๆ หรือไม่ เราต้องการทดสอบนำร่อง MongoDB ที่ บริษัท ของเรา เราเลือกโครงการง่ายๆ - เกตเวย์ SMS ช่วยให้ซอฟต์แวร์ของเราส่งข้อความ SMS ไปยังเครือข่ายเซลลูลาร์และเกตเวย์ทำงานได้ไม่ดี: สื่อสารกับผู้ให้บริการผ่านโปรโตคอลการสื่อสารที่แตกต่างกัน เกตเวย์ยังจัดการการเรียกเก็บเงินของข้อความด้วย ลูกค้าทุกคนที่สมัครใช้บริการจะต้องซื้อเครดิตบ้าง ระบบจะลดยอดคงเหลือของผู้ใช้โดยอัตโนมัติเมื่อมีการส่งข้อความและปฏิเสธการเข้าถึงหากยอดเงินไม่เพียงพอ และเนื่องจากเราเป็นลูกค้าของผู้ให้บริการ SMS บุคคลที่สามเราจึงอาจมียอดคงเหลือเป็นของตนเอง เราต้องติดตามสิ่งเหล่านั้นด้วย ฉันเริ่มคิดว่าฉันสามารถจัดเก็บข้อมูลที่ต้องการด้วย MongoDB ได้อย่างไรหากฉันลดความซับซ้อนลง (การเรียกเก็บเงินภายนอกการส่ง SMS ที่อยู่ในคิว) มาจากโลก SQL ฉันจะสร้างตารางแยกต่างหากสำหรับผู้ใช้อีกอันหนึ่งสำหรับข้อความ SMS และอีกอันสำหรับจัดเก็บธุรกรรมที่เกี่ยวข้องกับยอดคงเหลือของผู้ใช้ สมมติว่าฉันสร้างคอลเลกชันแยกสำหรับทุกคนใน MongoDB ลองนึกภาพงานส่ง …

12
แก้ไข“ เกินกำหนดเวลารอการล็อคแล้ว ลองรีสตาร์ททรานแซคชัน” สำหรับตาราง Mysql ที่“ ติด” อยู่หรือไม่
จากสคริปต์ฉันส่งแบบสอบถามเช่นนี้หลายพันครั้งไปยังฐานข้อมูลท้องถิ่นของฉัน: update some_table set some_column = some_value ฉันลืมที่จะเพิ่มส่วนไหนดังนั้นคอลัมน์เดียวกันถูกตั้งค่าเป็นค่าเดียวกันสำหรับทุกแถวในตารางและทำได้หลายพันครั้งและคอลัมน์ถูกทำดัชนีดังนั้นดัชนีที่สอดคล้องกันอาจถูกปรับปรุงหลายครั้งเกินไป . ฉันสังเกตเห็นสิ่งผิดปกติเพราะใช้เวลานานเกินไปดังนั้นฉันจึงฆ่าสคริปต์ ฉันรีบูตเครื่องคอมพิวเตอร์ของฉันตั้งแต่นั้นมา แต่มีบางอย่างติดอยู่ในตารางเนื่องจากข้อความค้นหาง่าย ๆ ใช้เวลานานมากในการรันและเมื่อฉันลองวางดัชนีที่เกี่ยวข้องมันล้มเหลวด้วยข้อความนี้: Lock wait timeout exceeded; try restarting transaction มันเป็นตาราง innodb ดังนั้นการทำธุรกรรมที่ติดอยู่อาจเป็นนัย ฉันจะแก้ไขตารางนี้และลบธุรกรรมที่ค้างอยู่ออกจากมันได้อย่างไร

2
วิธีที่ดีที่สุดในการทำงานกับธุรกรรมใน MS SQL Server Management Studio
สมมติว่าฉันมีคำสั่ง SQL ที่ถูกต้องตามหลักไวยากรณ์และเชิงความหมายดังนั้นจึงดำเนินการ ใน Management Studio (หรือเครื่องมือสืบค้นข้อมูลอื่น ๆ ) ฉันจะทดสอบคำสั่ง SQL ได้อย่างไรและถ้าฉันสังเกตเห็นว่ามีบางอย่างขัดข้องให้ย้อนกลับ (ในแบบสอบถามแยกต่างหาก)
127 sql  tsql  transactions 

2
ควรใช้ SELECT … FOR UPDATE เมื่อใด
SELECT ... FOR UPDATEโปรดช่วยให้ฉันเข้าใจที่อยู่เบื้องหลังกรณีการใช้งาน คำถามที่ 1ต่อไปนี้เป็นตัวอย่างที่ดีว่าSELECT ... FOR UPDATEควรใช้เมื่อใด? ได้รับ: ห้อง [ID] แท็ก [id, name] room_tags [room_id, tag_id] room_id และ tag_id เป็นคีย์ต่างประเทศ แอปพลิเคชันต้องการแสดงรายการห้องทั้งหมดและแท็ก แต่ต้องแยกความแตกต่างระหว่างห้องที่ไม่มีแท็กกับห้องที่ถูกลบออก หากไม่ได้ใช้ SELECT ... FOR UPDATE สิ่งที่อาจเกิดขึ้นคือ: ในขั้นต้น: ห้องประกอบด้วย [id = 1] แท็กประกอบด้วย [id = 1, name = 'cats'] room_tags ประกอบด้วย [room_id = 1, tag_id = 1] …


3
การใช้ flush () อย่างถูกต้องใน JPA / Hibernate
ฉันกำลังรวบรวมข้อมูลเกี่ยวกับวิธีการ flush () แต่ยังไม่ชัดเจนว่าควรใช้เมื่อใดและจะใช้อย่างไรให้ถูกต้อง จากสิ่งที่ฉันอ่านความเข้าใจของฉันคือเนื้อหาของบริบทการคงอยู่จะถูกซิงโครไนซ์กับฐานข้อมูลนั่นคือการออกคำสั่งที่โดดเด่นหรือการรีเฟรชข้อมูลเอนทิตี ตอนนี้ฉันได้ติดตามสถานการณ์ที่มีสองเอนทิตีAและB(ในความสัมพันธ์แบบหนึ่งต่อหนึ่ง แต่ไม่ได้บังคับใช้หรือจำลองโดย JPA) Aมี PK recordIdคอมโพสิตซึ่งตั้งด้วยตนเองและยังมีสนาม นี้recordIdควรจะเขียนกิจการเป็นต่างประเทศที่สำคัญในการB AฉันกำลังบันทึกAและBในการทำธุรกรรมครั้งเดียว ปัญหาคือว่าค่าสร้างขึ้นโดยอัตโนมัติA.recordIdไม่ได้มีอยู่ในการทำธุรกรรมจนกว่าฉันโทรชัดเจนem.flush()หลังจากเรียกบนem.persist() A(ถ้าฉันมี IDENTITY PK ที่สร้างขึ้นโดยอัตโนมัติค่าจะได้รับการอัปเดตโดยตรงในเอนทิตี แต่นั่นไม่ใช่กรณีนี้) อาจem.flush()ก่อให้เกิดอันตรายใด ๆ เมื่อใช้ภายในธุรกรรมหรือไม่?

6
MySQL: ธุรกรรมเทียบกับตารางการล็อก
ฉันสับสนเล็กน้อยกับการทำธุรกรรมและการล็อกตารางเพื่อให้แน่ใจว่าฐานข้อมูลมีความสมบูรณ์และตรวจสอบให้แน่ใจว่า SELECT และ UPDATE ยังคงซิงค์อยู่และไม่มีการเชื่อมต่ออื่นใดรบกวน ฉันจำเป็นต้อง: SELECT * FROM table WHERE (...) LIMIT 1 if (condition passes) { // Update row I got from the select UPDATE table SET column = "value" WHERE (...) ... other logic (including INSERT some data) ... } ฉันต้องตรวจสอบให้แน่ใจว่าไม่มีการสอบถามอื่นใดที่จะรบกวนและดำเนินการแบบเดียวกันSELECT(อ่าน 'ค่าเก่า' ก่อนที่การเชื่อมต่อนั้นจะอัปเดตแถวเสร็จสิ้น ฉันรู้ว่าฉันสามารถตั้งค่าเริ่มต้นเพื่อLOCK TABLES tableตรวจสอบให้แน่ใจว่ามีการเชื่อมต่อเพียงครั้งละ 1 …

5
เป็นไปได้ไหมที่จะย้อนกลับคำสั่ง CREATE TABLE และ ALTER TABLE ในฐานข้อมูล SQL หลัก
ฉันกำลังทำงานกับโปรแกรมที่ออก DDL ฉันต้องการทราบว่าCREATE TABLEDDL ที่คล้ายกันนี้สามารถย้อนกลับได้หรือไม่ Postgres MySQL SQLite และคณะ อธิบายว่าแต่ละฐานข้อมูลจัดการธุรกรรมกับ DDL อย่างไร

9
จะเกิดอะไรขึ้นถ้าคุณไม่ทำธุรกรรมกับฐานข้อมูล (เช่น SQL Server)
สมมติว่าฉันมีคำถาม: begin tran -- some other sql code แล้วฉันก็ลืมที่จะกระทำหรือย้อนกลับไป หากลูกค้ารายอื่นพยายามเรียกใช้แบบสอบถามจะเกิดอะไรขึ้น?

4
เหตุใดฉันจึงต้องทำธุรกรรมในโหมดไฮเบอร์เนตสำหรับการดำเนินการแบบอ่านอย่างเดียว
เหตุใดฉันจึงต้องทำธุรกรรมในโหมดไฮเบอร์เนตสำหรับการดำเนินการแบบอ่านอย่างเดียว ธุรกรรมต่อไปนี้ทำให้เกิดการล็อกในฐานข้อมูลหรือไม่ ตัวอย่างรหัสที่จะดึงข้อมูลจากฐานข้อมูล: Transaction tx = HibernateUtil.getCurrentSession().beginTransaction(); // why begin transaction? //readonly operation here tx.commit() // why tx.commit? I don't want to write anything ใช้session.close() แทนได้tx.commit()หรือไม่?

5
จะใช้ธุรกรรมกับ dapper.net ได้อย่างไร?
ฉันต้องการเรียกใช้คำสั่งแทรกหลายรายการในหลายตาราง ฉันใช้ dapper.net ฉันไม่เห็นวิธีจัดการธุรกรรมกับ dapper.net เลย โปรดแบ่งปันแนวคิดของคุณเกี่ยวกับวิธีใช้ธุรกรรมกับ dapper.net
106 c#  transactions  dapper 

3
ระดับการแยกธุรกรรมสัมพันธ์กับการล็อกบนโต๊ะ
ฉันได้อ่านเกี่ยวกับการแยก 4 ระดับ: Isolation Level Dirty Read Nonrepeatable Read Phantom Read READ UNCOMMITTED Permitted Permitted Permitted READ COMMITTED -- Permitted Permitted REPEATABLE READ -- -- Permitted SERIALIZABLE -- -- -- ฉันต้องการเข้าใจการล็อกการแยกธุรกรรมแต่ละรายการเกิดขึ้นบนโต๊ะ READ UNCOMMITTED - no lock on table READ COMMITTED - lock on committed data REPEATABLE READ - lock on …

2
TransactionScope ย้อนธุรกรรมอย่างไร
ฉันกำลังเขียนการทดสอบการรวมซึ่งฉันจะแทรกวัตถุจำนวนหนึ่งลงในฐานข้อมูลจากนั้นตรวจสอบเพื่อให้แน่ใจว่าวิธีการของฉันดึงวัตถุเหล่านั้นมาหรือไม่ การเชื่อมต่อกับฐานข้อมูลของฉันคือผ่าน NHibernate ... และวิธีการสร้างการทดสอบตามปกติของฉันคือการทำสิ่งต่อไปนี้: NHibernateSession.BeginTransaction(); //use nhibernate to insert objects into database //retrieve objects via my method //verify actual objects returned are the same as those inserted NHibernateSession.RollbackTransaction(); อย่างไรก็ตามฉันเพิ่งค้นพบเกี่ยวกับTransactionScopeซึ่งเห็นได้ชัดว่าสามารถใช้เพื่อจุดประสงค์นี้ ... บางโค้ดตัวอย่างที่ฉันได้พบจะเป็นดังนี้: public static int AddDepartmentWithEmployees(Department dept) { int res = 0; DepartmentAdapter deptAdapter = new DepartmentAdapter(); EmployeeAdapter empAdapter = …

4
มีวิธีแสดงรายการธุรกรรมที่เปิดอยู่บนฐานข้อมูล SQL Server 2000 หรือไม่
ไม่มีใครรู้วิธีใด ๆ ในการแสดงรายการธุรกรรมที่เปิดอยู่บนฐานข้อมูล SQL Server 2000? ฉันทราบว่าฉันสามารถสอบถามมุมมองsys.dm_tran_session_transactionsในเวอร์ชันฐานข้อมูล SQL 2005 (และใหม่กว่า) ได้ แต่สิ่งนี้ไม่มีใน SQL 2000

12
ฉันควรยอมรับหรือย้อนกลับธุรกรรมการอ่านหรือไม่?
ฉันมีแบบสอบถามสำหรับอ่านที่ฉันดำเนินการภายในธุรกรรมเพื่อที่ฉันจะได้ระบุระดับการแยก เมื่อสอบถามเสร็จแล้วควรทำอย่างไร? ทำธุรกรรม ย้อนกลับธุรกรรม ไม่ต้องทำอะไรเลย (ซึ่งจะทำให้ธุรกรรมถูกย้อนกลับในตอนท้ายของบล็อกการใช้งาน) อะไรคือผลกระทบของการทำแต่ละอย่าง? using (IDbConnection connection = ConnectionFactory.CreateConnection()) { using (IDbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted)) { using (IDbCommand command = connection.CreateCommand()) { command.Transaction = transaction; command.CommandText = "SELECT * FROM SomeTable"; using (IDataReader reader = command.ExecuteReader()) { // Read the results } } // To commit, or …

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