[SQL Server]查询某个SPID,session_id对应的执行sql.

本文提供了一系列SQL查询语句,用于获取SQL Server中特定会话ID(spids)的详细信息,包括正在执行的SQL语句及会话详情。

 

 

select er.session_id, CAST(csql.text AS varchar(255)) AS CallingSQL

from master.sys.dm_exec_requests er WITH (NOLOCK)

       CROSS APPLY fn_get_sql (er.sql_handle) csql

where er.session_id =309

 

 

 session_id即为spid

 

select * from sys.dm_exec_sessions where session_id in (102,315);

 

exec   sp_who 

 

在 Oracle 数据库中,`V$SQL` 视图主要存储了共享池中 SQL 语句的统计信息,其中包含 `SQL_ID`、`SQL_TEXT`、`EXECUTIONS` 等字段。然而,`V$SQL` 视图本身并不直接记录执行 SQL 的客户端 IP 地址或机器名。 要查询与 `SQL_ID` 相关的执行 IP 地址,需要结合其他动态性能视图(如 `V$SESSION` 和 `V$PROCESS`)来获取客户端连接信息。具体方法如下: 1. **通过 `V$SESSION` 获取当前会话正在执行SQL**: 每个会话可以关联到一个正在执行SQL,通过 `V$SESSION.SQL_ID` 字段可获得当前正在执行的 `SQL_ID`。 2. **通过 `V$PROCESS` 获取客户端 IP 地址**: 在 `V$SESSION` 和 `V$PROCESS` 进行关联时,可以通过 `V$SESSION.PADDR = V$PROCESS.ADDR` 来找到对应的进程信息,其中 `V$PROCESS.SPID` 是操作系统进程 ID,而客户端 IP 地址可通过 `V$SESSION.MACHINE` 或 `V$SESSION.OSUSER` 等字段间接获取。 以下是一个示例 SQL 查询,用于查找与 `V$SQL` 中某个 `SQL_ID` 对应的客户端 IP 地址: ```sql SELECT s.sid, s.serial#, s.username, s.machine, s.osuser, p.spid AS process_id, s.program, q.sql_id, q.sql_text FROM v$session s JOIN v$process p ON s.paddr = p.addr JOIN v$sql q ON s.sql_id = q.sql_id WHERE q.sql_id = '指定的SQL_ID'; ``` - `s.machine` 表示客户端主机名。 - `s.osuser` 表示客户端操作系统用户名。 - `p.spid` 是服务器端的进程 ID。 - `q.sql_id` 和 `q.sql_text` 分别表示 SQL 的唯一标识和文本内容。 需要注意的是,`V$SQL` 中的记录可能包含多个会话共享的 SQL,因此单个 `SQL_ID` 可能对应多个客户端来源。如果希望更精确地追踪到特定执行实例,则需要使用 `V$SQL_CURSOR` 或 `V$SQLSTATS` 等视图进行进一步分析。 此外,Oracle 的 `AUDIT` 功能或 `Fine-Grained Auditing (FGA)` 可用于记录更详细的访问信息,包括客户端 IP 地址,但这通常需要提前配置审计策略[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值