2014-01-31 2 views
-2

OAF 개인화를 하나의 serwer에서 다른 serwer로 복사하는 bash에서 스크립트를 만들려고 할 때이 오류가 발생합니다. 여기 내 코드는 다음과 같습니다.문자열 인덱스가 범위를 벗어 났습니까? (java oracle.jrad.tools.xml.importer.XMLImporter)

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/ 

아이디어가 있으십니까?

답변

0

당신은 전통적으로 reserved for ssh입니다 포트 (22)에 연결된다. 나는 JDBC 연결을 통해 해당 포트에 연결하면 나는 당신이 your previous question에서 보여 같은 오류 스택을 얻을 :

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 단지 포트 번호를 변경

* 순 리스너 포트는이 오류를 제거하고 연결이 성공합니다.

그래서 리스너의 실제 포트 번호를 사용하도록 변경하십시오. 기본적으로 1521이지만 사용자 정의가있을 수 있습니다. lsnrctl status이 무엇인지 알려줍니다. 권한이 부여 된 범위에 있으므로 사용자 정의 된 경우에도 22가 될 가능성은 낮으며 청취자는 바인딩하기 위해 root으로 실행해야합니다. 당신이 * 원격 서버에 ssh을 통해 인터넷 연결을 당신의 SQL을 터널링하고 있기 때문에 나는 당신이 시도했을 수도 생각할 수

유일한 이유입니다. 이 경우 원격 서버의 실제 리스너 포트에 매핑되는 로컬 포트 ​​(-L 플래그에서)를 사용해야합니다. 예를 들어, ssh -L 1234:127.0.0.1:1521 -l user 172.30.32.222이라면 dbconnectionlocalhost이고 포트는 1234입니다. 나는 당신이 분명히 22를 사용했을 것이라고 추측하고있다.

관련 문제