Oracle 11g New Feature – Invisible Indexes

我们都知道一句话,80%的调优工作在应用上。 我的同事又加了一句,应用中80%的调优工作在索引上。 在以前的版本中,如果我们想知道一张表上的索引是不是有用处,到底是应该创建还是不应该创建,除了丰富的经验来猜测判断之外,就只能是真正地创建一个索引,看看SQL效率如何,或者物理地删除一个索引,再来看看效率如何。对于小表,这样倒不是什么大问题,但是对于千万级记录的表,随意的创建或者删除一个索引都是非常耗时耗资源的操作,甚至在业务繁忙期还会造成额外的相当严重的系统Lock。 在Oracle 11g中,Invisible Indexes登场了。 ALTER INDEX ind1 INVISIBLE; 这条语句会让ind1这个索引进入隐身状态,对于Oracle的优化器(optimizer)而言,就仿佛这个索引不存在了。 ALTER INDEX ind1 VISIBLE; 重新将索引置回普通状态,优化器在计算执行计划的时候将会把这个索引考虑在内。 如果一个索引被隐身了,我们仍然可以用Hint强制使用这个索引。 SELECT /*+ index(TAB1 IND1) */ COL1 FROM TAB1 WHERE …; 索引在处于隐身状态时,DML语句仍然会更新索引,只是在查询时,Oracle优化器对这个索引视而不见了。有了Invisible Index,我们在测试索引对于SQL性能的影响时,就不会发生删除索引,影响了应用其它地方,又只能重新创建索引这样尴尬的事情。 也许有一天,在创建索引上,Oracle也能给出一个Virtual的解决方案,这样对于超大数据量的调优就更加方便了。 创建Virtual Index来改变执行计划在Oracle9i及以后版本中都已经包含,但是这是一个Undocument的功能,更加详细的测试可以参见NinGoo的文章。

Netscape Navigator 9 – New Life!

Netscape Navigator 9.0 Beta2发布了,现在我得说,给我一个不用Netscape Navigator的理由吧。 这并不是说Netscape Navigator 9.0版本有什么出类拔萃的地方,而是它终于开始完全兼容Firefox 2.0的所有Addons了。在Netscape的主页上,网景把主宾颠倒了,他说现在你们可以把最喜爱的Netscape插件加入到Firefox中了。 Netscape extensions are available for Firefox 2. Add your favorite Netscape extension to Firefox today! 其实,谁在乎那么可怜的几个Netscape插件呢,只是因为现在我们可以把最喜爱的Firefox插件加入到Netscape Navigator中了,我们才有兴趣去使用这个浏览器,网景早就该这么做。 快速安装了Firefox中必须的几个插件之后,Netscape Navigator 9.0立刻变成一个界面漂亮,功能齐全的全新浏览器,对于喜新厌旧的一些人来说,这是一个具有新鲜面孔的Firefox,而且不可否认,Netscape Navigator 9.0确实还是有它自己的一些新功能,对于有怀旧情节的另一些人来说,Netscape Navigator 9.0确实跟Firefox一样好用了,那么有什么理由不重新投入她的怀抱呢? 网景浏览器新生了!重回人间!

Oracle 11g New Feature – RMAN

RMAN除了单纯的备份恢复功能,已经被赋予了越来越多的责任,比如创建Standby数据库,比如跨平台传输表空间中的表空间转换。Oracle11g的RMAN倒是没有太多飞跃性的更新。 1. 自定义archivelog删除策略 我们知道在11g之前,只有backupset的删除策略可以定义,比如保留多长时间的备份或者保留多少份有效备份,而删除归档日志只有在delete命令中定义删除全部备份完毕的或者删除从哪一个时间点到哪一个时间点的。而在11g中我们已经可以通过configure命令来定义归档日志的删除策略的,比如增加了下面的语法,只有在磁带上备份了2次的归档日志才会被delete命令删除。 CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DEVICE TYPE sbt; 当然,仅仅是增加语法那就只能称为比较无聊的新功能了,除了configure语法之外,现在在11g中通过APPLIED ON STANDBY关键字可以定义只有对于所有的standby站点都已经applied的归档日志才会被删除,或者定义所有被成功传送到standby站点的归档日志就可以被删除。而以前这些都需要DBA自己撰写脚本从数据字典中查询到相关信息然后再通过脚本删除。 2. 直接通过网络复制数据库 在11g之前如果要使用duplicate命令来复制一份数据库,那么则需要源数据库,需要在目标机器上的一份有效备份,需要目标数据库,在11g中这一切被大大简化。通过FROM ACTIVE DATABASE关键字,我们只需要有一个源数据库,就可以简单地通过网络在另外一台机器上复制一个相同的数据库了。Oracle会通过一系列Memory Script在内存中recover并且open目标数据库。 另外,在11g之前,duplicate数据库是不会自动复制spfile的,而现在,我们通过下面的语句,就可以让Oracle在复制过程中自动生成一份spfile,并且其中的初始化参数允许额外定义。 DUPLICATE TARGET DATABASE TO aux_db FROM ACTIVE DATABASE SPFILE PARAMETER_VALUE_CONVERT ‘/u01’, ‘/u02’ SET SGA_MAX_SIZE = ‘200M’ SET SGA_TARGET = ‘125M’ SET LOG_FILE_NAME_CONVERT = ‘/u01′,’/u02’ DB_FILE_NAME_CONVERT ‘/u01′,’/u02’; 在11g中使用duplicate复制一个数据库的准备步骤只需要目标数据库(AUXILIARY实例): a….