【问题标题】:Handling JDBC connection when v$session.osuser value is more than 30 chars当 v$session.osuser 值超过 30 个字符时处理 JDBC 连接
【发布时间】:2018-10-24 10:54:57
【问题描述】:

我正在安装第三方应用程序,它在连接到 oracle 12.1 时将 v$session.osuser 的值设置为用户名。不幸的是,我的 linux 帐户的用户名长度为 34 个字符,因此无法完成安装。

我无法更改 linux 帐户用户名,也无法以编程方式编辑连接属性,因为我无权访问应用程序源。

以下是我迄今为止的尝试(没有成功):

  1. 更新了 .bash_profile 以将 linux USER 属性的值修整为 29 个字符
  2. 添加了两个命令行参数,-Doracle.jdbc.v$session.osuser={USER:0:29} 和 -Duser.name={USER:0:29}

还有其他可行的方法吗?

【问题讨论】:

  • 是否可以选择升级到 Oracle 12.2?该版本最多允许 128 个字节。
  • 我确实将它升级到了 12.2。正如您所说,osuser 列在此版本中占用 128 个字符,但我仍然在此列上收到格式错误。它对该列中插入的特殊字符有任何限制吗?我们正在使用 @ 和 .在用户名中
  • 我认为数据库通常不会限制这些字符。我查看了 400 个数据库上的select distinct osuser from gv$session;,发现名称中有字母、数字、“$”、“/”、“.”、“@”和“_”。您能否准确添加您收到的错误消息?
  • 我发现了问题。尽管 oracle 支持 128 个字符,但我们使用的 ojdbc jar 仍在验证 30 个字符。我们目前使用的是 ojdbc8-12.2.0.1 jar。我们还有其他 12.2 版本的最新 ojdbc jar 吗?

标签: java oracle jdbc ojdbc


【解决方案1】:

我遇到了同样的问题,并设法通过在 JVM 中设置 user.name 值来解决它。所以,添加:

-Duser.name=<shorter-name>

...作为启动 JVM 时的一个选项。

【讨论】:

  • 我设法使用 export JAVA_TOOL_OPTIONS=-Duser.name= 解决了这个问题
  • @KumarV 这对我有用。这是使用 SQL Developer 时的解决方案。
【解决方案2】:

试试:

java -Doracle.jdbc.v\$session.osuser="my_user" ...

【讨论】:

  • 非常简短的回答。你能把它描述得更清楚一点吗?
  • @Nikolay 例如:使用这个命令行 /appli/java/java8/bin/java -Doracle.jdbc.v\$session.osuser="santa_claus" myjar.jar 将使 Oracle您在应用程序中创建的会话显示为由 Osuser“santa_claus”启动。换句话说,v$session.osuser 将读取“santa_claus”。您还可以设置这 3 列: -Doracle.jdbc.v\$session.machine="whatever" -Doracle.jdbc.v\$session.program="My program" -Doracle.jdbc.v\$session.terminal ="我的任期"
  • 从 Oracle 数据库版本 18c 开始,JDBC 驱动程序支持一个新文件 ojdbc.properties,它可以更轻松地将连接属性传递给 Java 应用程序。在这个文件中,您可以使用类似:oracle.jdbc.v$session.osuser=
【解决方案3】:

对于 SQLDeveloper MacOS,我添加了这一行

AddVMOption -Duser.name=danieloleary

进入文件~/.sqldeveloper/21.4.2/product.conf 然后重新启动应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2015-10-15
    相关资源
    最近更新 更多