oracle undo tablespace

一、UNDO 表空间使用:

    1.在rollback之后回滚事务。

     2.恢复数据

    3.提供读一致性

    4.在闪回查询中分析之前一个点的数据

    5.使用闪回恢复脏数据。

二、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            指定auto的管理方式,auto和menual

undo_retention             integer     900                    数据保留的时间,单位是秒。

undo_tablespace            string      UNDOTBS1    指名系统使用哪一个重做表空间

补充:初始化参数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;

 

v$undostat视图:保存了最近四天undo的数据,以10分钟为一个单位存放  

dba_hist_undostat视图保存四天之前的数据。

SQL> desc v$undostat
Name                Type         Nullable Default Comments
------------------- ------------ -------- ------- --------
BEGIN_TIME          DATE         Y                        
END_TIME            DATE         Y                        
UNDOTSN             NUMBER       Y                        
UNDOBLKS            NUMBER       Y                        
TXNCOUNT            NUMBER       Y                        
MAXQUERYLEN         NUMBER       Y                        
MAXQUERYID          VARCHAR2(13) Y                        
MAXCONCURRENCY      NUMBER       Y                        
UNXPSTEALCNT        NUMBER       Y                        
UNXPBLKRELCNT       NUMBER       Y                        
UNXPBLKREUCNT       NUMBER       Y                        
EXPSTEALCNT         NUMBER       Y                        
EXPBLKRELCNT        NUMBER       Y                        
EXPBLKREUCNT        NUMBER       Y                        
SSOLDERRCNT         NUMBER       Y                        
NOSPACEERRCNT       NUMBER       Y                        
ACTIVEBLKS          NUMBER       Y                        
UNEXPIREDBLKS       NUMBER       Y                        
EXPIREDBLKS         NUMBER       Y                        
TUNED_UNDORETENTION NUMBER       Y      

 

SQL> select to_char(begin_time,'dd-mon-rr hh24:mi') begin_time,
  2  to_char(end_time,'dd-mon-rr hh24:mi') end_time,
  3  tuned_undoretention from v$undostat order by end_time;

BEGIN_TIME       END_TIME         TUNED_UNDORETENTION
---------------- ---------------- -------------------
15-12? -12 21:1 15-12? -12 21:2                 900
15-12? -12 21:2 15-12? -12 21:3                 900
15-12? -12 21:3 15-12? -12 21:4                 900
15-12? -12 21:4 15-12? -12 21:5                 900
15-12? -12 21:5 15-12? -12 22:0                 900
15-12? -12 22:0 15-12? -12 22:1                 900
15-12? -12 22:1 15-12? -12 22:2                 900
15-12? -12 22:2 15-12? -12 22:3                 900
15-12? -12 22:3 15-12? -12 22:4                 900
15-12? -12 22:4 15-12? -12 22:5                 900
15-12? -12 22:5 15-12? -12 23:0                 900

 

三、测试

  1.创建undo表空间

   SQL> create undo tablespace undo2 datafile '/opt/undo2.dbf' size 2M ;

   create undo tablespace undo2 datafile '/opt/undo2.dbf' size 2M

   ORA-01119: error in creating database file '/opt/undo2.dbf'
   ORA-27040: file create error, unable to create file
    Linux Error: 13: Permission denied

解决方法:

  不能创建是因为oracle用户在linux系统中有没有创建文件的权限。

   [oracle@localhost ~]$ su - root
   Password:
  [root@localhost ~]# chmod 777 /opt  

2. 增加数据文件
ALTER TABLESPACE undotbs_01
ADD DATAFILE '/u01/oracle/rbdb1/undo0102.dbf' AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;

 

3. 重命名数据文件

ALTER TABLESPACE undotbs_01 RENAME DATAFILE '/u01/oracle/rbdb1/undo0102.dbf' TO '/u01/oracle/rbdb1/undo0101.dbf';

 

4. 使数据文件online或者offline
ALTER TABLESPACE undotbs_01 online|offline;

 

5. 开始或者结束一个联机备份
ALTER TABLESPACE undotbs_01 BEGIN|END BACKUP;

 

6. 删除undo tablespace
Drop tablespace undotbs_01;

Drop undo表空间的时候必须是在未使用的情况下才能进行。如果undo表空间正在使用(例如事务失败,但是还没有恢复成功),那么drop表空间命令将失败。在drop表空间的时候可以使用including contents。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值