Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)
UNDO表空间用于存放UNDO数据,当执行DML操作时,oracle会将这些操作的旧数据写入到UNDO段,以保证可以回滚或者一致读等,而临时表空间主要用来做查询和存放一些缓冲区数据。你听说UNDO也是临时表可能是因为这两个表空间都不会永久保存数据的原因。
-------------------------------------------------------------------------
oracle undo表空间
undo表空间用于存放undo数据,当执行DML操作(insert、update、delete)时,oracle会将这些操作的旧数据写入到undo段。
undo数据的作用
1.回退事务
当执行DML操作修改数据后,旧数据被存放在undo段中。只要数据为提交、回滚段未写满或者回滚段为超时的情况下,旧数据都能被回滚回来。
2.读一致性
通过DML操作后的数据没有提交之前,其他用户读取的数据都是回滚段里面的旧数据。
使用undo参数
1.undo_management
该初始化参数用于指定undo数据的管理方式。如果要使用自动管理模式,必须设置为auto,如果使用手工管理模式必须设置该参数为manual,使用自动管理模式时,oracle会使用undo表空间管理,使用手工管理模式时,oracle会使用回滚段管理undo数据。需要注意,使用自动管理模式时,如果没有配置初始化参数UNDO_TABLESPACE,oracle会自动选择第一个可用的UNDO表空间存放UNDO数据,如果没有可用的UNDO表空间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告。
2,UNDO_TABLESPACE
该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间.
在RAC(Real Application Cluster)结构中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每个例程配置一个独立的UNDO表空间.
3,UNDO_RETENTION
该初始化参数用于控制UNDO数据的最大保留时间,其默认值为900秒,从9i开始,通过配置该初始化参数,可以指定undo数据的保留时间,从而确定倒叙查询特征(Flashback Query)可以查看到的最早时间点.
手工管理回滚段的规划:
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL> show parameter transactions;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
transactions integer 187 ----------系统准备支持的事务连接数量。
transactions_per_rollback_segment integer 5 --------------每个回滚段支持的事务连接数量。回滚段数=187/5
SQL> show parameter rollback;
NAME TYPE VALUE
------------------------------------ ----------- ----------
fast_start_parallel_rollback string LOW
rollback_segments string ----------------------设置回滚段的数量
transactions_per_rollback_segment integer 5
SQL>
当数据库启动的时候会判断私有回滚段是否满足我们事务的要求,如果满足则打开数据库;否则数据库会去找公有回滚段。
解决办法:
用户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错误。
Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)的更多相关文章
- oracle数据库、客户端安装以及ps/sql连接和导入表实例
从下面的网址下载http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win32soft-098 ...
- Oracle 数据库基础学习 (二) 学习小例子:创建一个表,记录商品买卖的情况
运行环境:Oracle database 11g + PL/SQL Developer ex: --创建一个表 create table plspl_test_product( --加入not n ...
- ORACLE数据库,数据量大,转移数据到备份表语句
INSERT INTO TEMP_BUS_TRAVEL_INFO ( SELECT * FROM BUS_TRAVEL_INFO t ') SELECT COUNT(*) FROM TEMP_BUS_ ...
- Oracle数据库操作总是显示运行中无法成功,删除表时报错 resource busy and acquire with NOWAIT specified
1.直接运行以下语句: select t2.username,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2wh ...
- 查询oracle数据库中的for update 中锁住的table表sql语句
SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s W ...
- Oracle数据库操作
本例使用oracle数据库,使用PL/SQL可视化工具: --查询员工表数据 (emp为pl/sql自带的表,也可自己新建)select * from emp; --创建表空间create table ...
- Oracle数据库之四
删除记录的SQL语句 delete from 表名[where 条件];(DML) 注意: 如果没有where子句,代表全部删除(慎用). delete也必须commit后才能生效 truncate也 ...
- (ASP.NET)C#连接Oracle数据库示例(中文乱码问题解决)
接手了一个遗留的ASP.NET系统,数据库用的是Oracle,以前没搞过.NET和Oracle数据库,数据库搞了半天才解决乱码问题,在此做个笔记备忘. 1.下载安装ODAC 1)请去Oracle官网下 ...
- 第二章 Oracle数据库应用
第二章 Oracle数据库应用2.1 表空间和用户权限下管理 2.1.1 表空间 2.1.1.1 分类: 永久性表空间 临时性表空间 ...
随机推荐
- [转]easyui常用控件及样式收藏
CSS类定义: div easyui-window window窗口样式 属性如下: 1) modal:是否生成模态窗口.tru ...
- HTTP请求大全
1xx - 信息提示这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应.100 - 继续101 - 切换协议 2xx - 成功这类状态代码表明服务器成功地接受了客 ...
- RMA编码为必输
应用 Oracle Inventory 层 Level Function 函数名 Funcgtion Name RCV_RCVTXERE 表单名 Form Name RCVTXERE 说明 Descr ...
- lint使用简介
LINT工具是一种软件质量保证工具,许多国外的大型专业软件公司,如微软公司,都把它作为程序检查工具,在程序合入正试版本或交付测试之前一定要保证通过了LINT检查,他们要求软件工程师在使用LINT时要打 ...
- Qt窗口的标题栏自绘
因个人需要,要修改Qt Widget的标题栏,网上找了大半天,没有得到答案,但发现问的人比较多 所以现将找到的此文分享一下. (原文:http://www.qtsoftware.com/develop ...
- NOI2014 Day2
NOI2014 Day2 动物园 题目描述:给出一个字符串(长度为\(Len\)),设\(num[i]\)为字符串的前\(i\)个字符构成的子串(\(A\))中,满足\(A\)的前\(L\)个字符既是 ...
- dg error
startup force;ORACLE instance started. Total System Global Area 1068937216 bytesFixed Size ...
- UberX及以上级别车奖励政策(优步北京第二、三组)
优步北京第二.三组: 定义为2015年6月1日至7月19日激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版 ...
- [poj 2978]Colored Stones[状态压缩DP]
题意: 给出n个石子,一共m种颜色.问最少去掉几个石子使得同种颜色全连续. 思路见注释. #include <algorithm> #include <cstdio> #inc ...
- python-操作exel(xlrd,xlwt)
1.使用第三方库 python中处理excel表格,常用的库有xlrd(读excel)表.xlwt(写excel)表.openpyxl(可读写excel表)等. xlrd读数据较大的excel表时效率 ...