选择显示字体大小

oracle 9i新特性研究三(撤销段的自动管理)

oracle 9i新特性研究

三 撤销段的自动管理

oracle 9i里,一个很显著的新特性就是引入了自动的回滚段管理,当使用了aum (automatic undo management)时,为了区别,名称也由原来的rollback segment(回滚段)变成undo segment(撤销段),相对应的是undo tablespace。当然我们也可以继续使用传统的manual方式来管理撤销段。

一、初始化参数

使用下面的参数来设置有oracle自动管理撤销段:

undo_management = auto

oracle会自动完成撤销段的创建、删除以及online/offline,而dba将无法干预所有以上操作。

如果想自己来管理回滚段可以将undo_management设成manual(default就是manual的)。虽然我们可以在undo表空间上创建回滚段,但oracle并不建议这样做。

当使用了aum,我们唯一需要做的就是至少创建一个undo表空间,我们可以创建多个undo表空间,然后使用下面的参数来指定具体使用哪个。

undo_tablespace =undorbs1

sql> l

1* select name ,value from v$parameter where name like 'undo%'

sql> /

 

undo_management manual

undo_tablespace undotbs1

undo_suppress_errors false

undo_retention 10800

创建多个undo表空间的好处是,我们可以根据不同的应用在不同大小的undo表空间之间进行切换。

二、undo表空间的创建

1、在建数据库是创建undo表空间,具体方法参见本人写的oracle 9i安装、建库与升级。文章在www.ncn.cn上有下载。

2、我们也可以通过下面的语句来创建:

create undo tablespace undotbs2 datafile ‘/dev/rundotbs2_1.dbf’ size 100m;

三、undo表空间特性

1、undo表空间默认就是local管理方式:

sql> l

1 select tablespace_name, contents,extent_management, allocation_type,

2 segment_space_management

3* from dba_tablespaces where contents='undo'

sql> /

 

tablespace_name contents extent_management allocation_type segment_spac

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

undotbs1 undo local system manual

undotbs2 undo local system manual

2、除撤销段外,我们不能在undo表空间上作其他操作:

sql> create table gototop_t1(c1 number) tablespace undotbs1;

create table gototop_t1(c1 number) tablespace undotbs1

*

error 位于第 1 行:

ora-30022: cannot create segments in undo tablespace

sql> l

1* create rollback segment ncn_rb1 tablespace undotbs1

sql> /

create rollback segment ncn_rb1 tablespace undotbs1

*

error 位于第 1 行:

ora-30019: illegal rollback segment operation in automatic undo mode

3、一个实例职能使用一个undo表空间:

除了在init.ora中指定undo表空间外,我们还可以使用下面的语句来在线更改实例所用的undo表空间:

sql> alter system set undo_tablespace=undotbs2;

系统已更改。

四、撤销段的特性

1、撤销段自动创建:

ø n个撤销段(n基于sessions参数,后面会详细讲)

ø 名字为_syssmun$

ø owner为public(在rac配置中有用)

ø 选择aum后,无法手动管理

sql> l

1 select owner,segment_name,tablespace_name,status

2* from dba_rollback_segs order by 4

sql> /

 

owner segment_name tablespace_name status

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

public _syssmu1$ undotbs1 offline

public _syssmu2$ undotbs1 offline

public _syssmu3$ undotbs1 offline

public _syssmu5$ undotbs1 offline

public _syssmu7$ undotbs1 offline

public _syssmu9$ undotbs1 offline

public _syssmu10$ undotbs1 offline

public _syssmu8$ undotbs1 offline

public _syssmu6$ undotbs1 offline

public rb1_cyx1 undotbs1 offline

public rb1_cyx undotbs1 offline

sys rb1_08 undotbs1 offline

sys rb1_07 undotbs1 offline

sys rb1_05 undotbs1 offline

sys rb1_04 undotbs1 offline

sys rb1_03 undotbs1 offline

sys rb1_02 undotbs1 offline

sys rb1_01 undotbs1 offline

sys rb3_06 undotbs3 offline

sys rb3_05 undotbs3 offline

sys rb3_04 undotbs3 offline

sys rb3_03 undotbs3 offline

sys rb3_02 undotbs3 offline

sys rb3_01 undotbs3 offline

sys rb2 indx offline

public _syssmu4$ undotbs1 offline

sys system system online

public _syssmu11$ undotbs2 online

public _syssmu12$ undotbs2 online

public _syssmu13$ undotbs2 online

public _syssmu14$ undotbs2 online

public _syssmu15$ undotbs2 online

public _syssmu16$ undotbs2 online

public _syssmu17$ undotbs2 online

public _syssmu18$ undotbs2 online

public _syssmu19$ undotbs2 online

public _syssmu20$ undotbs2 online

 

已选择37行。

 

sql>

因为我在系统上作测试,之前手动建过回滚段,所以上面返回结果显一般多。

