网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.遇到ora-12535问题后应当采用哪些.
.Oracle数据库软件包远程溢出漏洞.
.Oracle9i 数据库管理实务讲座(六.
.Linux的信号机制.
.关于Oracle日期转换的一点小经验.
.访问Oracle数据库时如何限制绕过.
.MIS中的图像应用技术[DEVELOPER2.
.铁道部运营财务收入系统Oracle数.
.Oracle 10G数据库的特性简介(收藏.
.undo表空间暴长后如何才能取消自.
.高端服务器中安装Oracle!Sun来买.
.了解Oracle体系结构前必须掌握的.
.oracle数据库PL/SQL过程(组图).
.保持Oracle数据库优良性能的若干.
.Lilo 使 用 详 解.
.处理数据库中的null.
.使用Oracle Text构建全文搜索应用.
.深入讲解"alert log"过大时的处理.
.DNS配置问答集.
.使用 DBMS_SQL包执行DDL语句.

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

发表日期:2008-2-9


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所宣传的那样,自动治理确实给用户减轻了不少治理工作,但是作为企业级应用,我们不仅要考虑治理的复杂性,更要考虑它的性能问题,而在我们所进行的项目测试过程中,发现自动治理并不理想。 也就是说,自动治理是以性能为代价来减少治理的复杂性,这无疑会给用户以鸡肋的感觉。到目前为止我还没有发现一个合理解释,不知道在下一个版本中会不会在性能上有个很大的提高。 在这种情况下,是否采用自动治理?如何选择完全看你自己了。

上一篇:ORACLE常用傻瓜问题1000问(之十) 人气:615
下一篇:ORACLE常用傻瓜问题1000问(之九) 人气:614
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