zoukankan      html  css  js  c++  java
  • ORA-01555 快照过旧

    用户user1对表进行了更新操作,用户user2在user1还没有进行提交前读表中数据,而且是大批量的读取(打个比方:耗时3分钟)而在这3分钟内user1进行了提交操作,那又会产生什么影响呢?这个时候怎么保证读写一致性呢?这个时候DBMS就要保证有足够大的undo表空间来存放修改前的数值,,以保证user2读取的数据是修改前的一致数据.然后下次再读取时候就是更新后的数据了.
    ora-01555快照过旧就是因为undo空间不够大,其中一部分undo数据被覆盖了,用户无法获得修改前的数据。
    undo数据分为三种:
    活动的undo:未提交事务的undo数据,这些undo数据永远不能覆盖,用于回滚rollback事务。
    过期的undo:已提交事务的undo数据,这些undo数据可以覆盖。
    未过期的undo:事务已提交,但事务提交前,有些查询正在进行,它要读取的是提交前的数据,这部分数据就是未过期数据。如果这部分undo数据被覆盖了,就会发生ora-01555错误。

    一个解决方法是,指定undo表空间参数UNDO_TABLESPACE,并将undo空间管理方法设置成自动扩展:UNDO_MANAGEMENT=AUTO。
    这种方法可能产生的结果是:
    因为undo表空间装了太多未过期(unexpired)的undo数据,新的transaction无法向其中写入undo数据,这时transaction就会发生ORA-30036错误。

    如果导出数据时,经常出现这种情况,可以减少查询的数据集

  • 相关阅读:
    .net对象生命周期 一) 转载
    HTTP的版本 转载
    sql server sql语句判断是否有表备注并进行新增或修改
    sql server update触发器
    vs文件属性复制到输出目录 转载
    c#使用log4net记录日志 转载
    windows服务定时器 转载
    vs创建项目以后修改https为http
    消息队列 转载
    nmp 设置淘宝镜像
  • 原文地址:https://www.cnblogs.com/jycjy/p/11174622.html
Copyright © 2011-2022 走看看