【问题标题】:Statement couldn't be executed, please retry: oracle.kv.FaultException: no such object in table (12.1.4.3.11) (18.3.10)语句无法执行,请重试:oracle.kv.FaultException: no such object in table (12.1.4.3.11) (18.3.10)
【发布时间】:2019-03-07 15:30:41
【问题描述】:

我正在使用包含 Oracle NoSQL 数据库的 Docker 容器。我正在尝试使用 Java 程序创建一个表并填写一些记录。

我试图存储的数据是来自存储在 JSON 文件中的推文的元数据,但为了简单起见,我准备了一个带有更基本示例的演示。在这个演示中,我将尝试创建并填充一个只有 4 个字段的表和一个非常简单的 JSON 文件,其中包含要存储的数据。代码如下:

private static void demo(KVStore kvstore, String file2load) {
    //Creating the table
    String query = "CREATE TABLE Carros (plate STRING, brand STRING, owner STRING, km NUMBER, primary key (plate))";
    try {
        kvstore.executeSync(query);
    } catch (IllegalArgumentException e) {
        System.out.println("Invalid statement:\n" + e.getMessage());
    } catch (FaultException e) { //ATENTION HERE <-
        System.out.println("Statement couldn't be executed, please retry: " + e);
    }
    System.out.println("Table created");
    //Fill up the table
    populateTable(kvstore, file2load);
    System.exit(0);
}

你在上面看到的是main中调用的方法。现在,我也将 populateTable() 方法留在这里,虽然它工作正常:

private static void populateTable(KVStore kvstore, String file2load) {
    TableAPI tableH = kvstore.getTableAPI();
    Table myTable = tableH.getTable("Carros");

    BufferedReader br = null;
    FileReader fr = null;

    try {
        String jObj = "";
        String currLine;
        int tCount = 0;
        boolean buildObj = false;
        boolean beganParsing = false;

        fr = new FileReader(file2load);
        br = new BufferedReader(fr);

        while ((currLine = br.readLine()) != null) {
            tCount += countParens(currLine, '{'); 

            if ((currLine = br.readLine()) == "\n") {
                continue;
            }

            if (tCount > 0) {
                buildObj = true;
                beganParsing = true;
            }
            //Anadimos la linea leida
            if (buildObj) {
                jObj += currLine;
            }

            tCount -= countParens(currLine, '}');
            if (tCount < 1)
                buildObj = false;


            if (beganParsing && !buildObj) {
                Row row = myTable.createRowFromJson(jObj, false);
                tableH.put(row, null, null);
                jObj = "";
            }
        }//While

    } catch (FileNotFoundException fnfe) {
        System.out.println("File not found: " + fnfe);
        System.exit(-1);
    } catch (IOException ioe) {
        System.out.println("IOException: " + ioe);
        System.exit(-1);
    } finally {
        try {
            if (br != null)
                br.close();
            if (fr != null)
                fr.close();
        } catch (IOException iox) {
            System.out.println("IOException on close: " + iox);
        }
    }
}//populateTable

所以我的问题是,每次我执行这个程序时,它都会毫无问题地到达执行结束,因为我使用 try-catch 块,但是,它不会创建或填充任何表。我收到的消息是:

语句无法执行,请重试:oracle.kv.FaultException: no such object in table (12.1.4.3.11) (18.3.10) 故障类名:oracle.kv.impl.admin.AdminFaultException

我已经在上面的第一段代码中注释了导致这种情况的异常。由于我没有发现任何成功搜索此问题,我删除了 try-catch 以获得更详细的错误跟踪:

