如何让我的客户端应用程序名称显示在java的zos上?

时间:2013-03-22 16:24:26

标签: db2 zos

This page说我可以将“clientProgramName”作为连接参数之一,它将在db2上显示为相关ID。

我引用:

  

在a的info参数中的java.util.Properties值中   DriverManager.getConnection调用。

我们正在使用z / OS。对于这种东西,DB2的z / OS版本似乎更受限制。

在connect调用的params散列中设置客户端程序名称似乎没有任何效果,当我把它放在连接字符串url的末尾时(它也说我可以这样做):

jdbc:db2://localhost:5036/DBNAME:clientProgramName=myprog

我收到此错误:

[jcc][10165][10051][4.11.77] Invalid database URL syntax: 
jdbc:db2://localhost:5036/DBNAME:clientProgramName=myprog. 
ERRORCODE=-4461, SQLSTATE=42815 

有没有办法将自定义用户字符串发送到z / OS db2服务器,以便可以在服务器上识别连接?

4 个答案:

答案 0 :(得分:3)

根据您用于连接DB2的方法,使用:

<强>的Class.forName

Class.forName("com.ibm.db2.jcc.DB2Driver");
Properties props = new Properties();
props.put("user", "scott");
props.put("password", "tiger");
props.put("clientProgramName", "My Program 1");
Connection conn = DriverManager.getConnection(
    "jdbc:db2://localhost:50000/sample", props);

<强>数据源

Connection conn = null;
DB2SimpleDataSource ds = new com.ibm.db2.jcc.DB2SimpleDataSource();
ds.setDriverType(4);
ds.setServerName("localhost");
ds.setPortNumber(50000);
ds.setDatabaseName("sample");
ds.setUser("scott");
ds.setPassword("tiger");
ds.setClientProgramName("My Application 2");
conn = ds.getConnection();

我写了一篇博客:http://angocadb2.blogspot.fr/2012/12/nombre-de-la-conexion-java-en-db2-java.html(使用您最喜欢的翻译,因为它是西班牙文)

答案 1 :(得分:2)

根据此page on Info CenterDB2Connection界面上应该有一个允许您更改应用程序标识符的函数setDB2ClientApplicationInformation(我无法直接链接,因为有没有锚,只是搜索那个名字。)

您可以使用CURRENT CLIENT_APPLNAME特殊寄存器来提取当前的应用程序ID:

SELECT CURRENT CLIENT_APPLNAME FROM SYSIBM.SYSDUMMY1

还有一些其他方法可以设置上面列出的信息中心链接中列出的注册表,包括WLM_SET_CLIENT_INFO功能。

答案 2 :(得分:1)

我不是DB2专家,但我查看DB2 for z / OS生成的跟踪记录,其中包含“关联ID”(跟踪的字段QWHCCV in the product section correlation header)记录)匹配我使用setClientProgramName(我的Java应用程序中的DB2数据源的方法)设置的值。

我的Java应用程序类似于AngocA给出的“DataSource”示例,类似于IBM技术说明'The name of a DB2 JDBC application appears as "db2jcc_application". How to change it?'中引用的代码。在我的Windows PC上运行的这个Java应用程序连接到DB2 for z / OS。它也 - 这很重要,取决于你已经启动的DB2跟踪(下面讨论过) - 连接后实际执行某些操作。例如:

pstmt=conn.prepareStatement("SELECT ... ");
rset=pstmt.executeQuery();

当你说,关于AngocA给出的第一个例子,“它没有做任何事情”:你希望看到什么?究竟在哪里,你在寻找什么,以及你用什么方法(或工具)来寻找它?

例如,如果您正在寻找包含与您的相关ID匹配的QWHCCV字段值的SMF类型100,101或102条记录(由DB2跟踪生成),那么(如果这是明显的流血,请道歉,教您如何在DB2 for z / OS上,您需要启动生成这些记录的DB2跟踪(使用DB2命令START TRACE)。否则,将没有什么可看的(“它什么都不做”)。请注意,并非应用程序生成的所有DB2跟踪记录(例如上述Java应用程序)都将包含您的相关ID;在处理的某一点之前,这些记录的相关ID将具有不同的值(但这是偏离主题的,并且无论如何都是我所熟悉的。)

警告:尝试在“沙箱”(开发或测试)DB2系统上启动DB2跟踪,而不是生产DB2系统。 DB2跟踪可能会导致大量数据。

在“THREAD-INFO =”之后,您还会在某些DB2 V10消息(例如DSNL027I)的消息文本中看到相关ID。

答案 3 :(得分:0)

对我来说,我必须在每个连接参数之后添加一个分号。

您的情况的EX: jdbc:db2:// localhost:5036 / DBNAME:clientProgramName = myprog;

EX具有多个参数: jdbc:db2:// localhost:5036 / DBNAME:clientProgramName = myprog; enableSysplexWLB = true; blah = true;