代码之家  ›  专栏  ›  技术社区  ›  ninesided

如何使Java应用程序在连接时向Oracle标识自己?

  •  7
  • ninesided  · 技术社区  · 16 年前

    当我的应用程序连接到Oracle数据库时,我希望能够通过查看它所连接的数据库中的活动会话来查看。目前,它将自己标识为“JDBC瘦客户机”,因为这是我正在使用的驱动程序,但我拥有的其他基于Java的应用程序能够以某种方式将此值设置为更有意义的值,如“SQL开发人员”。我还以为这是我的财产呢 Connection 或者 OracleDataSource

    4 回复  |  直到 16 年前
        1
  •  23
  •   Peter Lang    11 年前
    java.util.Properties props = new java.util.Properties();
    props.setProperty("password","mypassword");
    props.setProperty("user","myusername");
    props.put("v$session.osuser", System.getProperty("user.name").toString());
    props.put("v$session.machine", InetAddress.getLocalHost().getCanonicalHostName());
    props.put("v$session.program", "My Program Name");
    DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
    Connection conn=
        DriverManager.getConnection("jdbc:oracle:thin:@myhostname:1521:mysid", props);
    

    SQL>select username,osuser,program,machine
    from v$session
    where username = 'ROB'; 
    
    USERNAME  OSUSER       PROGRAM             MACHINE
    --------- -----------  ------------------  -----------
    ROB       rmerkw       My Program Name     machine
    

    客户信息 , 模块 行动 在里面 :

    dbms_application_info.set_client_info
    dbms_application_info.set_module
    dbms_application_info.set_action
    
        2
  •  3
  •   Manuel unwind    8 年前

    connection.setClientInfo("OCSID.CLIENTID", "MyClientId");
    

    动作、客户端ID、ECID、模块、序列号和DBOP

    https://docs.oracle.com/database/121/JJDBC/jdbcvers.htm#JJDBC29006

    设置程序不能以这种方式工作,您可以按照公认的答案中所述进行设置,或者通过设置系统属性“oracle.jdbc.v$session.PROGRAM”进行设置。

        3
  •  2
  •   skaffman    16 年前

    v$session.program 在数据源中,该属性将被添加到每个连接中。如何做到这一点取决于您的数据源实现。将属性设置为的值将显示在oracle的活动会话表中。

        4
  •  2
  •   JeeBee    16 年前

    dbms_application_info.set_client_info('Client Info');
    

    它在v$session中设置ClientInfo列。

        5
  •  1
  •   Marmite Bomber    6 年前

    从12.1开始 setEndToEndMetrics 已弃用,您可以使用 setClientInfo here

    这里是用法的一个片段

    // "conn" is an instance of java.sql.Connection:
    conn.setClientInfo("OCSID.CLIENTID", "clientID");
    conn.setClientInfo("OCSID.MODULE", "myModule");
    conn.setClientInfo("OCSID.ACTION", "myAction");
    

    V$SESSION 使用此查询相关会话

     select MODULE, ACTION, CLIENT_IDENTIFIER from v$session where ...
    

    . 召唤 setClientInfo

    还请注意,您必须使用Oracle(未包装)conenction-Check this

    推荐文章