当前位置: 首页 > 面试题库 >

异常ORA-08103:使用Hibernate的setfetchsize时对象不再存在

段干靖
2023-03-14
问题内容

我正在使用Hibernate。我需要获取大约1000000条记录,这将导致超时异常。因此,我使用setfetchsize6000条记录,以便它将操作分散到6000条记录中的多个事务中。

获取所有内容大约需要21个小时。

但是同时检索记录时,如果有人删除了要提取的记录之一,我就会得到ORA-08103: object no longer exists

现在,我想跳过在检索时删除的对象。我怎样才能做到这一点?


问题答案:

最有可能基于已使用ON COMMIT DELETE ROWSoption 创建的全局临时表(GTT)打开了游标。ORA-08103: object no longer exists错误的原因是commit语句之后紧随其后的delete语句。这是一个简单的示例:

 SQL> declare
  2    type t_recs is table of number;
  3    l_cur sys_refcursor;    -- our cursor
  4    l_rec t_recs; 
  5  
  6  begin
  7  
  8    -- populating a global temporary table GTT1 with sample data  
  9    insert into GTT1(col)
 10      select level
 11        from dual
 12     connect by level <= 1000;
 13  
 14   open l_cur         -- open a cursor based on data from GTT1
 15    for select col
 16          from GTT1;
 17  
 18    -- here goes delete statement
 19    -- and
 20    commit;  <-- cause of the error. After committing  all data from GTT1 will be
 21              -- deleted and when we try to fetch from the cursor
 22    loop      -- we'll face the ORA-08103 error
 23      fetch l_cur    -- attempt to fetch data which are long gone.
 24       bulk collect into l_rec;
 25      exit when l_cur%notfound;
 26    end loop;
 27  
 28  end;
 29  /


ORA-08103: object no longer exists
ORA-06512: at line 24

带有on commit preserve rows语句的全局临时表的创建将允许从基于该表的游标中安全地获取数据,而不必担心会遇到
ORA-08103:错误。



 类似资料:
  • 我正在上传一个图像到Firebase存储,这个错误不断出现 E/StorageException:StorageException已发生。对象的位置不存在。代码:-13010 httpresult:404 E/StorageException:{“错误”:{“代码”:404,“消息”:“未找到。无法获取对象”, “状态”:“get_object”}}java.io.IoException:{“错误

  • 我已经尝试了StackOverflow上发布的所有解决方案,但我的问题没有在那里讨论,所以我提出了这个问题。在我的例子中,图像被上传到firebase存储桶中,但没有在firestore中插入新记录,因此发生了此错误。我的代码:- 存储数据函数如下所示:-

  • 当我调用hibernate save时,我会面临这个异常,我不知道如何解决这个问题。在我的例子中,我将join列从PrimaryKey更改为另一列,因此我面临这个异常。我不想保存客户与承销商和我只想保存外键。 我的域模型是:

  • 问题内容: 我可以通过设置为来解决此问题,但是对此我有一些疑问 当我将fetchSize设置为10或其他正整数时,它不起作用,将其设置为有效后,为什么呢? 如果我们设置负值,则它给非法值错误,但就是那么,为什么不给错误? 该表包含600万条记录,在获取100或200条记录后我关闭了该表,这需要30-35秒的时间。 减少关闭时间的解决方案。 我想在此处添加更多内容,并已使用MySQL驱动程序对其进行

  • 例如,当我对select语句使用setFetchSize()方法时 select * from tablename oracle JDBC驱动程序中的大型表。它实际上限制了JDBC客户端的内存使用。 然而,我好奇的是,该语句是否会导致oracle server将所有行存储在服务器内存中,而忽略获取大小,从而导致oracle server上出现OutOfMemory错误?

  • 我遵循一个基本的Hibernate教程。我试图在两个表之间建立一对一的关系。当我尝试插入表时,它可以工作,但是当我尝试执行相反的操作(插入表)时,我得到了这个异常: 这是类: 这是类: 这是类: 数据库图片:http://hpics.li/f1a3ee7