มีวิธีแสดงรายการธุรกรรมที่เปิดอยู่บนฐานข้อมูล SQL Server 2000 หรือไม่


100

ไม่มีใครรู้วิธีใด ๆ ในการแสดงรายการธุรกรรมที่เปิดอยู่บนฐานข้อมูล SQL Server 2000?

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

คำตอบ:


157

สำหรับฐานข้อมูลแบบสอบถาม sys.sysprocesses ทั้งหมด

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

สำหรับการใช้ฐานข้อมูลปัจจุบัน:

DBCC OPENTRAN

34

คุณสามารถรับข้อมูลทั้งหมดของธุรกรรมที่ใช้งานได้โดยใช้แบบสอบถามด้านล่าง

SELECT
trans.session_id AS [SESSION ID],
ESes.host_name AS [HOST NAME],login_name AS [Login NAME],
trans.transaction_id AS [TRANSACTION ID],
tas.name AS [TRANSACTION NAME],tas.transaction_begin_time AS [TRANSACTION 
BEGIN TIME],
tds.database_id AS [DATABASE ID],DBs.name AS [DATABASE NAME]
FROM sys.dm_tran_active_transactions tas
JOIN sys.dm_tran_session_transactions trans
ON (trans.transaction_id=tas.transaction_id)
LEFT OUTER JOIN sys.dm_tran_database_transactions tds
ON (tas.transaction_id = tds.transaction_id )
LEFT OUTER JOIN sys.databases AS DBs
ON tds.database_id = DBs.database_id
LEFT OUTER JOIN sys.dm_exec_sessions AS ESes
ON trans.session_id = ESes.session_id
WHERE ESes.session_id IS NOT NULL

และจะให้ผลลัพธ์ที่คล้ายกันด้านล่าง ป้อนคำอธิบายภาพที่นี่

และคุณปิดธุรกรรมนั้นโดยความช่วยเหลือด้านล่างKILLเคียวรีโดยอ้างถึงรหัสเซสชัน

KILL 77

ว้าวอันนี้ดีมากฉันชอบปริมาณข้อมูลที่ให้ข้อเสียเพียงอย่างเดียวคือคุณต้องเป็นผู้ดูแลระบบจึงจะเรียกใช้ DBCC OPENTRAN ต้องการสิทธิ์น้อยลง แต่ยัง ... ดีมาก
Yogurtu

มีประโยชน์มากขอบคุณ! หากตอบคำถามของ OP (SQL 2000) ควรเป็นคำตอบที่ยอมรับ มีการโหวตเพิ่ม ...
Reversed Engineer

ยอดเยี่ยมมีสิ่งที่ฉันต้องการ
Vipul

23

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

ข้อความแสดงข้อมูลจะปรากฏขึ้นหากไม่มีธุรกรรมที่ใช้งานอยู่ในบันทึก

DBCC OPENTRAN


0

ใช้สิ่งนี้เพราะเมื่อใดก็ตามที่ธุรกรรมเปิดมากกว่าหนึ่งธุรกรรมด้านล่างจะทำงาน SELECT * FROM sys.sysprocesses WHERE open_tran <> 0

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