Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1061020
  • 博文数量: 239
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 3618
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-12 13:17
文章分类

全部博文(239)

文章存档

2021年(1)

2016年(1)

2015年(30)

2014年(91)

2013年(116)

分类: LINUX

2013-11-17 19:12:00

UNDO表空间用于存放UNDO数据,当执行DML操作(insert、update、delete)的时候,oracle会将这些操作的旧数据写入到UNDO段。


UNDO数据也称为回滚数据,用于确保数据的一致性。作用包括:
1、回退事务
2、读一致性
3、事务恢复
4、闪回查询
undo管理的参数:

1、UNDO_MANAGEMENT
用于指定undo数据的管理方式。如果使用自动管理,必须设置为AUTO;如果手动管理,必须设置为MANUAL。
使用自动管理的时候,oracle会使用UNDO表空间管理UNDO数据;使用手动管理时,oracle会使用回滚段管理UNDO数据。


2、UNDO_TABLESPACE
用于指定例程所要使用的UNDO表空间。设置的时候,必须保证该表空间存在,否则会导致例程启动失败。
使用RAC的时候,因为一个UNDO不能由多个例程同时使用,所以必须为每个例程配置一个独立的UNDO表空间。


3、UNDO_RETENTION
用于控制UNDO数据的最大保留时间,其默认值为900秒。
即:一个transaction所属的undo_block,在undo_tablespace保留最长的时间是900秒。
   (必须保存900秒后才能被覆盖)
SQL>Alter system set undo_retention=n;



创建undo表空间
CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE '/oradata/testdb/UNDOTBS2.ora' SIZE 5M;


当事务用尽UNDO表空间后,增加数据文件
Alter tablespace UNDOTBS2 add datafile '/oradata/testdb/undotbs.dbf' size 30M autoextend on;




切换UNDO表空间
启动并打开oracle数据库后,同一时刻只能使用一个UNDO表空间。可以切换UNDO表空间:
CREATE UNDO TABLESPACE "undotbs02" DATAFILE '/oradata/testdb/undotbs02.dbf' SIZE 5M;
ALTER SYSTEM SET undo_tablespace=undotbs02;




删除UNDO表空间
当前使用的UNDO表空间不能被删除,如果要删除当前实例使用的UNDO,需要先切换,然后删除:
SQL>DROP TABLESPACE UNDOTBS2;


SQL> show parameter block;


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_buffers                     integer     0
db_block_checking                    string      FALSE
db_block_checksum                    string      TYPICAL
db_block_size                        integer     8192
db_file_multiblock_read_count        integer     128
SQL> show parameter undo;


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS02


2.transaction一秒钟所需要的最多块数

SQL> select max(undoblks/((end_time - begin_time)*24*3600)) from v$undostat;


MAX(UNDOBLKS/((END_TIME-BEGIN_TIME)*24*3600))
---------------------------------------------
                                         1.79

阅读(2627) | 评论(0) | 转发(0) |
0

上一篇:启动grid gsd报错

下一篇:linux vmstat命令

给主人留下些什么吧!~~