มีทุกที่ที่ฉันสามารถค้นหาธุรกรรมที่ล้มเหลวใน SQL Server 2012 ได้หรือไม่
มีทุกที่ที่ฉันสามารถค้นหาธุรกรรมที่ล้มเหลวใน SQL Server 2012 ได้หรือไม่
คำตอบ:
ไม่ SQL Server จะไม่รักษาประวัติใด ๆ เกี่ยวกับธุรกรรมที่ถูกยกเลิก / ย้อนกลับที่ไม่สำคัญในการเข้าถึงและไม่แนะนำปัญหาที่อาจเกิดขึ้นเพิ่มเติม (ดังที่อธิบายไว้ในคำตอบของ @ ooutwire ) หรือแม้กระทั่งธุรกรรมที่ได้กระทำไปแล้ว
คุณจะต้องทำการบันทึกของคุณเองภายในการจัดการข้อผิดพลาดของคุณหรือจับภาพเหตุการณ์เฉพาะธุรกรรมที่เกี่ยวข้องโดยใช้การติดตามฝั่งเซิร์ฟเวอร์หรือเหตุการณ์ขยาย
ติดตาม:
เหตุการณ์ขยาย:
เมื่อคุณพูดว่าการทำธุรกรรม "ล้มเหลว" คุณหมายถึงอะไร?
หากคุณต้องการดูธุรกรรมปัจจุบันในอินสแตนซ์คุณสามารถใช้sys.dm_tran_active_transactions
DMV
นอกจากนี้ยังsys.dm_exec_sessions
มีสิ่งopen_transaction_count
ที่สามารถให้ข้อมูลนี้แก่คุณตามช่วงเวลา ด้านล่างนี้เป็นคิวรีการวิเคราะห์เพื่อดึงกระบวนการผู้ใช้ทั้งหมดที่มีธุรกรรมเปิดอยู่:
select
s.session_id,
s.login_name,
s.open_transaction_count,
st.text as most_recent_sql_text
from sys.dm_exec_sessions s
inner join sys.dm_exec_connections c
on s.session_id = c.session_id
outer apply sys.dm_exec_sql_text(c.most_recent_sql_handle) st
where s.is_user_process = 1
and s.open_transaction_count > 0;
ข้อมูลนี้สามารถดึงได้จากsys.dm_tran_session_transactions
:
select
session_id,
is_user_transaction,
open_transaction_count
from sys.dm_tran_session_transactions;
หากคุณต้องการจับภาพเมื่อธุรกรรมถูกย้อนกลับ (สมมติว่าคุณต้องการทำธุรกรรม "ล้มเหลว" มาก) คุณสามารถจับภาพเหตุการณ์ขยายrollback_tran_completed
ได้ หากคุณกำลังมองหามุมมองการทำธุรกรรม "ทุกอย่าง" คุณสามารถจับภาพsql_transaction
เหตุการณ์ซึ่งกำหนดโดย SQL Server คือ
เกิดขึ้นเมื่อการทำธุรกรรม SQL Server เริ่มต้นเสร็จสมบูรณ์ย้อนกลับหรือดำเนินการ savepoint ใช้เหตุการณ์นี้เพื่อตรวจสอบพฤติกรรมการทำธุรกรรมเมื่อการแก้ไขปัญหาแอปพลิเคชันทริกเกอร์หรือขั้นตอนการจัดเก็บ
คุณสามารถใช้ fn_dblog () และค้นหา ID ธุรกรรมสำหรับธุรกรรมที่ถูกยกเลิกรวมถึงโฮสต์ของข้อมูลที่เป็นประโยชน์อื่น ๆ
เลือก * จาก fn_dblog (NULL, NULL) WHERE Operation = 'LOP_ABORT_XACT'; ไป
มันจะสแกนบันทึกธุรกรรมทั้งหมดในส่วนที่ใช้งานอยู่ของบันทึก สิ่งนี้สามารถ over-ridden โดยใช้การตั้งค่าสถานะการสืบค้นกลับ 2537 ซึ่งจะช่วยให้คุณย้อนกลับไปไกลที่สุดเท่าที่จะเป็นไปได้สำหรับการเริ่มต้นของ VLF "un-reused" ที่เก่าแก่ที่สุด ระวังเมื่อใช้ฟังก์ชั่นนี้เนื่องจากมันจะสแกนบันทึกแบบสุ่มและบันทึกจะไม่สามารถเปลี่ยนแปลงได้เมื่อการสแกนเกิดขึ้น ดังนั้นคุณอาจเห็นบันทึกการเติบโต
คุณยังสามารถใช้ fn_dump_dblog กับไฟล์สำรองข้อมูลบันทึก