国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL Server實現(xiàn)用觸發(fā)器捕獲DML操作的會話信息【實例】

2024-08-31 01:04:47
字體:
供稿:網(wǎng)友

需求背景

上周遇到了這樣一個需求,維護人員發(fā)現(xiàn)一個表的數(shù)據(jù)經(jīng)常被修改,由于歷史原因;文檔缺少;以及維護人員的經(jīng)常變更,導(dǎo)致他們對系統(tǒng)也業(yè)務(wù)也不完全熟悉,他們也不完全清楚哪些系統(tǒng)和應(yīng)用程序會對這個表的數(shù)據(jù)進行操作。現(xiàn)在他們想找出有哪些服務(wù)器,哪些應(yīng)用程序會對這個表進行INSERT、UPDATE操作。那么問題來了,怎么去解決這個問題呢?

解決方案

由于數(shù)據(jù)庫版本是標(biāo)準(zhǔn)版,我們選擇了使用觸發(fā)器來捕獲進行DML操作的會話的相關(guān)信息,例如,Host_Name、Program_Name等 ,選擇觸發(fā)器是因為簡單直接。我們先創(chuàng)建一個表名為TEST的表,假設(shè)我們想監(jiān)控有哪些應(yīng)用服務(wù)器,以及那些應(yīng)用程序會對表TEST進行INSERT、UPDATE操作。

USE [AdventureWorks2014]GO IF NOT EXISTS (SELECT 1 FROM sys.sysobjects WHERE id=object_id(N'[dbo].[TEST]') AND OBJECTPROPERTY(id, N'IsTable')=1 )BEGINCREATE TABLE [dbo].[TEST](  [OBJECT_ID] [INT] NOT NULL,  [NAME] [VARCHAR](8) NULL,  CONSTRAINT PK_TEST  PRIMARY KEY (OBJECT_ID)) ENDGO INSERT INTO dbo.TESTSELECT 1, 'kerry' UNION ALLSELECT 2, 'jimmy'

那么我們接下來在表上面新增幾個字段 [HOST_NAME]、[PROGRAM_NAME]、LOGIN_NAME用來記錄最后一次修改該記錄的會話信息,另外創(chuàng)建觸發(fā)器TRG_TEST來更新這幾個字段

ALTER TABLE TEST ADD [HOST_NAME] NVARCHAR(256)ALTER TABLE TEST ADD [PROGRAM_NAME] NVARCHAR(256);ALTER TABLE TEST ADD LOGIN_NAME NVARCHAR(256); CREATE TRIGGER TRG_TEST ON dbo.TEST AFTER INSERT,UPDATEAS  IF (EXISTS(SELECT 1 FROM INSERTED))BEGIN   UPDATE dbo.TEST  SET   dbo.TEST.[HOST_NAME] = ( SELECT host_name                   FROM  sys.dm_exec_sessions                   WHERE session_id = @@SPID                  ) ,      dbo.TEST.PROGRAM_NAME = ( SELECT  program_name                   FROM   sys.dm_exec_sessions                   WHERE   session_id = @@SPID                  ) ,      dbo.TEST.LOGIN_NAME = ( SELECT login_name                  FROM  sys.dm_exec_sessions                  WHERE  session_id = @@SPID                 )  FROM  dbo.TEST t      INNER JOIN INSERTED i ON t.OBJECT_ID = i.OBJECT_IDENDGO

 

接下來,我們來簡單測試一下,如下所示,分布插入、更新一條記錄

INSERT INTO dbo.TEST(OBJECT_ID,NAME)SELECT 3,'ken' UPDATE dbo.TEST SET NAME='Richard' WHERE OBJECT_ID=2;

 

如下所示,因為我只是用SSMS更新,插入數(shù)據(jù),所以捕獲的是Microsoft SQL Server Management Studio - Query。

sqlserver,觸發(fā)器

這這種方式還有一個弊端,那就是如果應(yīng)用程序的SQL,寫得不夠健壯的話,那么增加字段就會導(dǎo)致以前的應(yīng)用程序出現(xiàn)問題,例如,應(yīng)用程序有下面這樣的SQL,增加字段后,它就會報錯。

