mysql 触发器不能同时 insert or update or delete_运维日记|SQL server 那点事——DML触发器...
11月19日,21點,小編正六指霸屏,決賽圈1V4,忽然,電話響了,這種感覺很熟悉,不錯,上次差點推掉對面水晶的那一幕又上演了……作為一名美創的員工,客戶才是第一位,我毫不猶豫的摁下了接聽鍵。
?
XXX嗎?我數據庫有人篡改了某張表,我一聽,這個問題應該難度不大(自信ing!),趕緊回應客戶:
您數據庫有保留最近一次完整備份以及之后的完整日志嗎?
1、有的話可以用完整備份恢復+日志備份(誤操作前的LSN恢復)
2、也可以通過sys.fn_dblog()獲取二進制日志,再解析出來誤操作的語句進行恢復
結果客戶的需求并不是該操作如何恢復,而是想確定這個篡改表的始作俑者,以及如何去記錄以后數據庫這種類似的情況。我很清楚的告訴客戶,再沒部署任何監控記錄的基礎上,解析日志也只能獲取相關的數據記錄,無法獲取更過的信息(當然,不排除某種高端工具可能會獲取)。
至于以后如何防患,如何記錄,這個可以通過SQL server觸發器或者審計功能來實現,而本文,將著重介紹DML觸發器以及它如何實現客戶的需求,請看下文。
01
DML觸發器介紹
DML觸發器是一種特殊類型的存儲過程,它在指定的表中的數據發生變化時自動生效。喚醒調用觸發器以響應 INSERT、UPDATE 或 DELETE 語句。
02
常見的DML觸發器
2.1 創建語句
2.2 插入測試
可見,因為觸發器的緣故,不滿足要求的數據無法插入(這里的age>=100雖有悖常理,實則祝大家都長命百歲,哈哈)
回到我們的主旨,這種觸發器雖然能起到防患的作用,但是依舊無法達到我們預期的效果,我們不僅要防患于未然,更要能事事追蹤溯源,話不多說,請看下文,也是我們這篇文章最最重要的干貨!!!
03
如何用DML觸發器記錄操作
實現原理:
DML操作記錄,簡單的說,就是日志類觸發器,也就是盡量全面地反映數據庫表所進行的insert、update、delete操作,便于日后翻閱。
1、創建測試表:
2、創建DML日志表:
3、創建DML觸發器:
4、查看當前觸發器日志表:
5、用hostnameadministrator執行DML操作:
執行結果為:
6、再用dsz登錄執行DML操作:
執行結果為:
7、查看DML日志表:
顯而易見,剛才的6次insert,2次update(一次update對應兩條記錄,因為分別記錄了name的更改前后的值—),以及2次delete,都清楚的記錄在該表內。
眼尖的網友可能要問,USERID和HOSTNAME很清楚,最后這兩列有什么特殊的含義嗎?
我們的觸發器日志表如果僅僅記錄一些基礎的信息,還遠遠不夠,我們還要將更改的數據挖掘出來,以便在需要的時候進行逆向DML。
那么,我們是不是也可以修改日志表,添加更多我們需要捕獲的信息呢,答案是肯定的,不過這個就交給廣大網友去探索、去更改了……
8、truncate 掉test表,再查看DML日志表:
可以看到,依舊只有12條記錄,這是為什么呢?明明test的表都被刪干凈了啊???
莫慌莫慌,大家都知道,truncate和delete不同,它屬于DDL語句,所以,關于DDL的觸發器,且看下回分解,不要走開哦。
美創運維中心數據庫服務團隊擁有Oracle ACE 1人、OCM 10余人、數十名Oracle OCP、MySQL OCP、紅帽RHCA、中間件weblogic、tuxedo認證、達夢工程師 ,著有《Oracle DBA實戰攻略》,《Oracle數據庫性能優化方法和最佳實踐》,《Oracle內核技術揭秘》等多本數據運維優化書籍。目前運維各類數據庫合計2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、達夢等主流商業和開源數據庫。并成為首批國內達夢戰略合作伙伴之一,擁有海量經驗和完善的人員培養體系。并同時提供超融合,私有云整體解決方案。
轉自杭州美創科技有限公司公眾號,如需二次轉載,請聯系marketing@mchz.com.cn
總結
以上是生活随笔為你收集整理的mysql 触发器不能同时 insert or update or delete_运维日记|SQL server 那点事——DML触发器...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python百度地图api经纬度_从百度
- 下一篇: python判断txt文件是否为空_Py