Você está passando todas as informações de conexão como um único valor; equivalente a isso a partir de uma linha de comando:
sqlplus "sys as sysdba/[email protected]<connect_string>"
que obteria a mesma resposta de imprimir a ajuda de logon do SQL*Plus. Você também tem sua senha no lugar errado, mas não está chegando tão longe. A partir de uma linha de comando, isso funcionaria:
sqlplus "sys/tiger" "as" "[email protected]<connect_string>"
então você precisa passar 5 argumentos para
ProcessBuilder
, algo como: String sqlCmd = "sqlplus";
String arg1 = "sys/tiger";
String arg2 = "as";
String arg3 = "[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname)(Port=PORT ID))(CONNECT_DATA=(SID=SID)))";
String arg4 = fileName;
...
ProcessBuilder pb = new ProcessBuilder(sqlCmd, arg1, arg2, arg3, arg4);
Isso ainda funcionará apenas se seu ambiente estiver configurado para permitir conexão remota como
sysdba
. Fazendo qualquer coisa como sys
deve ser muito raro e ter um script que você deseja executar como sys
parece incomum o suficiente para um wrapper Java parecer um exagero - e faz parecer que você pode se conectar como sys
rotineiramente, o que não é uma boa ideia - mas talvez seja apenas um exercício de aprendizagem.