INSERT INTO dbo.TESTSELECT 3,'ken'

所以這種方案不太可行,會增加應(yīng)用程序出現(xiàn)Bug的風(fēng)險。那么其實我們可以新建一個表,每當(dāng)原表TEST有INSERT、UPDATE操作時,通過觸發(fā)器捕獲會話進程信息,然后插入該表(注意,新建的表包含源表的主鍵字段,例如這里TEST的主鍵字段為OBJECT_ID,那么我們下面就包含OBJECT_ID)

USE [AdventureWorks2014]GO DROP TABLE dbo.[TRG_TEST_SESSION_INFO];GO IF NOT EXISTS (SELECT 1 FROM sys.sysobjects WHERE id=object_id(N'[dbo].[TRG_TEST_SESSION_INFO]') AND OBJECTPROPERTY(id, N'IsTable')=1 )BEGINCREATE TABLE [TRG_TEST_SESSION_INFO](  [ID]        INT NOT NULL IDENTITY(1,1),  [OBJECT_ID]    INT,  [HOST_NAME]    NVARCHAR(256),  [PROGRAM_NAME]   NVARCHAR(256),  [LOGIN_NAME]    NVARCHAR(256),  CONSTRAINT PK_TRG_TEST_SESSION_INFO  PRIMARY KEY (ID)) ENDGO CREATE TRIGGER TRG_TEST_SESSION ON dbo.TESTAFTER INSERT ,UPDATEAS IF (EXISTS(SELECT 1 FROM INSERTED))BEGIN   /*  INSERT INTO dbo.[TRG_TEST_SESSION_INFO]  SELECT (SELECT I.OBJECT_ID FROM INSERTED I), HOST_NAME,program_name,login_name                   FROM  sys.dm_exec_sessions                   WHERE session_id = @@SPID*/  INSERT INTO dbo.[TRG_TEST_SESSION_INFO]  SELECT I.OBJECT_ID, S.HOST_NAME,S.PROGRAM_NAME,S.LOGIN_NAME                   FROM  sys.dm_exec_sessions s,                      Inserted i                   WHERE session_id = @@SPID  ENDGO

在運行一小段時間后,如果已經(jīng)找出了哪些服務(wù)器、哪些應(yīng)用程序會對這些表操作后,那么就必須馬上刪除這些表和觸發(fā)器,避免長時間運行,影響性能。

