最近整理服务器磁盘空间,发现undo表空间分配了10G的空间,而实际使用的不到100M,无法resize该表空间,最后只好切换表空间,删除原来的undo表空间解决,顺便整理下关于undo表空间的资料。
undo表空间用于存放 undo数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作的旧数据写入到 undo段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的。从oracle9i开始,管理 undo数据不仅可以使用回滚段,还可以使用 undo表空间。因为规划和管理回滚段比较复杂,所以oracle database 10g已经完全丢弃用回滚段,并且使用 undo表空间来管理 undo数据。 undo数据也称为回滚(ROLLBACK)数据,它用于确保数据的一致性。当执行DML操作时,事务操作前的数据被称为 undo记录。 undo段用于保存事务所修改数据的旧值,其中存储着被修改数据块的位置以及修改前数据,undo表空间作用主要是回退事务、保持读一致性、事务恢复、FlashBack Query。
在oracle9i以前,回滚段全是手工管理与监控的,创建不好或管理不好的回滚段容易造成性能瓶颈。9i以后,oracle默认采用自动回滚段管理。oracle9i通过下面4个初始化参数来设置自动回滚段管理:
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS1
undo_management 表示回滚段管理采用的方式,可以是AUTO或Manual,建议采用自动方式。
undo retenion表示回滚信息在回滚段中保持的时间,默认为秒,但这是一个NO Guarangteed的限制,如果其他事务需要回滚空间,而空间不足时,这些信息仍然被覆盖。oracle10g开始,可以设置undo retenion为0,oracle将启用自动调整来满足最长时间查询的需要,同时,增加了Guarantee控制,可以指定undo表空间是否必须满足undo retenion的限制。
sql>alter tablespace undotbs1 retention guarantee;
sql>alter tablespace undotbs1 retention noguarantee;
如果数据库事务量特别大,可以适当地减少该参数值,避免回滚表空间的过度膨胀,但是过小的值也将导致ora-01555错误的出现并出现Flashback功能的局限。
undo_suppress_errors表示是否显示某些错误信息,如系统回滚段的操作。
undo_tablespace表示使用了自动回滚的表空间。一般情况下,建议不要把undo表空间数据文件设置为无限制的自动扩展,主要是防止表空间的过度膨胀。如果undo表空间过度膨胀,而利用率又很低,就需要回收表空间以释放磁盘空间,可以尝试resize,不过大多数情况下应该是无法resize的,这时候就需要切换表空间了,即新建一定大小的undo表空间,删除原来旧的undo表空间。
确定当前例程正在使用的UNDO表空间
show parameter undo;
显示数据库的所有UNDO表空间
SELECT tablespace_name FROM dba_tablespaces WHERE contents=’UNDO’;
创建新的undo表空间
sql>create undo tablespace undotbs2 datafile '{oracle_home}/oradata/sid/undotbs2.dbf ' size 2048M;
表空间切换
sql>alter system set undo_tablespace =undotbs2;
如果使用spfile,可以自动更新文件,如果是pfile,还需要修改参数文件undo_tablespace=‘ undotbs2 ’。
删除原来的undo表空间
drop tablespace undotbs1;
最后直接从OS上删除数据文件,在删除之前需要检查原来的表空间是否还有活动的事务,通过查询dba_rollback_segs,并且v$transaction中没有在undotbs1上的活动事务,保证所有段的状态都是offline。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15011739/viewspace-429479/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15011739/viewspace-429479/