- 浏览: 177738 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wsdst497:
chrome 版本号39 新窗口还是会被屏蔽
超链接实现新窗口打开很容易 -
zhanyeting:
[b][/b]
ajax 页面无刷新更改数据库中的内容 -
ewf_momo:
...
STRUTS 2 -
gaoxingang2008:
排一下版 太乱了
javascript -
javsky:
经验值得借鉴,项目还是不错的~我们公司最近也在做相关的项目,物 ...
IT个人年终工作总结[1]
Oracle 的Undo有两种方式: 一是使用undo 表空间,二是使用回滚段.
我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要指定一个UNDO 表空间。 如果设为manual,系统启动后使用rollback segment方式存储undo信息。如果系统没有指定undo_management,那么系统默认以manual方式启动,即使设置了auto方式的参数,这些参数将被忽略。
当实例启动的时候,系统自动选择第一个有效的undo表空间或者是rollback segment,如果没有有效的可用的undo表空间或者是回滚段,系统使用system rollback segment。这种情况是不被推荐的,当系统运行在没有undo的情况下,系统会在alert.log中记录一条警告信息。
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
参考:Oracle undo 管理
http://blog.csdn.net/tianlesoftware/archive/2009/11/30/4901666.aspx
一. UNDO 表空间
下面来看一下undo 的表空间管理。先来查看一下表空间的使用情况:
/* Formatted on 2010/6/23 9:46:58 (QP5 v5.115.810.9015) */
SELECT a.tablespace_name,
ROUND (a.total_size) "total_size(MB)",
ROUND (a.total_size) - ROUND (b.free_size, 3) "used_size(MB)",
ROUND (b.free_size, 3) "free_size(MB)",
ROUND (b.free_size / total_size * 100, 2) || '%' free_rate
FROM ( SELECT tablespace_name, SUM (bytes) / 1024 / 1024 total_size
FROM dba_data_files
GROUP BY tablespace_name) a,
( SELECT tablespace_name, SUM (bytes) / 1024 / 1024 free_size
FROM dba_free_space
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name(+);
TABLESPACE_NAME total_size(MB) used_size(MB) free_size(MB) FREE_RATE
-------------------- -------------- ------------- ------------- --------------
SYSAUX 580 545.187 34.813 6%
UNDOTBS1 90 23.875 66.125 73.47%
DAVE 20 6.25 13.75 68.75%
USERS 10 8.375 1.625 16.25%
SYSTEM 960 951.062 8.938 93%
从结果我们看到UNDO 表空间已经用了23.875M。 我们看一下这使用的23M空间里空闲和非空闲比例:
/* Formatted on 2010/6/23 9:49:53 (QP5 v5.115.810.9015) */
SELECT tablespace_name, status, SUM (bytes) / 1024 / 1024 "Bytes(M)"
FROM dba_undo_extents
GROUP BY tablespace_name, status;
TABLESPACE_NAME STATUS Bytes(M)
-------------------- --------- ----------
UNDOTBS1 UNEXPIRED 9.1875
UNDOTBS1 EXPIRED 13.6875
我们看一下查询的结果,UNEXPIRED 和EXPIRED 是已使用的undo 表空间,其中expired 说明是已经过期的数据,也就是15分钟(默认情况)以外的数据,以被覆盖,可以认为是空闲的。
在此补充一点知识:
采用UNDO 表空间时,会有一个参数UNDO_RETENTION,该参数用来指定undo 记录保存的最长时间,以秒为单位,是个动态参数,完全可以在实例运行时随时修改,通常默认是900 秒,也就是15 分钟。
undo_retention 只是指定undo 数据的过期时间,并不是说,undo 中的数据一定会在undo表空间中保存15 分钟,比如说刚一个新事务开始的时候,如果undo 表空间已经被写满,则新事务的数据会自动覆盖已提交事务的数据,而不管这些数据是否已过期,因此呢,这就又关联回了第一点,当你创建一个自动管理的undo 表空间时,还要注意其空间大小,要尽可能保证undo 表空间有足够的存储空间。
undo_retention 中指定的时间一过,已经提交事务中的数据就立刻无法访问,它只是失效,只要不被别的事务覆盖,它会仍然存在,并可随时被flashback 特性引用。如果你的undo表空间足够大,而数据库又不是那么繁忙,那么其实undo_retention 参数的值并不会影响到你,哪怕你设置成1,只要没有事务去覆盖undo 数据,它就会持续有效。因此呢,这里还是那句话,要注意undo 表空间的大小,保证其有足够的存储空间。
只有在一种情况下,undo 表空间能够确保undo 中的数据在undo_retention 指定时间过期前一定有效,就是为undo 表空间指定Retention Guarantee,指定之后,oracle 对于undo 表空间中未过期的undo 数据不会覆盖,例如:
SQL> Alter tablespace undotbs1 retention guarantee;
禁止undo 表空间retention guarantee,例如:
SQL> Alter tablespace undotbs1 retention noguarantee;
总结一下:
UNDO 表空间是会被重用的,只有当事务没结束,或开了retention guarantee,或在undo_retention时间内不能被重用。
在undo_retention规定的时间内,数据都是有效的,过期后都会设为无效,状态被改为Expired,这些回滚段将会被看作Free Space。但是只要数据没有被覆盖就可以使用。如果空间已满,新事务的数据会自动覆盖掉已经提交的事务数据,即使在undo_retention的时间内。除非指定Retention Guarantee模式,才能保证在undo_retention内不被覆盖。
二. UNDO 表空间满了的处理方法
2.1 先模拟UNDO 表空间满的情况
SQL> alter system set undo_retention=10800; -- 3个小时
系统已更改。
SQL> create undo tablespace undo datafile 'F:/backup/undo.dbf' size 1m ;
表空间已创建。
SQL> alter tablespace undo retention guarantee;
表空间已更改。
SQL> alter system set undo_tablespace=undo;
系统已更改。
SQL> create table DBA(id number);
表已创建。
SQL> begin
2 for i in 1 .. 100000 loop
3 insert into dba values(i);
4 commit;
5 end loop;
6 end;
7 /
begin
*
第 1 行出现错误:
ORA-30036: 无法按 8 扩展段 (在还原表空间 'UNDO' 中)
ORA-06512: 在 line 3
2.2 处理方法
处理方法有两种,一是添加undo 表空间的数据文件,二是切换UNDO tablespace. 这种情况下多用在undo 表空间已经非常大的情况。
2.2.1 增加数据文件
SQL> ALTER TABLESPACE undo ADD DATAFILE 'F:/backup/undo02.dbf' size 100M reuse;
表空间已更改。
SQL> begin
2 for i in 1..100000 loop
3 insert into dba values(1);
4 commit;
5 end loop;
6 end;
7 /
PL/SQL 过程已成功完成。
2.2.2 切换UNDO 表空间
1、建立新的表空间UNDOTBS2
SQL> CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'F:/backup/undo03.dbf' size 100M reuse;
表空间已创建。
2、切换到新建的UNOD表空间上来,操作如下
SQL> alter system set undo_tablespace=UNDOTBS2 scope=both;
系统已更改。
3、将原来的UNDO表空间,置为脱机:
SQL> alter tablespace UNDO offline;
表空间已更改。
4、删除原来的UNDO表空间:
SQL> drop tablespace UNDO including contents AND DATAFILES CASCADE CONSTRAINTS ;
表空间已删除。
如果只是drop tablespace UNDO ,则只会在删除控制文件里的记录,并不会物理删除文件。
Drop undo表空间的时候必须是在未使用的情况下才能进行。如果undo表空间正在使用(例如事务失败,但是还没有恢复成功),那么drop表空间命令将失败。在drop表空间的时候可以使用including contents。
三. UNDO 表空间损坏的恢复方法
一般Undo 表空间损坏的情况下,数据库都已不能正常打开了。启动时都会报类似如下的错误:
ORA-01157: cannot identify/lock data file 12 - see DBWR trace file
ORA-01110: data file 12: '/d01/oramtest/proddata/undo01.dbf'
要想解决问题,必须重建UNDO 表空间,但是如果不open, 就不能重建创建undo 表空间。 所以可以先用系统默认的undo 表空间:system rollback segment 来启动数据库,再创建UNDO 表空间。
3.1 创建pfile 文件
SQL> create pfile='F:/initorcl.ora' from spfile;
文件已创建。
3.2 修改pfile文件
#*.undo_tablespace='UNDOTBS1'
#*.undo_management='AUTO'
undo_management='MANUAL'
rollback_segments='SYSTEM'
3.3 启动数据库至Mount 状态
SQL> STARTUP MOUNT pfile='F:/initorcl.ora' ;
3.4 offline drop undo 表空间
SQL> ALTER DATABASE DATAFILE 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF' OFFLINE DROP;
3.5 open 数据库
SQL> ALTER DATABASE OPEN;
3.6 删除旧的undo 表空间
SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS;
注:该命令不会删除物理文件。 要想一起删除物理文件需要 AND DATAFILES CASCADE CONSTRAINTS ;
如: drop tablespace UNDOTBS1 including contents AND DATAFILES CASCADE CONSTRAINTS ;
3.7 创建新的UNDO 表空间
SQL> create undo tablespace undotbs1 datafile 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF' size 100M ;
create undo tablespace undotbs1 datafile 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF' size 100M
*
第 1 行出现错误:
ORA-01119: 创建数据库文件 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF'时出错
ORA-27038: 所创建的文件已存在
OSD-04010: 指定了 <create> 选项, 但文件已经存在
因为我们之前删除时并没有删除物理文件,所以在建同名文件时就会报错。 我们可以加上REUSE 参数。 只要文件不在使用,就可以重写已经存在的文件。
SQL> create undo tablespace undotbs1 datafile 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF' size 100M reuse;
表空间已创建。
3.8 shutdown 数据库 并将pfile 改回
SQL> select name,issys_modifiable from v$parameter where name='undo_management' or name='rollback_segments';
NAME ISSYS_MOD
-------------------- ---------
rollback_segments FALSE
undo_management FALSE
从上面查询的结果,可以知道修改这2个参数必须重启数据,所以还是shutdown 吧。
SQL> shutdown immediate
3.9 修改pfile 参数
*.undo_tablespace='UNDOTBS1'
*.undo_management='AUTO'
#undo_management='MANUAL'
#rollback_segments='SYSTEM'
3.10 用刚才修改的pfile 启动数据库,并创建spfile
SQL> startup pfile='F:/initorcl.ora' ;
SQL> create spfile from pfile='F:/initorcl.ora';
3.10 再次shutdown,用spfile 启动.
SQL> shutdown immediate
SQL> startup
一般数据文件损坏的情况也可以采用类似的方法, 先启动到mount, 在将损坏的数据文件offline drop。 在open 数据库,drop 掉损坏的数据文件。 当然这种做法有数据丢失。 能恢复的话,尽量恢复。
发表评论
-
Oracle 10g创建表空间的完整步骤详解
2014-06-25 20:06 665Oracle 10g数据库中,当在数据库中创建用户时,基于 ... -
查询是否有重复
2014-06-15 10:20 547select t.id, count(t.id) as n ... -
查询oracle表的信息(表,字段,约束,索引)
2014-05-12 15:41 782查询oracle表的信息(表,字段,约束,索引)1、查询出所有 ... -
oracle
2014-03-18 09:33 5011、 Broken()过程更新一个已提交的工作的状态,典型地是 ... -
oracle ORA-01033错误的解决方案
2014-02-23 22:09 753oracle ORA-01033错误的解决方 ... -
sql loader(sqlldr)的用法
2012-09-19 10:48 2505sql loader可以把一些以文 ... -
Oracle ORA-01555 快照过旧 说明 .
2012-09-19 10:37 1122http://blog.csdn.net/tianlesoft ... -
Oracle 绑定变量
2012-09-18 17:58 721oracle 中,对于一个提交的sql语句,存在两种可选的解析 ... -
Oracle ADDM 自动诊断监视工具 介绍
2012-09-18 17:28 3511Oracle AWR 介绍(AWR -- Automatic ... -
Oracle undo 管理
2012-09-18 11:14 1183在开始之前,我们先来 ... -
RedoLog Checkpoint 和 SCN关系
2012-09-17 11:04 1970一. Redo log ... -
ORA-24324:未初始化服务句柄,不允许此值,正在关闭 - 不允许连接
2012-09-17 10:02 1166ORA-24324:未初始化服 ... -
spool常用的设置
2012-09-11 15:57 1125spool常用的设置set colsep' '; //域 ... -
Oracle DUPLICATE复制数据库
2012-09-08 13:05 1131一、DUPLICATE复制数据库1.使用duplicate命令 ... -
rman各种故障背景下的恢复方法
2012-08-07 18:11 934各种故障背景下的恢复方法 丢失或损 ... -
RMAN-03009: backup 命令 (ORA_DISK_1 通道上, (
2012-08-06 15:44 13187RMAN-03009: backu RMAN> b ... -
RMAN部分命令
2012-08-03 17:26 8441、切换服务器归档模式,如果已经是归档模式可跳过此步:%sql ... -
Oracle SQL性能优化
2012-07-20 16:03 613(1) 选择最有效率的表名顺序(只在基于规则的优化器 ... -
Oracle Undo的学习
2012-07-20 13:36 737回滚段可以说是用来保持数据变化前映象而提供一致读和保障事务完 ... -
impdp中remap_datafile的测试
2012-07-17 17:56 5656remap_datafile目前我的理解是一定是用在全库导出和 ...
相关推荐
Oracle 9i数据库中自动Undo表空间管理.pdf
oracle Undo表空间管理,oracle 学习人员必看的不可缺少的资料。
比较深入浅出的描述了基于oracle10g/11g的UNDO表空间的管理
1 Undo表空间及管理方式 ORACLE开始一个事务的时候,会用到表空间。将修改前的数据保存在UNDO段里。 Undo的三个作用 读的一致性,构造CR块 回滚 实例恢复(时的回滚) --查询UNDO表空间的名字 -----
Oracle 12c中的表空间管理、用户和角色、临时Undo
oracle 数据库的 undo表空间管理 全面分析介绍
甲骨论-08-Undo表空间管理 本章详细介绍了undo表空间的工作原理以及与undo相关的数据字典
AUM(自动 undo 管理,Automatic Undo Management)几乎不需要配置。您基本上只需要定义将前映像保持可用的时间量。这是通过参数 UNDO_RETENTION 控制的,以秒为单位定义。因此,值 900 表示 15 分钟。 一定要...
用自动Undo管(Automatic Undo Management)代替了以前版本中回退段的手工管理,即使用Undo表空间,并自动管理该表空间,使回退段的管理简单化,主要探讨了Oracle 9i数据库Undo表空间的概念、创建、管理和维护等问题。
1. 修改undo表空间管理为手动;2. 设置隐藏参数(_offline_rollback_segments或_corrupted_rollback_segments)标识受影响的回滚段,使Oracle忽略其上的未提交事务;3. 手动删除受影响的回滚段和undo表空间,然后重建...
2.4 创建和管理表.......................................... 1、表(TABLE)基本的存储单位,由行和列组成。.............. 2、方案:一个用户所有对象的命名集合。..................... 3、CTAS(子查询建表):...
6.怎么样在管理自动undo表空间 7.怎么样管理临时表空间与临时文件 8.怎么样管理分区表与分区索引 9.怎么样管理LOB字段 10.怎么样解除分布式事务的挂起 11.怎么样管理表空间与数据文件 12.怎么样管理联机日志...
使用Oracle Recovery Manager、Oracle Data Pump Export和Oracle Data Pump Import备份和恢复表、表空间和数据库 使用网络数据库、数据仓库和VLDB 使用最新的Oracle Database 11g工具——Oracle Total Recall...
使用Oracle Recovery Manager、Oracle Data Pump Export和Oracle Data Pump Import备份和恢复表、表空间和数据库 使用网络数据库、数据仓库和VLDB 使用最新的Oracle Database 11g工具——Oracle Total Recall...
│ oracle10g系统管理之UNDO表空间 - lvhuiqing的专栏 - CSDN博客.mht │ oracle10g系统管理之序列 - lvhuiqing的专栏 - CSDN博客.mht │ oracle10g系统管理之序列 - lvhuiqing的专栏 - CSDN博客.mht.lnk │ oracle...
目录 序 ..........................................................................................3.4.3 字典管理和本地管理的表空间..................................................186 3.5 临时文件..........
目录 推荐序 前言 第1章 认识Oracle RAC ...15.3.6 UNDO表空间的调整 15.4应用系统 15.4.1应用拆分 15.4.2 SQL执行过程 15.4.3 SQL解析 15.4.4 SQL优化 15.4.5 SQL行源生成 15.4.6 SQL执行 15.5本章小结
需要整理现场用户创建的表空间以及其存储数据,进行规范化管理。在整理用户现场建立的表空间时,需要排除掉非用户创建的表空间,所有首先需要那些表空间是用户创建的,那些是Oracle自带的。 本机测试建立一个新库,...