Abe*_*ler 4 sql-server sql-server-2012
我有一个正在由在未知位置运行的服务更新的表。
我已经检查了所有通常与我的数据库服务器通信的服务器,但它们似乎都没有运行相关服务。
我正在尝试追踪此服务的运行位置,我想知道是否可以查看影响特定表的查询来自何处?
这可能吗?
最简单的方法是使用触发器并从sys.dm_exec_connections
. 你需要一个日志表;我已经猜到你会想要几列,但你可能想要其他的。
CREATE TABLE dbo.LoggingTable
(
LoggingID INT NOT NULL
CONSTRAINT PK_LoggingTable
PRIMARY KEY CLUSTERED
IDENTITY(1,1)
, AppName SYSNAME
, HostName SYSNAME
, ClientNetAddress VARCHAR(255)
, LogDateTime DATETIME
);
GO
CREATE TRIGGER dbo.triggername
ON dbo.tablename /* name of the target table */
FOR INSERT, UPDATE, DELETE
AS
BEGIN
INSERT dbo.LoggingTable(AppName, HostName, ClientNetAddress, LogDateTime)
SELECT app_name(), host_name(), client_net_address, SYSDATETIME()
FROM sys.dm_exec_connections dec
WHERE dec.session_id = @@SPID;
END
GO
Run Code Online (Sandbox Code Playgroud)
请注意,如果更新来自同一台机器上的连接(“呼叫来自屋内!”),并且使用共享内存,您将获得<local machine>
IP 地址。
一旦你想通了,不要忘记放下扳机。
有关列的详细信息在sys.dm_exec_connections
归档时间: |
|
查看次数: |
2087 次 |
最近记录: |