首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过SQLLoader加载时出现Java704内部错误

通过SQLLoader加载时出现Java704内部错误
EN

Stack Overflow用户
提问于 2019-04-09 15:31:22
回答 2查看 772关注 0票数 3

执行sqlldr命令时出现以下错误。

代码语言:javascript
运行
复制
SQL*Loader-704: Internal error: ulconnect: OCIServerAttach [0]
ORA-12154: TNS:could not resolve the connect identifier specified

以下是sqlldr cmd:

代码语言:javascript
运行
复制
sqlldr BILLING/'"Bill!ng@123#"'@10.113.242.162:1521/bssstc control=/log/bssuser/CDR/Postpaid_CDR_Log/CTRL_File.ctrl log=/log/bssuser/CDR/Postpaid_CDR_Log/LOG_File.log direct=false silent=header skip_unusable_indexes=true rows=200000 bindsize=20000000 readsize=20000000 ERRORS=25000

注意:-当通过命令提示符执行相同的命令时,它会成功。

下面是我尝试过的代码片段。

代码语言:javascript
运行
复制
            Runtime rt   = Runtime.getRuntime();
            Process proc = null;
            try {
                proc = rt.exec(sqlLoaderCommand);

                InputStream       stderr = proc.getErrorStream();
                InputStreamReader isr    = new InputStreamReader(stderr);
                BufferedReader    br     = new BufferedReader(isr);

                String line = null;
                while ((line = br.readLine()) != null){
                    logger.info(line);
                }
                int exitVal = proc.waitFor();
                logger.info("Process exitValue: " + exitVal);
                int returnValue = proc.exitValue();
                String str = null;

                if (returnValue != 0) {
                    InputStream in = proc.getInputStream();
                    InputStreamReader preader = new InputStreamReader(in);
                    BufferedReader breader = new BufferedReader(preader);
                    String msg = null;
                    while ((msg = breader.readLine()) != null) {
                        logger.info(msg);
                        str = str + msg;
                    }
                    System.out.flush();
                    preader.close();
                    breader.close();
                    in.close();
                    InputStream inError = proc.getErrorStream();
                    InputStreamReader preaderError = new InputStreamReader(inError);
                    BufferedReader breaderError = new BufferedReader(preaderError);


                    String errorMsg = null;
                    while ((errorMsg = breaderError.readLine()) != null) {
                        logger.info("Copy Error: " + errorMsg);
                        str = str + errorMsg;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (NullPointerException e) {
                e.printStackTrace();
            }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-10 10:01:55

我想可能是你的用户名有误-- "Bill!ng@123#“。查看Java中的引号转义规则。像这样:

代码语言:javascript
运行
复制
String str = "BILLING/'\"Bill!ng@123#\"'@10.113.242.162:1521";
票数 1
EN

Stack Overflow用户

发布于 2019-04-09 16:12:47

1)从命令行尝试执行tnsping 10.113.242.162,如果该工具将返回完整的描述,则必须在java中设置"oracle.net.tns_admin“。

System.setProperty("oracle.net.tns_admin", "ORACLE_DIRECTORY/network/admin"); --将正确的路径放在此处,并在代码之前执行

2)对于测试,可以尝试使用完整的连接描述。

而不是10.113.242.162:1521/bssstc ->

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.113.242.162)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=bssstc))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55587319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档