2、只有活动的undo表空间上的撤销段和系统回滚段是online的,其他的撤销段都是offline的。

这一点从上面的输出中可以清楚地看到。

不过,也不一定一开始所有的撤销段都会online的,这要依赖于初始化参数sessions的值,默认sessions = 1.1 * processes + 5,他决定了系统的并发用户数。下面的实验可以让你对这一情况有个明确的认识。

我们将sessions调小后重起数据库,可以看到活动的undo表空间undotbs1上共10个撤销段,但只online了5个。

sql> show parameter sessions

 

name type value

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

java_max_sessionspace_size integer 0

java_soft_sessionspace_limit integer 0

license_max_sessions integer 0

license_sessions_warning integer 0

logmnr_max_persistent_sessions integer 1

mts_sessions integer 0

sessions integer 27

shared_server_sessions integer 0

sql> select owner,segment_name,tablespace_name,status

2 from dba_rollback_segs;

 

owner segment_name tablespace_nam status

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

sys system system online

public _syssmu1$ undotbs1 online

public _syssmu2$ undotbs1 online

public _syssmu3$ undotbs1 online

public _syssmu4$ undotbs1 online

public _syssmu5$ undotbs1 online

public _syssmu6$ undotbs1 offline

public _syssmu7$ undotbs1 offline

public _syssmu8$ undotbs1 offline

public _syssmu9$ undotbs1 offline

public _syssmu10$ undotbs1 offline

public _syssmu11$ undotbs2 offline

public _syssmu12$ undotbs2 offline

public _syssmu13$ undotbs2 offline

public _syssmu14$ undotbs2 offline

public _syssmu15$ undotbs2 offline

public _syssmu16$ undotbs2 offline

public _syssmu17$ undotbs2 offline

public _syssmu18$ undotbs2 offline

public _syssmu19$ undotbs2 offline

public _syssmu20$ undotbs2 offline

sys rb1_01 undotbs1 offline

sys rb1_02 undotbs1 offline

sys rb1_03 undotbs1 offline

sys rb1_04 undotbs1 offline

sys rb1_05 undotbs1 offline

sys rb1_07 undotbs1 offline

sys rb1_08 undotbs1 offline

public rb1_cyx undotbs1 offline

public rb1_cyx1 undotbs1 offline

sys rb2 indx offline

sys rb3_01 undotbs3 offline

sys rb3_02 undotbs3 offline

sys rb3_03 undotbs3 offline

sys rb3_04 undotbs3 offline

sys rb3_05 undotbs3 offline

sys rb3_06 undotbs3 offline

 

已选择37行。

 

sql>

 

五、aum和rac

undo空间管理方式在rac中会有一些特殊的要求。

1、rac所有实例应使用相同undo管理模式

2、不同的实例应使用不同的undo表空间,如果没有明确设置不同的undo_tablespace参数,每个实例会自动使用第一个可用的undo表空间。

 

六、其它说明

1、当在auto模式下进行manual操作时,我们可以设置初始化参数undo_suppress_errors = true来禁止所有报错信息,慎用!

sql> l

1* alter rollback segment "_syssmu6$" online

sql> /

alter rollback segment "_syssmu6$" online

*

error 位于第 1 行:

ora-30019: illegal rollback segment operation in automatic undo mode

sql> alter system set undo_suppress_errors = true;

系统已更改。

sql> alter rollback segment "_syssmu6$" online;

回退段已变更。

sql>

这条语句看起来是操作成功了,但实际上什么事也没有干!

sql> select owner,segment_name,tablespace_name,status

2 from dba_rollback_segs where status ='online';

owner segment_name tablespace_nam status

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

sys system system online

public _syssmu1$ undotbs1 online

public _syssmu2$ undotbs1 online

public _syssmu3$ undotbs1 online

public _syssmu4$ undotbs1 online

public _syssmu5$ undotbs1 online

已选择6行。

sql>

 

2、和手动删除了回滚段一样,查询事务信息如果位于已删除的undo表空间时,而快照又比undo表空间的drop-scn旧,同样会报ora-01555 "snapshot too old (rollback segment too small)"错。

 

七、个人看法

无论是叫做rollback segment(回滚段)也好,还是叫做undo segment(撤销段)也好,作为用户,我们最关心的是给我们到底带来什么好处。正如oracle所宣传的那样,自动管理确实给用户减轻了不少管理工作,但是作为企业级应用,我们不仅要考虑管理的复杂性,更要考虑它的性能问题,而在我们所进行的项目测试过程中,发现自动管理并不理想。

也就是说,自动管理是以性能为代价来减少管理的复杂性,这无疑会给用户以鸡肋的感觉。到目前为止我还没有发现一个合理解释,不知道在下一个版本中会不会在性能上有个很大的提高。

在这种情况下,是否采用自动管理?如何选择完全看你自己了。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons