为什么我收到“格式错误:属性'v $ session.program'”连接到Oracle?

时间:2016-01-28 21:12:21

标签: java oracle maven oracle11g

我从Java应用程序连接到Oracle 11g数据库。我遇到以下异常:

Caused by: java.sql.SQLException: Connection property: format error: Property is 'v$session.program' and value is '<My Maven application's name>'
at oracle.jdbc.driver.T4CConnection.validateConnectionProperties(T4CConnection.java:4540)
at oracle.jdbc.driver.PhysicalConnection.readConnectionProperties(PhysicalConnection.java:2345)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:517)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:207)
at oracle.ucp.jdbc.DataSourceConnectionFactoryAdapter.createConnection(DataSourceConnectionFactoryAdapter.java:100)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

我们想通了。我们的应用程序名称是一个字符太长:它是49个字符而不是48或更少。

此处列出了v$session属性及其长度限制:

  • v$session.machine:64
  • v$session.iname:无限制
  • v$session.ename:无限制
  • v$session.process:24
  • v$session.program:48
  • v$session.terminal:30
  • v$session.osuer:30

此外,没有任何属性可以匹配此正则表达式:.*[\00\(\)].*,我认为这意味着没有括号。

如果您收到错误并希望查看代码,只需在IDE中为SQLException添加异常断点即可。你应该最终进入一个名为T4CConnection.class的课程。

这是方法的反编译代码validateConnectionProperties()

  void validateConnectionProperties() throws SQLException {
super.validateConnectionProperties();
String var1 = ".*[\\00\\(\\)].*";
SQLException var2;
if(this.thinVsessionOsuser == null || !this.thinVsessionOsuser.matches(var1) && this.thinVsessionOsuser.length() <= 30) {
  if(this.thinVsessionTerminal == null || !this.thinVsessionTerminal.matches(var1) && this.thinVsessionTerminal.length() <= 30) {
    if(this.thinVsessionMachine != null && (this.thinVsessionMachine.matches(var1) || this.thinVsessionMachine.length() > 64)) {
      var2 = DatabaseError.createSqlException((OracleConnection)null, 190, "Property is \'v$session.machine\' and value is \'" + this.thinVsessionMachine + "\'");
      var2.fillInStackTrace();
      throw var2;
    } else if(this.thinVsessionProgram == null || !this.thinVsessionProgram.matches(var1) && this.thinVsessionProgram.length() <= 48) {
      if(this.thinVsessionProcess == null || !this.thinVsessionProcess.matches(var1) && this.thinVsessionProcess.length() <= 24) {
        if(this.thinVsessionIname != null && this.thinVsessionIname.matches(var1)) {
          var2 = DatabaseError.createSqlException((OracleConnection)null, 190, "Property is \'v$session.iname\' and value is \'" + this.thinVsessionIname + "\'");
          var2.fillInStackTrace();
          throw var2;
        } else if(this.thinVsessionEname != null && this.thinVsessionEname.matches(var1)) {
          var2 = DatabaseError.createSqlException((OracleConnection)null, 190, "Property is \'v$session.ename\' and value is \'" + this.thinVsessionEname + "\'");
          var2.fillInStackTrace();
          throw var2;
        }
      } else {
        var2 = DatabaseError.createSqlException((OracleConnection)null, 190, "Property is \'v$session.process\' and value is \'" + this.thinVsessionProcess + "\'");
        var2.fillInStackTrace();
        throw var2;
      }
    } else {
      var2 = DatabaseError.createSqlException((OracleConnection)null, 190, "Property is \'v$session.program\' and value is \'" + this.thinVsessionProgram + "\'");
      var2.fillInStackTrace();
      throw var2;
    }
  } else {
    var2 = DatabaseError.createSqlException((OracleConnection)null, 190, "Property is \'v$session.terminal\' and value is \'" + this.thinVsessionTerminal + "\'");
    var2.fillInStackTrace();
    throw var2;
  }
} else {
  var2 = DatabaseError.createSqlException((OracleConnection)null, 190, "Property is \'v$session.osuser\' and value is \'" + this.thinVsessionOsuser + "\'");
  var2.fillInStackTrace();
  throw var2;
}

}