如何查看连接到 Informix 数据库的应用程序名称?
Posted
技术标签:
【中文标题】如何查看连接到 Informix 数据库的应用程序名称?【英文标题】:How to see name of application connected to Informix database? 【发布时间】:2019-09-10 06:31:40 【问题描述】:在 JDBC 中有:
Connection.setClientInfo("ApplicationName", myAppName);
使用 PostgreSQL 我可以通过 SQL 查询看到myAppName
:
select * from pg_stat_activity;
使用 Informix,我希望在 syssessions
表的 feprogram
列中看到它,但它是空的。我也尝试了onstat
命令行实用程序,但我看不到任何会话列表。
我的环境:
客户端:Informix Dynamic Server 4.50.JC1 的 Informix JDBC 驱动程序
服务器:IBM Informix 动态服务器版本 11.50.FC4
【问题讨论】:
我认为您可以在 11.50 之后的版本中看到信息(可能是 11.70,可能是 12.10,可能是 14.10)。您的目标应该是从 11.50 更新到至少 12.10,最好是 14.10。 【参考方案1】:这里有几点需要注意。首先是至少对于 Informix 12.10 和 14.10 服务器,feprogram 由 JDBC 驱动程序填充。 JDBC 驱动程序会根据它是否提交 feprogram 数据来查找服务器功能,而 11.50 可能对它来说太旧了??
这是使用 4.50.1 JDBC 驱动程序和 14.10 Informix 服务器的 feprogram 输出示例。
[bhughes@ultima ~]$ dbaccess sysmaster -
Database selected.
> select feprogram from syssessions where sid=429;
feprogram Thread[id:1, name:main, path:/work/jdbc/jdbc-4.50.1.jar]
1 row(s) retrieved.
现在适用于 JDBC 和 Connection.setClientInfo() API。 JDBC 规范只要求驱动程序支持为DatabaseMetadata#getClientInfoProperties 返回的任何参数设置/获取客户端信息。自 4.50.1 起,Informix 不为此返回任何值,因此这告诉我们它目前不支持从 Connection 对象设置或检索任何客户端信息属性。
“ApplicationName”客户端信息参数不是 JDBC 标准,而是并非所有数据库都支持的供应商特定参数。
如果 Informix JDBC 驱动程序确实支持客户端信息属性,那就太好了,只是目前不支持。
对于 Alexandre 提供的 CLIENT_LABEL,您必须拥有相应的 12.10XC10 或更高版本的服务器才能正常工作。
【讨论】:
【参考方案2】:Informix 12.10.xC10 新特性展示:
更轻松的会话跟踪 CSDK:引入新的 CLIENT_LABEL 环境变量,方便客户端标记自己以进行监控所以你的 CSDK 没问题,因为它是从 4.10.xC10 开始的。
但我不知道引擎是否会识别它。
onstat -g ses
onstat -g env
和select on sysmaster也可以用来追踪。
请考虑尽快升级。
【讨论】:
CLIENT_LABEL 需要相应的 12.10.xC10 或更高版本的服务器才能正常工作。我注意到知识中心的 CLIENT_LABEL 文档中没有提到该部分。以上是关于如何查看连接到 Informix 数据库的应用程序名称?的主要内容,如果未能解决你的问题,请参考以下文章
连接到 informix 数据库 windows 窗体应用程序
如何从 ASP.NET 脚本连接到 Informix 数据库?
在 Windows 上使用 pyodbc 连接到 Informix
无法将 Spring Boot 应用程序连接到 IBM Informix 数据库