Oracle数据库的经典问题 snapshot too old是什么原因引起的

ORACLE经典错误求解:ORA-1555错误(Snapshot too old ) - ...

书上说是因为the rollback image need for read consistency has prbably been overwriteten by an active transaction. 我就奇怪了,如果一个transaction占用了一些回滚段,直到它commit前,这些回滚段空间应该被锁定了呀,怎么会被其他transaction覆盖了呢?

--------------------------

rollback segment 太小

--------------------------

snapshot too old 就是指你commit,前镜像被覆盖以后 如果有查询需要访问这个前镜像构建一致性读,就会导致ORA-01555错误

-----------------------------

加大你的undo segment 的 initial extents 值, 尽量减少warp,当然undo file 要够大:) -------------------------

A. 回滾段太少/太小 導致這個錯誤,可以 創建更多的回滾段, 為回滾段設置較大的EXTENT以及較大的MINEXTENTS B.由於回滾段被破壞, 造成事務無法將修改前的內容(read-consistent snapshot) 放入回滾段, 也會產生此錯誤. 可以將被破壞的回滾段OFFLINE, 刪除重建. C. 當一個進程打開一個CURSOR, 然後迴圈執行FETCH, UPDATE, COMMIT, 如果更新的表與FETCH的是同一個表, 就很可能發生此錯誤. 解決方法: a. 使用大的回滾段 ,b. 減少提交頻率c. 建立一個臨時表, 存放要更新的表的查詢列(如主鍵及相關的條件列), 從臨時表FETCH, 更新原來的表. D. 不適當的OPTIMAL參數: 太小的OPTIMAL參數會使回滾段很快被SHRINK, 造成後續讀取操作訪問時, 先前的內容已丟失. 仔細設計OPTIMAL參數, 不要讓回滾段過於頻繁的EXTEND/SHRINK有助於問題的解決. E. DB BLOCK BUFFER太小: 如果讀一致性所請求的塊的先前內容在緩衝區中, 那麼就不用去訪問回滾段. 而如果緩衝區太小, 使得先前版本的內容在CACHE中的可能性變小, 從而必須頻繁的訪問回滾段來獲取先前的內容, 這將大大增大此錯誤發生的可能.

----------------------------

假设你的emp表很大,你在18:00运行

select * from emp;

这个语句的输出结果应该只取决于18:00的时候emp表的数据状态,但事实上,由于emp表很大,你这个语句可能要运行10分钟,然后才看到输出结果

在18:01,有人在emp表上做了一个update,update直接做到表上了,怎样使你18:00运行的select还能看到之前的数据呢?oracle用的是查询前映的办法,即把update之前的数据放到回滚段里保存,使你的select在查询到那个block的时候,会跳转去找前映,这样可以使你的select能正确运行下去。

但可能发生这种情况,就是做update的人commit了,于是前映就有可能在被你的select访问到之前被覆盖,假如真的发生了这种情况,snapshot too old的错误就出现了 ------------------------

这也说明了你的SQL执行得太慢了,需要调整,在9i中有一个undo_retention参数,假设期指定1小时,那么超过1小时的SQL就容易出现snapshot too old的错误了。 -----------------------------

----------------------------


MySQL不会出现这种问题

Oracle数据库的经典问题 snapshot too old是什么原因引起的的更多相关文章

  1. Oracle数据库shutdown immediate被hang住的几个原因

    实验操作环境:         操作系统:Red Hat Enterprise Linux ES release 4 (Nahant Update 6)                         ...

  2. [转载]Oracle数据库基础--SQL查询经典例题

    Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用 本文使用的实例表结构与表的数据如下: emp员工表结构如下: ...

  3. Oracle数据库基础--SQL查询经典例题

    Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用 本文使用的实例表结构与表的数据如下: emp员工表结构如下: ...

  4. Oracle数据库如何创建DATABASE LINK?

    Oracle数据库如何创建DATABASE LINK? 2011-08-09 14:54 taowei20061122 CSDN博客  http://blog.csdn.net/taowei20061 ...

  5. [转]Oracle数据库ASH和AWR的简单介绍

    在Oracle数据库中,有时我们可能会遇到这样的术语:ASH和AWR,那么它们是怎样产生的呢?它们的作用又是什么呢?本文我们就来介绍这一部分内容.       1.10g之前 用户的连接将产生会话,当 ...

  6. 【转】Oracle数据库中Sequence的用法

    在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方. 1.Create Sequence (注释:你需要有CREATE S ...

  7. oracle数据库元数据SQL查询

    oracle数据库经典SQL查询 .查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from ...

  8. Oracle数据库之事务

    Oracle数据库之事务 1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个 ...

  9. oracle数据库恢复与备份

    一.oracle数据库恢复 1.恢复刚才删除的一条数据 delete from emp e where e.empname='SMITH' select * from flashback_transa ...

随机推荐

  1. Jquery实现上下移动和排序代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  2. Page与Loaded

    When navigate to page, loaded event will be triggered. Back to page, loaded event will be triggered ...

  3. win8 学习笔记二 输出日志

    Win8 Store App的日志输出不像Desktop App 那么简单,见 这篇文档(http://www.cnblogs.com/xiaokang088/archive/2011/12/27/2 ...

  4. tiny6410SDK制作NFS文件系统

    1.初次编译内核出现问题 解决方法:将uboot的tools目录 下的mkimage拷贝到/bin/下. 2.开机后终端出现mmc0: error -110 whilst initialising S ...

  5. Java架构学习 转(Spring+SpringMVC+MyBatis+easyUI)

    Spring+SpringMVC+MyBatis+easyUI : http://www.cnblogs.com/han-1034683568/p/6730869.html

  6. [笔试题]MS 2014

    http://blog.csdn.net/xiaoerlyl/article/details/12126807 别人写的答案: http://blog.csdn.net/zhou2214/articl ...

  7. 关于ARM的内核架构

    很多时候我们都会对M0,M0+,M3,M4,M7,arm7,arm9,CORTEX-A系列,或者说AVR,51,PIC等,一头雾水,只知道是架构,不知道具体是什么,有哪些不同?今天查了些资料,来解解惑 ...

  8. 宏(define)与常量(const)

    http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=402470669&idx=1&sn=e34db91190d8d46f ...

  9. LNMP redis 安装、PHPredis扩展配置、服务器自启动、redis认证密码

    背景: LNMP 环境(centos7) 一. 安装redis 1.下载,解压,编译 $ cd /usr/local$ wget http://download.redis.io/releases/r ...

  10. bigpipe&bigrender

    bigpipe: 先输出页面的整体布局,在按块输出输出页面的每个部分.这样可以让服务器的运算.网络的传输和浏览器的渲染并行.适用于服务器运算较慢的时候. bigrender: 主要在浏览器端,先将字符 ...