UNDO段用于保存事务所修改数据的旧值,其中存储着被修改数据块的位置以及修改前数据。
UNDO表空间用于存放UNDO数据,当执行DML操作(insert、update、delete)的时候,oracle会将这些操作的旧数据写入到UNDO段。
UNDO数据也称为回滚数据,用于确保数据的一致性。作用包括:
1、回退事务
2、读一致性
3、事务恢复
4、闪回查询
9i开始,管理UNDO数据可以使用UNDO表空间,也可以使用回滚段。10g开始,oracle已经放弃使用回滚段。
用于undo管理的参数:
1、UNDO_MANAGEMENT
用于指定undo数据的管理方式。如果使用自动管理,必须设置为AUTO;如果手动管理,必须设置为MANUAL。
使用自动管理的时候,oracle会使用UNDO表空间管理UNDO数据;使用手动管理时,oracle会使用回滚段管理UNDO数据。
如果使用自动管理模式,必须建立UNDO表空间,并且配置UNDO_TABLESPACE参数,否则oracle会使用SYSTEM回滚段存放UNDO纪录,并在警告日志中纪录提示。
2、UNDO_TABLESPACE
用于指定例程所要使用的UNDO表空间。设置的时候,必须保证该表空间存在,否则会导致例程启动失败。
使用RAC的时候,因为一个UNDO不能由多个例程同时使用,所以必须为每个例程配置一个独立的UNDO表空间。
3、UNDO_RETENTION
用于控制UNDO数据的最大保留时间,其默认值为900秒。从9i开始,通过配置该初始化参数,可以指定UNDO数据的保留时间,从而确定闪回查询可以查看到的最早时间点。
SQL:
查询tuned_undoretention:
select to_char(begin_time,'DD-MON-RR HH24:MI') begin_time,to_char(end_time,'DD-MON-RR HH24:MI') end_time,tuned_undoretention from v$undostat order by end_time;
检查一天平均每秒产生的UNDO BLOCK
select (sum(undoblks)/sum((end_time-begin_time)*86400) from v$undostat;
生成的结果是UNDO BLOCK,如果需要计算出实际大小,则需要乘以db_block_size(通过show parameter db_block_size查出来)
如何计算合适的UNDO表空间大小:
select (UR*(UPS*DBS))+(DBS*24) as "bytes" from (select values as UR from v$parameter where name='undo_retention'),(select (sum(undoblks)/sum(((end_time-begin_time)*86400))) as ups from v$undostat),(select values as DBS from v$parameter where name='db_block_size');
SELECT * FROM dba_tablespaces;
SELECT * FROM v$undostat;
SELECT * FROM V$ROLLNAME;
2010-10-28 14:39:31
2010-10-24 14:49:31
select a.name,b.xacts,b.writes,b.extents from v$rollname a,v$rollstat b where a.usn = b.usn;
select a.username,b.name,c.used_ublk from v$session a,v$rollname b,v$transaction c where a.saddr=c.ses_addr and b.usn = c.xidusn;
SELECT * FROM DBA_HIST_UNDOSTAT
SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "bytes"
FROM (SELECT VALUE AS UR FROM V$PARAMETER WHERE NAME = 'undo_retention'),
(SELECT (SUM(UNDOBLKS) / SUM(((END_TIME - BEGIN_TIME) * 86400))) AS UPS
FROM V$UNDOSTAT),
(SELECT VALUE AS DBS FROM V$PARAMETER WHERE NAME = 'db_block_size');
SELECT * FROM V$PARAMETER
select (sum(undoblks)/sum((end_time-begin_time)*86400)) AS ab from v$undostat;
UNDO表空间用于存放UNDO数据,当执行DML操作(insert、update、delete)的时候,oracle会将这些操作的旧数据写入到UNDO段。
UNDO数据也称为回滚数据,用于确保数据的一致性。作用包括:
1、回退事务
2、读一致性
3、事务恢复
4、闪回查询
9i开始,管理UNDO数据可以使用UNDO表空间,也可以使用回滚段。10g开始,oracle已经放弃使用回滚段。
用于undo管理的参数:
1、UNDO_MANAGEMENT
用于指定undo数据的管理方式。如果使用自动管理,必须设置为AUTO;如果手动管理,必须设置为MANUAL。
使用自动管理的时候,oracle会使用UNDO表空间管理UNDO数据;使用手动管理时,oracle会使用回滚段管理UNDO数据。
如果使用自动管理模式,必须建立UNDO表空间,并且配置UNDO_TABLESPACE参数,否则oracle会使用SYSTEM回滚段存放UNDO纪录,并在警告日志中纪录提示。
2、UNDO_TABLESPACE
用于指定例程所要使用的UNDO表空间。设置的时候,必须保证该表空间存在,否则会导致例程启动失败。
使用RAC的时候,因为一个UNDO不能由多个例程同时使用,所以必须为每个例程配置一个独立的UNDO表空间。
3、UNDO_RETENTION
用于控制UNDO数据的最大保留时间,其默认值为900秒。从9i开始,通过配置该初始化参数,可以指定UNDO数据的保留时间,从而确定闪回查询可以查看到的最早时间点。
SQL:
查询tuned_undoretention:
select to_char(begin_time,'DD-MON-RR HH24:MI') begin_time,to_char(end_time,'DD-MON-RR HH24:MI') end_time,tuned_undoretention from v$undostat order by end_time;
检查一天平均每秒产生的UNDO BLOCK
select (sum(undoblks)/sum((end_time-begin_time)*86400) from v$undostat;
生成的结果是UNDO BLOCK,如果需要计算出实际大小,则需要乘以db_block_size(通过show parameter db_block_size查出来)
如何计算合适的UNDO表空间大小:
select (UR*(UPS*DBS))+(DBS*24) as "bytes" from (select values as UR from v$parameter where name='undo_retention'),(select (sum(undoblks)/sum(((end_time-begin_time)*86400))) as ups from v$undostat),(select values as DBS from v$parameter where name='db_block_size');
SELECT * FROM dba_tablespaces;
SELECT * FROM v$undostat;
SELECT * FROM V$ROLLNAME;
2010-10-28 14:39:31
2010-10-24 14:49:31
select a.name,b.xacts,b.writes,b.extents from v$rollname a,v$rollstat b where a.usn = b.usn;
select a.username,b.name,c.used_ublk from v$session a,v$rollname b,v$transaction c where a.saddr=c.ses_addr and b.usn = c.xidusn;
SELECT * FROM DBA_HIST_UNDOSTAT
SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "bytes"
FROM (SELECT VALUE AS UR FROM V$PARAMETER WHERE NAME = 'undo_retention'),
(SELECT (SUM(UNDOBLKS) / SUM(((END_TIME - BEGIN_TIME) * 86400))) AS UPS
FROM V$UNDOSTAT),
(SELECT VALUE AS DBS FROM V$PARAMETER WHERE NAME = 'db_block_size');
SELECT * FROM V$PARAMETER
select (sum(undoblks)/sum((end_time-begin_time)*86400)) AS ab from v$undostat;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24387280/viewspace-681797/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24387280/viewspace-681797/