2009年9月Oracle公司发布了期待已久的Oracle 11g R2,本系列文章将给读者一一揭开新版本中的新特性,并会介绍企业如何利用这些新特性将现有的Oracle 9i,10g,11g R1升级到Oracle 11g R2.
经历了难以忍受的长时间等待,Oracle公司突然在9月1发布了Oracle 11g R2,我不得不承认Oracle的保密工作做得多么好,我相信Oracle公司选择这个时候发布时为了刺激参加Oracle OpenWorld 2009大会的人兴奋和期待。
经过四处搜索Oracle 11g R2新特性文档,并体验了新的OUI(Oracle通用安装程序),创建了我的第一个单实例RAC后,我总结一下Oracle 11g R2中我最喜欢的五大新特性。在后面的文章中我将陆续介绍其它新特性,请锁定本系列文章。
NO.1 随处可见的集群
在以前的版本中,Oracle Clusterware必须要独立地安装在它自己的ORACLE HOME中,并且也只能在RAC环境下使用,这一切在Oracle 11g R2得到彻底颠覆,因为在这个版本中支持安装Oracle网格基础架构,而且只需要一个独立的ORACLE HOME,它包括了Oracle Clusterware和Oracle自动存储管理(ASM)。通过升级后的Oracle通用安装程序安装了网格基础架构后,你将会看到一个全新的功能和服务矩阵,我简单地列举几个吧:
单实例RAC(Oracle重启):听起来似乎自相矛盾,但Oracle 11g R2扩展了Oracle Clusterware的功能,为任何单实例提供了高可用特性,本质上是将数据库变成了单实例RAC数据库。Oracle 11g R2中的Oracle重启特性帮助Oracle网格基础架构的高可用服务控制服务器重启时哪一个监听器,ASM实例和数据库应该启动,它完全取代了过去DBA们经常用到的DBSTART脚本。同样,当单个数据库实例崩溃或其它异常终止时,Oracle重启功能会自动监测失效的实例,并自动重启它,就好像是在一个真实的RAC环境中一样。
SRVCTL升级:如果你管理过旧版本的RAC环境,你可能已经熟悉了RAC环境中的维护工具SRVCTL,在11g R2中,该工具被扩展了,现在可以管理单实例RAC,以及监听器和ASM实例。
集群时间同步服务:Oracle 11g R2现在需要在所有RAC节点上配置时间同步,如果你曾经经历过某个节点被驱逐出RAC集群配置,你一定知道其难度有多大,特别是两个服务器的时间不同步和日志文件的时间戳不同步时,Oracle之前的版本借助系统提供的网络时间协议(NTP)同步所有节点时间,但这需要连接到互联网上的标准时间服务器,作为NTP的替代者,Oracle 11g R2提供了一个新的集群时间同步服务,确保集群中的所有节点的时间都保持一致。
网格即插即用:在以前的版本中,配置RAC最复杂的部分是确定和设置所有节点都需要用到的公共ip地址,私有ip地址和虚拟ip地址。为了简化RAC的安装,Oracle 11g R2提供了一个全新的网格名称服务(GNS),它和域名服务器协作,处理每个网格组件的ip地址分配,当集群环境跨越多个数据库时这个新特性极其有用。
干净地卸载RAC组件:如果你曾经尝试过删除多个节点上的所有RAC痕迹,那一定会钟情于这项新特性,在Oracle 11g R2中,所有安装和配置助手,特别是Oracle通用安装程序(OUI),数据库配置助手(DBCA)和网络配置助手(NETCA),都得到了增强,当需要卸载RAC组件时,可以保证卸得干干净净。
NO.2 ASM加入了集群
Oracle 11g R2 ASM充满了许多吸引人的新特性,对于初学者来说,ASM和Oracle 11g R2 Clusterware安装在同一个Oracle Home下,因此消除了之前推荐的冗余Oracle Home安装方法,并且ASM也从DBCA脱离出来了,有了专门的自动存储管理配置助手(ASMCA)。下面是我认为最有趣的ASM新特性:
智能化数据布局:在之前的版本中,要配置ASM磁盘可能需要存储管理员的参与,需要配置磁盘I/O子系统,Oracle 11g R2提供了ASM分配单元,可以直接受益于磁盘外缘柱面,获得更快的速度,可以将数据文件,重做日志文件和控制放在磁盘外缘获得更好的性能。
EM支持工作台扩展:在这个版本中对Oracle 11g R1引入到企业管理控制台中的自动诊断仓库(ADR)进行了扩展,包括支持ASM诊断,将所有诊断信息打包直接发送给Oracle技术支持,以便获得更快速的ASM性能问题解决方案。
ASMCMD增强:自动存储管理命令行实用工具(ASMCMD)也获得了不少增强,包括:
1)启动和停止ASM实例;
2)备份,恢复和维护ASM实例的服务器参数文件(spfile);
3)实用iostat监控ASM磁盘组的性能;
4)维护新的ASM集群文件系统(ACFS)中的磁盘卷,目录和文件存储,我的下一个话题就是它。
NO.3 ACFS – 一个强健的集群文件系统
Oracle之前也发布过集群文件系统(OCFS),之后又发布了增强版OCFS2,它让Oracle RAC实例可以通过共享存储读写数据库文件,重做日志文件和控制文件。
此外,OCFS也允许RAC数据库的Oracle集群注册文件(OCR)和表决磁盘存储在集群文件系统中,在Oracle 10g R2中,这个需求被取消了,OCR文件和表决磁盘可以存储在裸设备或裸块设备中,如果你曾经在原始设备上丢失过这些文件的所有副本,你一定了解要恢复它们是多么繁琐,因此,在Oracle 11g R2中,将不再支持将这些文件存储在裸设备上。
为了提高这些关键文件的存活能力,Oracle 11g R2正式引入了一种新的集群文件系统,称之为ASM集群文件系统(ACFS),在RAC环境中,ACFS可以为OCR文件和表决磁盘提供更好的保护,它允许创建五份OCR文件副本,tb之前的集群文件系统仅允许保存两份OCR文件,一个主OCR,一个镜像OCR,但ACFS不适合单独的RAC环境,除此之外,几乎所有与操作系统和数据相关的文件都可以从ACFS的安全性和文件共享特性受益。
动态卷管理器:Oracle 11g R2提供了一个新的ASM动态卷管理器(ADVM)来配置和维护存储在ACFS文件系统中的文件,使用ADVM可以在ASM磁盘组内构建一个ADVM卷设备,管理存储在ADVM卷设备中的文件,以及按需调整ADVM卷设备空间大小,最重要的是,因为ADVM是构建在ASM文件系统架构之上的,可以保证存储在这些卷中的文件受到良好的保护,不会出现意外丢失,因为ASM提供了类似RAID的磁盘阵列的功能。
文件访问控制:使用传统的Windows风格访问控制列表(ACL)或Unix/Linux下的用户/组/其它访问权限风格为ACFS目录和文件授予读,写和执行权限,可以通过图形化的企业管理控制台或命令行程序ASMCMD管理ACFS目录和文件安全。
文件系统快照(FSS):Oracle 11g R2通过它的文件系统快照(FSS)功能可以对ACFS文件系统执行快照,一个快照是所选ACFS文件系统的一个只读副本,对相同的ACFS,它会自动保留63个独立的ACFS快照,当某个ACFS文件被不经意地更新,删除或其它危险操作时,这个特性非常有用,利用11g R2企业管理控制台或ACFS acfsutil命令行工具可以找出该文件合适的版本并执行恢复。
NO.4 改善的软件安装和打补丁过程
我发现作为一名DBA压力最大的活就是给Oracle数据库打补丁了,如果补丁可能会引入对数据库有害的行为,我不得不花费大量的时间和精力来确定和审核,因此我对Oracle 11g R2中提供的新功能感到很欢喜。
集群验证实用程序集成:从Oracle 10g开始引入了集群验证实用程序(CVU),现在已经完全集成到Oracle通用安装程序(OUI)和其它配置助手(如DBCA,DBUA)中了。
零停机修补的集群:当为Oracle集群打补丁时,Oracle 11g R2在一个不合适的位置升级方式应用补丁,这意味着会有两个Oracle Home,其中一个专门用来存放补丁的,但一次只能激活一个Oracle Home,在Oracle 11g R2中不用再为升级全部关闭Oracle集群了,实现真正的零停机打补丁。
NO.5 DBMS_SCHEDULER升级
古老的DBMS_SCHEDULER包得到了彻底的更新,DBA经常使用这个包来调度作业。
文件监视器:以前的版本无法在批处理过程中检测大多数触发事件,如检测一个文件抵达某个目录,在Oracle 11g R2中,使用新的文件监视器可以缓解这个问题,一旦预期的文件抵达目录,DBMS_SCHEDULER现在就可以检测到了,并在新的对象类型SCHEDULER_FILEWATCHER_RESULT中注册它的到来,它通过新的CREATE_FILE_WATCHER存储过程向DBMS_SCHEDULER发送一个信号触发作业。
内置的email通知:无论何时,DBMS_SCHEDULER调度任务启动、失败或完成时,任务的状态可以立即通过email发送出去,虽然在以前的版本中也能实现这个功能,但要么调用DBMS_MAIL存储过程,要么调用DBMS_SMTP存储过程,现在这个功能合并到DBMS_SCHEDULER中了。
远程作业:DBMS_SCHEDULER现在允许DBA在远程数据库上创建和调度作业,现在我终于可以在生产库PROD03上通过DBMS_SCHEDULER调用生产库DBMS_SCHEDULER上的存储过程执行任务了,这意味着我现在可以在一台数据库上集中tb创建和维护调度任务了。
多作业目标:最后,现在可以在多个数据库实例上同时调度DBMS_SCHEDULER任务了,在RAC环境中,这个特性非常有用,因为我可以利用多个数据库实例将长时间运行任务分成几部分,分别在不同的数据库实例上执行更小的任务。