您的位置:首页 > 其它

undo 表空间的扩展与收缩

2012-12-07 20:32 288 查看
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>

当数据库启动的时候会判断私有回滚段是否满足我们事务的要求,如果满足则打开数据库;否则数据库会去找公有回滚段。

1、建立undo表空间

create undo tablespace undo3 datafile '/home/oracle/undo1.dbf' size 20M;

2、改变默认undo

SQL> alter system set undo_tablespace=undo3 scope=both;

3、创建 t1表并插入数据

SQL> create table t1 as select * from dba_objects;

SQL> insert into t1 select * from t1;

4、查看数据条数

SQL> select count(*) from t1;

COUNT(*)

----------

99582

SQL> commit;

5、删除t1表数据(删除数据会放到undo里 如果undo不够大报错)





SQL> delete from t1;

delete from t1

*

ERROR at line 1:

ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDO3'(空间不够大报错)





查看数据文件

SQL> select file_name,file_id,bytes from dba_data_files;

FILE_NAME

--------------------------------------------------------------------------------

FILE_ID BYTES

---------- ----------

/oracle/app/oradata/TEST/system01.dbf

1 838860800

/home/oracle/undo1.dbf

5 20971520

6、扩展空间大小

SQL> alter database datafile 5 resize 40M;(扩大undo3空间到40M)





SQL> delete from t1; (空间增长到34.813M)

99582 rows deleted.





7、收缩空间(使用的超过20m就不能回收)

SQL> alter database datafile 5 resize 35M;

alter database datafile 5 resize 35M

*

ERROR at line 1:

ORA-03297: file contains used data beyond requested RESIZE value

本文出自 “bamboo” 博客,请务必保留此出处http://wuyebamboo.blog.51cto.com/3344855/1082044
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: