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
阅读(2671) | 评论(0) | 转发(0) |