天天看點

通過Transaction Log(fn_dblog)取回被删除的資料

最近跟 James 讨論為何「ApexSQL Log」這個工具可以讀到被删除的資料呢?

原來它是透過 Transaction Log 來讀取資料的!

于是透過 Transaction Log 到網絡上有找到「SQL Server – How to find Who Deleted What records at What Time」直接透過 Transaction Log 來把被删除的資料給找回來!

蠻神奇的,隻是Run在我的區分大小寫的DB中會發生錯誤,因為有些字段名稱大小寫沒有一緻,于是就調整了一下!

剛開始在SQL 2012中運作都正常,到了SQL 2005及SQL 2008,删除的人員及時間居然沒有顯示出來。 www.it165.net

再檢查一下,原來是因為sysusers跟fn_dblog中的Transaction SID Join不到,是以改用SUSER_SNAME也蠻清楚的!

另外,原本要輸入資料庫名稱,改為自動取得現在執行的資料庫。

修改後的SP,請從附件download,希望對大家有幫助,謝謝!

測試範例如下,

<code>01.</code><code>--先建立測試的資料,并删除它</code>

<code>02.</code><code>Create</code> <code>Table</code> <code>tbl_Sample</code>

<code>03.</code><code>([ID] </code><code>int</code> <code>identity(1,1) ,</code>

<code>04.</code><code>[</code><code>Name</code><code>] </code><code>varchar</code><code>(50),</code>

<code>05.</code><code>[T1] </code><code>int</code><code>)</code>

<code>06.</code><code>GO</code>

<code>07.</code><code>Insert</code> <code>into</code> <code>tbl_Sample </code><code>values</code> <code>(</code><code>'Letter A'</code><code>, 11)</code>

<code>08.</code><code>Insert</code> <code>into</code> <code>tbl_Sample </code><code>values</code> <code>(</code><code>'Letter B'</code><code>, 22)</code>

<code>09.</code><code>Insert</code> <code>into</code> <code>tbl_Sample </code><code>values</code> <code>(</code><code>'Letter C'</code><code>, 33)</code>

<code>10.</code> 

<code>11.</code><code>Select</code> <code>* </code><code>from</code> <code>tbl_Sample</code>

<code>12.</code><code>DELETE</code> <code>FROM</code> <code>tbl_Sample</code>

<code>13.</code> 

<code>14.</code><code>--執行找回被删除資料的SP</code>

<code>15.</code><code>--1.輸入删除的Table Name 從 Transaction Log 找所有被删除的資料</code>

<code>16.</code><code>EXEC</code> <code>Recover_Deleted_Data_With_UID_Date_Time_Proc  </code><code>'dbo.tbl_Sample'</code>

<code>17.</code><code>--2.輸入删除的Table Name 從 Transaction Log 在時間區間中,找出所有被删除的資料</code>

<code>18.</code><code>EXEC</code> <code>Recover_Deleted_Data_With_UID_Date_Time_Proc  </code><code>'dbo.tbl_Sample'</code><code>,</code><code>'2013/05/23'</code><code>,</code><code>'2013/05/23'</code>

執行SP後,會把被删除的資料給找出來,如下圖,

通過Transaction Log(fn_dblog)取回被删除的資料