如何查看连接到 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 数据库

从 Windows 通过 Entity Framework 连接到 Informix 的问题

无法使用 Hibernate 连接到 Informix