以上這篇SQL Server實現(xiàn)用觸發(fā)器捕獲DML操作的會話信息【實例】就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
1区2区3区在线| 国产www.大片在线| 亚洲免费国产| 国产高清在线a视频大全| 国产人成高清视频观看| 看成年女人免费午夜视频| 欧美啪啪精品| 五月天天在线| 日本中文字幕在线2020| 天堂在线看视频| 国产精品久久在线| 伊人福利在线| 亚洲国产精华液| 精品美女调教视频| 99久久精品免费观看国产| 在线观看的av| 国产麻豆视频免费观看| 国产精品视频h| а√天堂www在线а√天堂视频| 美女被人操视频在线观看| 天天av天天爱| 四虎成人精品在永久在线观看| jizz亚洲| 91欧洲在线视精品在亚洲| jizz在线免费观看| 国产一级免费看| www.三级.com| av大片在线播放| 精品国产美女福利到在线不卡| 波多野结衣久久高清免费| 国产天堂素人系列在线视频| 亚洲an天堂an在线观看| 国产黄色大片在线观看| 麻豆网站在线免费观看| av福利在线播放| 国产经典自拍视频在线观看| 久久精品无码一区二区日韩av| 97最新国自产拍视频在线完整在线看| аⅴ成人天堂中文在线| 2019中文字幕在线电影免费| 国产免费永久在线观看| 亚洲精品白浆| 白浆爆出在线观看| 国产黄在线看| 五月婷婷在线视频| 国产女王在线**视频 | 午夜小视频在线| 精品欧美色视频网站在线观看| 五月婷婷丁香激情| 国产美女免费观看| 尤物网址在线观看| 国产亚洲依依| 国产成人精品实拍在线| 国产黄色片大全| 国产精品秘入口| 国产成人无吗| 亚洲精品男人| 黄色av免费在线| 中文字幕不卡| 国产粉嫩一区二区三区在线观看| 国产精品一二三区视频| 老司机精品视频一区二区| wwww亚洲| 国产有码在线| 国产夫妻视频| 轻轻色免费在线视频| 日本h视频在线观看| 成人精品福利| 国产对白国语对白| av免费在线播放| 黄色电影网站在线观看| 国产午夜视频| 欧美性受xxxx免费视频| 国产毛片毛片毛片| 1区2区3区在线| 香蕉视频网站在线观看| 国产在线观看a视频| 9999在线视频| 国产精品一品| 热99re久久精品精品免费| 国产色视频网站| eeuss影院www在线观看| 中文字幕亚洲免费| а√资源新版在线天堂| 中文字幕第一页在线| 日本三级视频网站| 国产福利免费在线观看| 国产中文伊人| h网站久久久| 99re在线视频| 国产亚洲精品久久久网站好莱| 伊人免费在线| 国产黄色片中文字幕| 国产精品自产拍在线观看2019 | eeuss影院网站免费观看| 国产成人亚洲综合小说区| 久热中文字幕| 男人天堂v视频| 羞羞视频在线观看免费| 中文字幕视频在线免费| 久久久久久91精品色婷婷| 先锋av资源网| av在线播放av| 国产福利在线免费观看| 91福利在线免费| 国产午夜视频| 国产高清视频在线观看| 最近中文字幕mv免费高清视频8| 在线国产小视频| jizz在线免费观看| 另类综合图区| 久久久久久日本一区99| 国产原创在线播放| 国产九九九九| 国产精品剧情一区二区在线观看 | 国产人成精品| 国产黄色小视频| 亚洲视频手机在线观看| 亚洲色婷婷综合开心网| av亚洲男人天堂| 日本高清不卡中文字幕| 国产原创在线播放| 国产日产一区二区| 亚洲欧美国产另类首页| 免费99热在线观看| 中文字幕乱在线伦视频乱在线伦视频| 尤物视频免费在线观看| 国产成人综合亚洲欧美在| 伊人网站在线| 久久精品亚洲7777影院| 国产女王在线**视频 | www.色五月| jlzzjlzz欧美| 天堂在线中文| 精品国产免费观看一区| 轻轻色免费在线视频| 国产香蕉视频在线看| 亚洲成人在线播放| 国产精品区一区二| 国产中文在线视频| 亚洲一本大道| 国产网站免费观看| 欧美人成在线观看网站高清| 国产黄色免费网| 久久国产综合视频| 在线播放黄色网址| 国产精品jvid在线观看| 日本不卡视频一区二区| 国产一二三区在线观看| 日韩国产成人| 精品一区二区三区免费站| 黄色免费av| 日本免费黄色| 中文国产字幕在线观看| 中文字幕av中文字幕| 激情丁香婷婷| 久热精品免费视频| 操人视频91| 先锋av资源网| 99re在线视频| 国产va在线| 国产不卡在线| 中文字幕在线视频观看| 日本视频在线| av中文资源在线| 亚洲精品少妇久久久久久| 国产aa视频| 在线视频观看亚洲| 亚洲人成电影| 日本18视频网站| 久草.com| 尤物网站在线| 999国产在线视频| 中文国产字幕在线观看| 在线国产网址| 日本亚洲欧美| 国产美女视频一区二区三区| 国产主播福利在线| 国产永久在线观看| 综合激情亚洲| av高清资源| 免费99热在线观看| 中文字幕视频在线| av片在线观看| 国产在线超碰| 国产福利免费观看| 夜夜操天天干| 国产麻豆麻豆| 国产叼嘿网站免费观看不用充会员| 国产福利资源| 免费看的毛片| 97高清视频| 欧美亚洲系列| 国产对白叫床清晰在线播放| 欧美日韩亚洲第一页| 国产污视频在线| 人人澡人人爽| 国产经典av| 国产美女高潮| 久热精品视频在线播放|