2016-04-28 375 views
0

我錯誤地使用PROD GUI插入了幾條測試記錄,這些記錄已寫入PROD數據庫。有沒有辦法找到這些記錄所觸及的表格和列?插入到Prod數據庫的測試數據如何刪除該記錄

感謝

+0

是的。使用SELECT語句和DELETE語句。 –

+0

多數民衆贊成在有趣的,你怎麼知道什麼所有表更新與這些記錄在第一個地方? – Khatra

+0

通過檢查你的GUI的源代碼。或者在運行GUI時在SQL Server上運行跟蹤。這將告訴您插入中使用的對象,只要確切的行需要視覺檢查和分析。 –

回答

2

我想你沒有運行軌跡,CDC或其他跟蹤機制啓用。所以它看起來像下面的步驟將是一個合理的解決方案:

  1. 確保您不能找到和使用模板調整從 應用程序GUI
  2. 運行SQL事件探查器跟蹤丟棄數據(它會給你足夠的信息)。包括ApplicationName和HostName列以標識您的連接。
  3. 使用用戶界面插入一條測試記錄(嘗試執行與以前相同的操作)
  4. 停止跟蹤並找到您插入的數據。
  5. 確定您的應用程序使用ApplicationName,HostName和SPID完成的其他修改。
  6. 創建一個SQL腳本來刪除這些記錄。
  7. 確定您已經(可能是他們被插入到相同的表)之前插入記錄
  8. 編寫一個查詢,刪除它們太
  9. Open事務
  10. 刪除這些記錄
  11. 檢查您是否只刪除需要的記錄
  12. 提交交易

UPD:按照這個答案的評論(與我完全同意),如果你有DEV或TEST環境,您可以在其中執行相同的操作,執行此操作並在其中找到修改的記錄。之後,在PROD的相同表格中找到修改後的記錄。

P.S.我無法保證,按照這些步驟,您將能夠清理您插入的數據,但可能您可以執行此操作。我還建議在刪除數據之前創建完整備份。

+1

我會建議在dev或QA上運行這些步驟而不是prod來識別插入命中的表並測試刪除過程。我還建議使用大致相同的值作爲不同的值可能意味着涉及不同的表格。 – HLGEM

+0

好點。將此添加到答案中。 –

+0

謝謝你的所有意見,我會盡力遵循這些步驟,看看是否有效。我與我的一位同事是Java開發人員進行了對話,他建議我看看前端和字段的源代碼是如何映射到表的列(SQL)的。你對此有何想法?任何幫助將不勝感激。 – Khatra

0

那麼你可以通過代碼來查看它接觸到的表格。在dev上運行Profiler以查看它發送的代碼或在按照您在prod上執行的相同方式輸入新記錄時觸發它所調用的代碼。

如果您有正式的PK和FK關係,您可能會通過反覆試驗發現,因爲它不會讓您刪除父記錄,直到刪除所有的孩子。並在開發環境中測試其他一些記錄,以確定可能涉及哪些表。或者你可以編寫FK腳本來查看其他表與父表有關。

如果您已經進行審計(因爲每個企業解決方案都應該有,但我離題),那麼您通常可以通過在審計表中查找當時的事務來查找。我們的審計表包含交易日期和用戶,這使得更容易篩選這些事情。

當然,如果你知道你的數據模型,你應該有一個不錯的主意,然後再開始。或者,如果您的所有子表中都有特定的ID,並且您沒有方便的FK,那麼您可以查看系統表以查找具有該列名稱的表。儘管這假設一個相當標準的命名約定。如果你在不同的表格中調用同一列不同的東西,你可能會錯過一些。

如果您使用的是ORM,應該有一些辦法來檢查是在與你做的特定任務的對象是什麼表。因此,如果您插入實例的測試訂單,請檢查訂單對象中包含的內容。