线程“main”中的异常 oracle.kv.FaultException:表中没有这样的对象 (12.1.4.3.11) (18.3.10) 故障类名:oracle.kv.impl.admin.AdminFaultException 在 oracle.kv.impl.client.admin.DdlStatementExecutor.executeDdl(DdlStatementExecutor.java:400) 在 oracle.kv.impl.api.KVStoreImpl.executeDdl(KVStoreImpl.java:3242) 在 oracle.kv.impl.api.KVStoreImpl.execute(KVStoreImpl.java:3157) 在 oracle.kv.impl.api.KVStoreImpl.executeSync(KVStoreImpl.java:3328) 在 oracle.kv.impl.api.KVStoreImpl.executeSync(KVStoreImpl.java:3321) 在 writer_v01.demo(writer_v01.java:267) 在 writer_v01.main(writer_v01.java:51) 原因:表中没有这样的对象(12.1.4.3.11)java.rmi.NoSuchObjectException:表中没有这样的对象 在 sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:283) 在 sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:260) 在 sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161) 在 java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227) 在 java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179) 在 com.sun.proxy.$Proxy23.getSerialVersion(未知来源) 在 oracle.kv.impl.util.registry.RemoteAPI.(RemoteAPI.java:40) 在 oracle.kv.impl.sna.StorageNodeAgentAPI.(StorageNodeAgentAPI.java:95) 在 oracle.kv.impl.sna.StorageNodeAgentAPI.wrap(StorageNodeAgentAPI.java:104) 在 oracle.kv.impl.util.registry.RegistryUtils.getStorageNodeAgent(RegistryUtils.java:577) 在 oracle.kv.impl.admin.Admin.getSNStatus(Admin.java:3973) 在 oracle.kv.impl.admin.Admin.getSNsVersion(Admin.java:3938) 在 oracle.kv.impl.admin.Admin.getStoreVersion(Admin.java:3781) 在 oracle.kv.impl.admin.plan.TablePlanGenerator.checkStoreVersion(TablePlanGenerator.java:122) 在 oracle.kv.impl.admin.plan.TablePlanGenerator.createAddTablePlan(TablePlanGenerator.java:100) 在 oracle.kv.impl.admin.plan.Planner.createAddTablePlan(Planner.java:493) 在 oracle.kv.impl.admin.TableDdlOperation$CreateTable.perform(TableDdlOperation.java:97) 在 oracle.kv.impl.admin.DdlHandler$DdlOperationExecutor.execute(DdlHandler.java:645) 在 oracle.kv.impl.admin.DdlHandler.handleResults(DdlHandler.java:293) 在 oracle.kv.impl.admin.DdlHandler.(DdlHandler.java:105) 在 oracle.kv.impl.admin.Admin.executeStatement(Admin.java:4488) 在 oracle.kv.impl.admin.ClientAdminServiceImpl$1.execute(ClientAdminServiceImpl.java:65) 在 oracle.kv.impl.admin.ClientAdminServiceImpl$1.execute(ClientAdminServiceImpl.java:62) 在 oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:118) 在 oracle.kv.impl.admin.ClientAdminServiceImpl.execute(ClientAdminServiceImpl.java:62) 在 sun.reflect.GeneratedMethodAccessor176.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 oracle.kv.impl.security.MethodHandlerUtils.invokeMethod(MethodHandlerUtils.java:44) 在 oracle.kv.impl.security.SecureProxy$CheckingHandler.invoke(SecureProxy.java:559) 在 oracle.kv.impl.security.SecureProxy.invoke(SecureProxy.java:114) 在 com.sun.proxy.$Proxy18.execute(未知来源) 在 sun.reflect.GeneratedMethodAccessor176.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) 在 sun.rmi.transport.Transport$1.run(Transport.java:200) 在 sun.rmi.transport.Transport$1.run(Transport.java:197) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.rmi.transport.Transport.serviceCall(Transport.java:196) 在 sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 在 oracle.kv.impl.admin.Admin.getSNStatus(Admin.java:3975) 在 oracle.kv.impl.admin.Admin.getSNsVersion(Admin.java:3938) 在 oracle.kv.impl.admin.Admin.getStoreVersion(Admin.java:3781) 在 oracle.kv.impl.admin.plan.TablePlanGenerator.checkStoreVersion(TablePlanGenerator.java:122) 在 oracle.kv.impl.admin.plan.TablePlanGenerator.createAddTablePlan(TablePlanGenerator.java:100) 在 oracle.kv.impl.admin.plan.Planner.createAddTablePlan(Planner.java:493) 在 oracle.kv.impl.admin.TableDdlOperation$CreateTable.perform(TableDdlOperation.java:97) 在 oracle.kv.impl.admin.DdlHandler$DdlOperationExecutor.execute(DdlHandler.java:645) 在 oracle.kv.impl.admin.DdlHandler.handleResults(DdlHandler.java:293) 在 oracle.kv.impl.admin.DdlHandler.(DdlHandler.java:105) 在 oracle.kv.impl.admin.Admin.executeStatement(Admin.java:4488) 在 oracle.kv.impl.admin.ClientAdminServiceImpl$1.execute(ClientAdminServiceImpl.java:65) 在 oracle.kv.impl.admin.ClientAdminServiceImpl$1.execute(ClientAdminServiceImpl.java:62) 在 oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:118) 在 oracle.kv.impl.admin.ClientAdminServiceImpl.execute(ClientAdminServiceImpl.java:62) 在 sun.reflect.GeneratedMethodAccessor176.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 oracle.kv.impl.security.MethodHandlerUtils.invokeMethod(MethodHandlerUtils.java:44) 在 oracle.kv.impl.security.SecureProxy$CheckingHandler.invoke(SecureProxy.java:559) 在 oracle.kv.impl.security.SecureProxy.invoke(SecureProxy.java:114) 在 com.sun.proxy.$Proxy18.execute(未知来源) 在 sun.reflect.GeneratedMethodAccessor176.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) 在 sun.rmi.transport.Transport$1.run(Transport.java:200) 在 sun.rmi.transport.Transport$1.run(Transport.java:197) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.rmi.transport.Transport.serviceCall(Transport.java:196) 在 sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 在 sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:283) 在 sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:260) 在 sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161) 在 java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227) 在 java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179) 在 com.sun.proxy.$Proxy2.execute(未知来源) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 oracle.kv.impl.security.MethodHandlerUtils.invokeMethod(MethodHandlerUtils.java:44) 在 oracle.kv.impl.security.ContextProxy$ContextMethodHandler.invoke(ContextProxy.java:197) 在 oracle.kv.impl.security.ContextProxy.invoke(ContextProxy.java:61) 在 com.sun.proxy.$Proxy2.execute(未知来源) 在 oracle.kv.impl.client.admin.ClientAdminServiceAPI.execute(ClientAdminServiceAPI.java:111) 在 oracle.kv.impl.client.admin.DdlStatementExecutor.executeDdl(DdlStatementExecutor.java:363) ... 6 更多 我一直在寻找为什么这不起作用。而且,我什至不能像

