
UNDO表空间用于存放UNDO数据,当执行DML *** 作时,oracle会将这些 *** 作的旧数据写入到UNDO段,以保证可以回滚或者一致读等,而临时表空间主要用来做查询和存放一些缓冲区数据。你听说UNDO也是临时表可能是因为这两个表空间都不会永久保存数据的原因。
-------------------------------------------------------------------------
oracle undo表空间
undo表空间用于存放undo数据,当执行DML *** 作(insert、update、delete)时,oracle会将这些 *** 作的旧数据写入到undo段。
undo数据的作用
1回退事务
当执行DML *** 作修改数据后,旧数据被存放在undo段中。只要数据为提交、回滚段未写满或者回滚段为超时的情况下,旧数据都能被回滚回来。
2读一致性
通过DML *** 作后的数据没有提交之前,其他用户读取的数据都是回滚段里面的旧数据。
使用undo参数
1undo_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表空间undotbs2
CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/u01/app/oracle/oradata/mydb/undo02dbf' SIZE 512M REUSE
AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITED RETENTION NOGUARANTEE BLOCKSIZE 8K FLASHBACK ON;
将红色部分替换为实际的oracle数据库路径
2、切换系统表空间
alter system set undo_tablespace=UNDOTBS2 scope=both;
让oracle的当前undo表空间切换到undotbs2上
3、重启数据库
通过命令行方式登录数据库,
[root$smserver] sqlplus /nolog [root$smserver]conn / as sysdba [root$smserver] shutdown immediate;[root$smserver] startup
4、删除原来undo内容
drop tablespace undotbs1 including contents and datafiles;
5、重复第三部 *** 作,重启数据库
oracle数据文件根据数据库block定 一一g例创建表空间默认block都吧K每数据文件拥四M数据块 每表空间拥一0二二数据文件 说吧K block表空间约三二T 单数据文件约三二G 创建bigfile类型表空间该类型表空间数据文件默认吧K block例数据文件三二T扩容/缩容便管
以上就是关于oracle什么决定UNDO表空间的大小全部的内容,包括:oracle什么决定UNDO表空间的大小、如何删除oracle undo表空间占用的空间、如何处理Oracle的UNDO表空间所对应的数据文件过大等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)