iT邦幫忙

0

請問有辦法能不透過SQL Server Profiler就能得知異動TABLE資料的SQL是什麼嗎?

  • 分享至 

  • xImage

各位前輩好
目前小弟使用的資料庫是SQL Server
最近遇到一個很弔詭的問題是某一個TABLE的固定幾筆資料的某一個欄位居然會莫名其妙的被修改成別的資料,但資料都相同
而且每天都會被修改個幾次,時間則不固定
已經翻遍了相關系統、排程與預存程序都查不到有哪段程式可以修改那個欄位
現在只有用trigger調查出修改的執行時間點
但是實在是太沒規律了所以還是不夠
原本是想請機房管理員幫忙用SQL Server Profiler調查是哪隻SQL程式有在修改
但是因為發生時間不固定故沒有辦法一直監測
所以想請教還有沒有什麼其他方法可以知道這TABLE是如何被修改的?
感謝各位前輩了!

rain_yu iT邦研究生 5 級 ‧ 2023-11-17 10:34:20 檢舉
您遇到的問題確實有些棘手,因為資料在某個特定欄位中被莫名其妙地修改,但是無法找到具體的修改來源。 除了使用觸發器和 SQL Server Profiler 進行調查外,還有一些其他方法可以幫助您找到修改資料的來源。 以下是一些可能的方法:

1. Extended Events(擴展事件):SQL Server 提供了擴展事件功能,可用於擷取和分析資料庫引擎的活動。 您可以設定一個擴充事件會話,監視對目標表的修改操作,以便擷取修改事件以及對應的 SQL 語句。 這樣,您可以更詳細地了解是哪個 SQL 語句導致了資料的修改。

2. Change Data Capture(CDC,更改資料擷取):SQL Server 的 CDC 功能可用於追蹤對錶的更改,並記錄變更的詳細資訊。 透過啟用 CDC,您可以擷取對目標表的所有更改,包括修改、插入和刪除操作。 CDC 將變更資料儲存在專用的 CDC 表中,您可以查詢這些表以了解修改資料的來源。

3. 擴展預存程序:如果您懷疑修改是透過預存程序進行的,可以將預存程序修改為在修改資料之前記錄相關信息,如預存程序名稱、執行時間、操作使用者等。 這樣,當資料被修改時,您可以檢查這些擴充存儲程序以獲取更多資訊。

4. 稽核功能:SQL Server 提供了內建的稽核功能,可以記錄資料庫引擎的活動。 您可以設定審計規範,追蹤對目標表的修改操作,並將操作記錄到審計日誌中。 這樣,您可以查看稽核日誌以確定是哪個使用者或流程修改了資料。

使用上述方法之一或多個方法的組合,您應該能夠更準確地追蹤和確定目標表資料的修改來源。 請注意,這些方法可能會對系統性能產生一些影響,因此在生產環境中進行之前,請務必進行充分的測試和評估。
sam0407 iT邦大師 1 級 ‧ 2023-11-17 11:41:17 檢舉
用Profiler來查還是最簡單的吧?不要直接用預設範本,下拉選擇TSQL,把資料寫入Table,放著跑一星期應該都還好吧?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
Samuel
iT邦好手 1 級 ‧ 2023-11-18 06:47:17
最佳解答

T-SQL筆記16_如何查詢最近一次Table的異動以及DB各Table創建時間資訊
https://coolmandiary.blogspot.com/2021/04/t-sql16tabledbtable.html
T-SQL筆記36_如何側錄軟體背後執行的SQL
https://coolmandiary.blogspot.com/2022/12/t-sql36sql.html

T-SQL筆記48_實用的腳本part2_如何去得知某table的來源或更新刪除源頭來自哪個sp或trigger_sp_depends
https://coolmandiary.blogspot.com/2023/07/t-sql48part2tablesptriggerspdepends.html

T-SQL筆記54_盤查某SP是掛在哪個JOB_JOB的排程清單查詢
https://coolmandiary.blogspot.com/2023/09/t-sql54spjobjob.html

muscat iT邦新手 5 級 ‧ 2023-12-13 17:56:32 檢舉

謝謝,已使用T-SQL筆記36找出修改的SQL,並追查出是另一個系統在某種情況下會做修改,也謝謝大家的回答,十分感謝!

3
海綿寶寶
iT邦大神 1 級 ‧ 2023-11-17 07:43:20

已經翻遍了相關系統、排程與預存程序都查不到有哪段程式可以修改那個欄位

如果確定的話
就把該欄位的名字改掉
然後等著看那隻程式會跳出錯誤(update失敗)
/images/emoticon/emoticon11.gif

哈~不是好主意~
因為會發生新增資料錯誤~/images/emoticon/emoticon11.gif

0
shing_pascal
iT邦新手 2 級 ‧ 2023-11-17 08:12:54

時間不固定,代表是人為啟動程式 或是 某個行為 觸發有問題的程式。
你可以針對那固定幾筆的錯誤欄位 寫個監控程式。
紀錄錯誤資料的發生時間。這樣就有跡可尋。

再來,
你提到:最近遇到一個很弔詭的問題是某一個TABLE的固定幾筆資料的某一個欄位居然會莫名其妙的被修改成別的資料,但資料都相同。
可以先查 何種情況會寫入或讀取 那幾筆固定資料。這樣應該會比較容易排查。

我要發表回答

立即登入回答