มาร์ตินชี้ไปยังถนนที่ดีที่สุดแล้วร่องรอยการตรวจสอบการบริหารซึ่งมักจะเปิดอยู่ (เว้นแต่จะปิดการใช้งานอย่างชัดเจน) หากคุณไม่พบข้อมูลในการติดตามของผู้ดูแลระบบ (ถูกปิดใช้งานหรือมีการรีไซเคิล) คุณสามารถดึงข้อมูลจากการสำรองข้อมูลบันทึก เนื่องจากเป็นฐานข้อมูลการผลิตฉันถือว่าคุณมีรอบการสำรองข้อมูลปกติซึ่งมีการสำรองข้อมูลเต็มรูปแบบเป็นระยะและสำรองข้อมูลบันทึก คุณจะต้องกู้คืนบนเซิร์ฟเวอร์ที่แยกต่างหากฐานข้อมูลไปยังช่วงเวลาของเหตุการณ์เพื่อให้ DDL อยู่ในบันทึกการคืนค่าปัจจุบัน จากนั้นเป็นเรื่องง่าย ๆ ในการใช้fn_dblog()
และตรวจสอบบันทึก
วิธีหนึ่งคือไปโดยการทำธุรกรรมเริ่มดำเนินการ:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where Operation = 'LOP_BEGIN_XACT';
ถ้าALTER VIEW
ออกมาในการทำธุรกรรมแบบสแตนด์อโลน (ie. ไม่ล้อมรอบด้วยBEGIN TRANSACTION
/ COMMIT
) CreatProc transaction
จากนั้นก็จะเริ่มต้นการทำธุรกรรมที่มีชื่อว่า ค้นหาและ[Transaction SID]
เป็น SID สำหรับเข้าสู่ระบบที่คุณต้องการ
ความเป็นไปได้อีกอย่างหนึ่งคือการค้นหาธุรกรรมที่ได้รับ SCH_M ในมุมมองที่คุณต้องการ:
select [Lock Information], *
from fn_dblog(null, null)
where [Lock Information] like '%' + cast(object_id('...') as varchar(10))+'%'
and [Lock Information] like '%LOCK_SCH_M%'
go
โปรดทราบว่าหากมุมมองถูกเปลี่ยนโดย DROP ตามด้วย CREATE รหัสวัตถุอาจมีการเปลี่ยนแปลง แต่อย่างน้อยคุณจะได้รับธุรกรรมที่สร้าง CREATE ล่าสุด (รหัสวัตถุปัจจุบันของมุมมองใน db ที่กู้คืน) ด้วย id การทำธุรกรรมคุณย้อนกลับไปและดึงข้อมูลธุรกรรมเริ่มต้น:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where [Transaction ID] = '...'
and Operation = 'LOP_BEGIN_XACT';
[ธุรกรรม SID] นั้นเป็นอีกครั้งที่คนของคุณ ใช้SUSER_SNAME
เพื่อเรียกชื่อล็อกอินจาก login SID หาก SID เป็น 0x01 หมายถึงการเข้าสู่ระบบsa
ซึ่งหมายถึงบุคคลใด ๆ ที่รู้sa
รหัสผ่านสามารถทำได้