Undo数据的作用:

1.       回退事务

通过rollback语句可以取消事务变化

2.       读一致性

Commit提交后。。

3.       事务恢复

例程恢复的一部分。

4.       倒叙查询

从过去的某个时间点查询。

 

配置undo表空间

n       undo_management automanual

n       undo_tablespace

可以创建多个undo talbespace,但同一时刻只有一个有效(active

Undo_management = auto;

Undo_tablespace = undotbs;

 

Ø         建立undo表空间

       系统会自动创建。

Create undo tablespace undo1

       Datafile ‘path\undo1db01.dbf’ size 100M;

Ø         修改undo表空间

Alter tablespace undotbs

       Add datafile ‘path\undotbs2.dbf’

       Size 300M

      Autoextend on;  // 添加undo表空间,还没有active

Ø         切换undo表空间

Alter system set undo_tablespace = undotbs2;

Ø         删除undo表空间

Drop tablespace undotbs2; // 不是active时,才可以删。

 

注:

无需多个undo tablespace ,只需创建一个足够大的。

       切换undo tablespace 时候,必须保证老的undo tablespace 里面的数据没用了,才可切换,否则不能切换。最好在没有人用得时候,切换。

       在用户修改数据表中的数据后,而没有commit:此时,undo表空间和redo中,都有记录,而此时切换undo表空间后,数据提交,数据并没有丢失,而是正常;如果切换表空间后,删除该表空间,则报错,不能删除该表空间。

       对数据修改,产生Undo信息,同时undo也会产生redo信息。

是不是不能回滚了??

 

Show parameter undo; // 查看默认的undo表空间指向哪个(undotbs1)。

Select tablespace_name,contents,status from dba_tablespaces;

 

Other parameters

undo_management

指定undo数据的管理方式

 

Undo_retention参数:单位是秒,规定undo表空间最大保存数据的时间。

       循环使用。

Alter system set undo_retention = 9000; // 修改参数

Show parameter undo;显示参数如下:

Undo_management  // auto mode

Undo_retention    // undo表空间保存数据的时间

Undo_tablespace // 指定默认的undo表空间。

Undo quota参数:给用户分配空间最高限额。

 超出限额就会报错

 Undo_pool包,设定参数

undo_tablespace

指定例程所要使用的undo表空间

 

Undo表空间大小问题

Select addr, used_ublk from v$transaction;

 // 查询占用undo表空间的数据块。

// 当用户修改数据库记录,如果commit,则数据块释放()。

 // 如果没有commit,回滚,就是用undo中的数据块信息将修改的数据覆盖。

 

Undo表空间多大,就得需要估计:

1.       考虑transaction大小,影响的数据多少。如:插入多少条数据等

2.       undo_retention , 时间越长,需要的空间越大。

3.       V$undostat 记录undo表空间的历史信息。

如果undo表空间,不够用,则会报错(报错后,就回滚了)。

 

决定undo表空间大小的因素:

1)        Undo_retention  // 默认900

2)        每秒钟产生undo数据块的个数

方法1:最大值 【该方法好】

Select max ( undoblks / ( ( end_time-begin_time ) * 24 * 3600) ) from v$undostat;

     方法2:平均值

select sum(undoblks) / sum( ( end_time-begin_time ) * 24 * 3600) from v$undostat;

3)        Db_block_size

Show parameter block;  //显示块的大小,8K

因此:undo空间大小 = 900 * 8K * 2产生的值);

 

 

监视undo表空间信息

在自动undo管理模式下,

1.       确定当前例程正在使用的undo表空间

使用自动undo管理模式时,oracle会使undo表空间存放undo数据。

Show parameter undo_tablespace;

 

2.       显示数据库的所有undo表空间

使用自动undo管理模式时,必须建立undo表空间

 Select tablespace_name

from dba_tablespaces

 Where contents=’UNDO’   //显示当前数据库包含的所有UNDO表空间

 

3.       显示undo表空间统计信息

为合理规划undo表空间的尺寸,应在数据库运行的高峰阶段搜集undo表空间的统计信息,最终根据统计信息确定undo表空间的尺寸。

 Select to_char(begin_time, ‘HH24:MI:SS’) begin_time,

          To_char(end_tiem , ‘HH24: MI:SS’) end_time,

              Undoblks

 From V$undostat;

// begin_time 起始统计时间

// end_time  结束统计时间

// Undoblks  undo数据所占用的数据块个数

// oracle 每个10分钟生成一行统计信息

 

Select usn , status from v$rollstat; //

Select * from v$rollname; //

 

4.       显示undo段统计信息

使用自动undo管理模式时,oracle会在undo表空间上自动建立10undo段,

通过查询动态性能视图V$ROLLNAME,可以显示所有联机undo段的名称

通过查询动态性能视图V$ROLLSTAT,可以显示undo段的统计信息

       Col name format a10

Select a.name, b.xacts, b.writes, b.extents

       From v$rollname a, V$rollstat b

       Where a.usn=b.usn;

// name : undo 段的名称

// writes :在undo段上所写入的字节数

// xacts undo段所包含的活动事务个数

// extents undo段的区个数

 

5.       显示活动事务信息

动态性能视图v$session用于显示会话的详细信息

动态性能视图v$transaction用于显示事务的详细信息

动态性能视图v$rollname 用于显示联机undo段的名称

       Col username format a10

       Col name format a10

       Select a.username, b.name, c.used_ublk

       From v$session a, v$transaction c, v$rollname b

       Where a.saddr=c.ses_addr and b.usn=c.xidusn and a.username=’system’;

 

6.       显示undo区信息

数据字典视图dba_undo_extents 用于显示undo表空间所有区的详细信息。

以下显示undo_SYSSMU5$的所有区为例

Select extent_id, bytes, status

From dba_undo_extents

Where segment_name=’_SYSSMU5$’

// extent_id 区编号

// bytes 区尺寸

// status 区状态(active 该区处于活动状态, expired 该区未用)

 

 

7. Dba_rollback_segs视图//

 Select segment_name, tablespace_name from dba_rollback_segs;

// 所有的sgements 信息 activeundo表空间,非active undo表空间

// 每个segment可以被多个transaction共享

// system : 用来修改数据字典所用的segment等,是由oracle修改的。

 

8         V$transaction 视图

//某个transation占用undo数据块的信息

select addr, used_ublk from v$transation;

 

9         v$session视图

//用户登陆的信息

 

10     v$rollname 视图

// 所有在线的undo segments activeundo表空间,只有一个undo表空间是active

select * from v$rollname;

posted on 2011-01-16 14:56  Shark Xu  阅读(874)  评论(0编辑  收藏  举报
为汶川地震死难者哀悼!