字符串索引越界?(Java oracle.jrad.tools.xml.importer.XMLImporter).



当我尝试在 bash 中制作脚本将 OAF 个性化从一个服务器复制到另一个服务器时,我收到此错误。这是我的代码:

java oracle.jrad.tools.xml.importer.XMLImporter /ORACLE/apps/apps_st/comn/html_personal/oracle/apps/eng/changemgmt/webui/customizations/site/0/UserAttributesPG.xml 
-username apps
-password apps
-dbconnection "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST= 172.30.32.222)(PORT=22))(CONNECT_DATA=(SID=SRV)))" 
-rootdir ORACLE/apps/apps_st/comn/html_personal/oracle/apps/eng/changemgmt/webui/customizations/site/0/

有什么想法吗?

您正在连接到端口 22,该端口传统上是为ssh保留的。如果我使用 JDBC 连接连接到该端口,我会得到您在上一个问题中显示的相同错误堆栈:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 25978
at java.lang.String.checkBounds(String.java:401)
at java.lang.String.<init>(String.java:338)
at oracle.net.ns.Packet.extractData(Packet.java:429)
at oracle.net.ns.RefusePacket.<init>(RefusePacket.java:72)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:356)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
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.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:157)

好吧,由于我的连接方式和我使用的版本,堆栈略有不同,但字符串索引是相同的。看起来ssh正在使用 JDBC 驱动程序希望从侦听器看到的更多数据来响应连接。

仅将端口号更改为有效的 SQL*Net 侦听器端口可消除此错误,连接成功。

因此,请更改为使用侦听器的实际端口号; 默认情况下为 1521,但您可能有一些自定义内容。lsnrctl status会告诉你它是什么。即使它是自定义的,它也不太可能是 22,因为它在特权范围内,侦听器需要按root运行才能绑定到它。

我认为您可能已经尝试过的唯一原因是因为您正在通过ssh将 SQL*Net 连接隧道传输到远程服务器。如果是这种情况,则需要使用映射到远程服务器上实际侦听器端口的本地端口(来自-L标志)。因此,如果你有,比如说,ssh -L 1234:127.0.0.1:1521 -l user 172.30.32.222,你的dbconnection会指向localhost和移植1234。我推测你为什么会使用 22,很明显。

相关内容

  • 没有找到相关文章

最新更新