这样在 kv 终端上执行操作
execute "CREATE TABLE ....."

因为它也不起作用。有任何想法吗?提前谢谢你。

【问题讨论】:

  • 这个异常意味着你正在使用一个陈旧的存根,即一个远程对象的存根,自从你获得它之后就没有被导出。在这个框架内如何发生这种情况是一个谜。您应该将此作为错误报告给 Oracle。

标签: java database exception rmi oracle-nosql


【解决方案1】:

在try块中引入query变量声明解决了这个问题;换句话说:

private static void demo(KVStore kvstore, String file2load) {
//Creating the table
String query;
try {
query = "CREATE TABLE Carros (plate STRING, brand STRING, owner STRING, km NUMBER, primary key (plate))";
    kvstore.executeSync(query);
} catch (IllegalArgumentException e) {
    System.out.println("Invalid statement:\n" + e.getMessage());
} catch (FaultException e) { //ATENTION HERE <-
    System.out.println("Statement couldn't be executed, please retry: " + e);
}
System.out.println("Table created");
//Fill up the table
populateTable(kvstore, file2load);
System.exit(0);
}

但是,如果你执行命令:

执行“SELECT * FROM Carros”

将返回 0 行,但是,如果您通过 SQLDeveloper 查看该表,您将看到它已正确创建并且还包含 JSON 文件中引入的数据。我得出的结论是,这确实是一个错误。

我建议任何遇到@user207421 在他的评论中所说的相同问题的人打开 Oracle 错误报告。

【讨论】:

  • 很抱歉,您的解决方案对我来说似乎不合适。对我来说,这看起来像是一个间歇性问题,在您下次尝试时得到了解决..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2018-05-24
相关资源
最近更新 更多