You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Oracle数据库查询访问应用的终端用户数量

Oracle 终端用户总数统计方案

你之前执行的两个查询统计的都是会话数,无法直接对应终端用户数,主要有两个偏差:

  • 统计结果包含Oracle后台进程的内部会话,不属于终端用户产生的访问
  • 同一个终端用户可能同时建立多个会话,直接计数会出现重复统计

基础查询(适用于终端直连数据库的场景)

如果是C/S架构、用户直接连接数据库的场景,可通过终端标识联合去重统计:

SELECT COUNT(DISTINCT osuser || '#' || machine || '#' || terminal) AS 终端用户总数
FROM v$session
WHERE type = 'USER' -- 过滤Oracle后台进程会话
  AND username IS NOT NULL -- 排除未完成登陆的无效会话
  AND program NOT LIKE 'oracle%'; -- 额外过滤Oracle自带工具产生的非业务会话

字段说明:

  • osuser:终端设备的操作系统用户名
  • machine:终端设备的主机名/IP地址
  • terminal:终端的设备标识
    三个字段联合去重,可避免同一个用户多开会话导致的重复计数。

三层架构场景查询(应用服务器连接池模式)

如果是应用通过连接池访问数据库的架构,所有会话的osuser、machine都会显示为应用服务器的信息,需要应用层在建立会话时主动设置CLIENT_IDENTIFIER标记实际终端用户,之后用以下语句统计:

SELECT COUNT(DISTINCT client_identifier) AS 终端用户总数
FROM v$session
WHERE type = 'USER'
  AND client_identifier IS NOT NULL;

如果应用未设置CLIENT_IDENTIFIER,可根据实际业务逻辑,结合USERNAME、MODULE、ACTION等字段自定义去重规则即可。


内容的提问来源于stack exchange,提问作者litha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:09:01