Oracle Database 11g RAC 手册 (第 2 版)


Oracle Database 11g RAC 手册 (第 2 版) [美] K Gopalakrishnan 著 贾洪峰 梁涛 郭绍明 译 北 京 K Gopalakrishnan Oracle Database 11g Oracle Real Application Clusters Handbook,Second Edition EISBN:978-0-07-175262-6 Copyright © 2012 by The McGraw-Hill Companies, Inc. All Rights reserved. No part of this publication may be reproduced or transmitted in any form or by any means, electronic or mechanical, including without limitation photocopying, recording, taping, or any database, information or retrieval system, without the prior written permission of the publisher. This authorized Chinese translation is jointly published by McGraw-Hill Education (Asia) and Tsinghua University Press. This edition is authorized for sale in the People's Republic of China only, excluding Hong Kong, Macao SAR and Taiwan. Copyright © 2012 by McGraw-Hill Education (Asia), a division of the Singapore Branch of The McGraw-Hill Companies, Inc. and Tsinghua University Press. 版权所有。未经出版人事先书面许可,对本出版物的任何部分不得以任何方式或途径复制或传播,包括但不限 于复印、录制、录音,或通过任何数据库、信息或可检索的系统。 本授权中文简体字翻译版由麦格劳-希尔(亚洲)教育出版公司和清华大学出版社合作出版。此版本经授权仅限在 中华人民共和国境内(不包括香港特别行政区、澳门特别行政区和台湾)销售。 版权©2012 由麦格劳-希尔(亚洲)教育出版公司与清华大学出版社所有。 北京市版权局著作权合同登记号 图字:01-2011-5686 本书封面贴有 McGraw-Hill 公司防伪标签,无标签者不得销售。 版权所有,侵权必究。侵权举报电话:010-62782989 13701121933 图书在版编目(CIP)数据 Oracle Database 11g RAC 手册(第 2 版)/(美)戈帕拉克里希南(Gopalakrishnan, K.) 著;贾洪峰,梁涛,郭绍明 译. —北京:清华大学出版社,2012.6 书名原文:Oracle Database 11g Real Application Clusters Handbook,Second Edition ISBN 978-7-302-28809-1 Ⅰ. ①O… Ⅱ. ①戈… ②贾… ③梁… ④郭… Ⅲ. ①关系数据库系统—数据库管理系统—技术手册 Ⅳ. ①TP311.138 中国版本图书馆 CIP 数据核字(2012)第 098708 号 责任编辑:王 军 张立浩 封面设计:牛艳敏 责任校对:邱晓玉 责任印制: 出版发行:清华大学出版社 网 址:http://www.tup.com.cn,http://www.wqbook.com 地 址:北京清华大学学研大厦 A 座 邮 编:100084 社 总 机:010-62770175 邮 购:010-62786544 投稿与读者服务:010-62776969,c-service@tup.tsinghua.edu.cn 质 量 反 馈:010-62772015,zhiliang@tup.tsinghua.edu.cn 装 订 者: 经 销:全国新华书店 开 本:185mm×260mm 印 张:30.75 字 数:710 千字 版 次:2012 年 6 月第 2 版 印 次:2012 年 6 月第 1 次印刷 印 数:1~3000 定 价:69.00 元 ———————————————————————————————————————— 产品编号: 作 者 简 介 K Gopalakrishnan(Gopal)是最佳畅销书 Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning(2004 年由 Oracle Press/McGraw-Hill 出版)的作者,被 Oracle Magazine 评为“2005 年度 Oracle Author”。他还编写了 Oracle Database 10g Real Application Clusters Handbook(2006 年由 Oracle Press/McGraw-Hill 出版)一书,曾在多份 国际刊物上发表论文,被 Oracle 技术网络(OTN)确认为 Oracle ACE。 Gopal 设计和实现了这个星球上几个最庞大、最繁忙的数据库,在超大型联机事务 数据库的性能管理与调优方面拥有丰富的经验。他的核心能力之一就是设计和部署可伸 缩数据库解决方案体系结构,实现最佳性能、高可用性和可管理性。 Gopal 是 Oracle RAC 和 Database Internals 方面公认的专家,他利用自己渊博的专业 知识解决了世界各地许多棘手的性能问题,客户涉及 5 大洲 30 多个国家的电信巨头、银 行、金融机构和大学。 Gopal 目前在 Oracle 公司从事“工程系统服务”,主要围绕“Oracle Exadata 数据库 计算机”和“真正应用集群”提供体系结构设计解决方案。 合著者简介 Harish Kumar 是澳大利亚 ORAXperts 控股有限公司的独立 Oracle 咨询师。在进入 ORAXperts 之前,Harish 在澳大利亚的 Oracle 公司分部从事“Oracle 高级客户服务”,在 Oracle RAC、数据库性能调优和高可用性方面为企业客户提供支持。他在 Oracle 论坛和 自己的博客上发表了许多文章,其博客位于 www.oraxperts.com 网站。可以通过电子邮件 与他联系:harish.kumar@oraxperts.com。 技术编辑简介 John Kanagaraj 是 Cisco Systems 有限公司的 IT 架构设计人员,专门从事应用程序与 数据库性能管理。从 1984 年开始,他就作为开发人员、DBA 和系统管理员使用各种 UNIX 和 Oracle。John 经常出席 Oracle OpenWorld、IOUG、OAUG 和当地用户群体会议。他是 Oracle Database 10g: Insider Solutions 一书的合著者(该书由 Sams 出版),并担任多本书 籍的技术编辑,其中包含获奖的 Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning 一书。John 还担任 IOUG 的 SELECT Journal 杂志的执行主编,在这 个岗位上,他总是致力于挖掘和指导新的作者。John 及其家人居住在阳光明媚的加利福 尼亚州的海湾地区。您可以通过 ora_apps_dba_y@yahoo.com 给他发送电子邮件。 Arup Nanda 在过去的 15 年里一直担任专职 Oracle DBA,工作内容覆盖了从性能调 优到灾难恢复的各个方面。他是纽约市一家跨国公司的全球首席数据库架构设计人员。 他合作编写了 4 本 Oracle 数据库书籍,在包括 Oracle Magazine 和 OTN 在内的许多出版 Oracle Database 11g RAC 手册(第 2 版) IV 物上发表了 300 多篇论文,出席 150 多场诸如 Oracle OpenWorld 和 IOUG Collaborate 之 类的会议。他还发表博客(arup.blogpsot.com)、组织培训课程、开发数据库高效管理工具。 他是 Oracle ACE 总监、Oak Table Network 会员、SELECT Journal 杂志(IOUG 的一份出 版物)编辑、Exadata SIG 董事会成员。2003 年,他被评为 Oracle“年度 DBA”。 Sandesh Rao 掌管着 Oracle 公司 RAC 开发部门的 RAC Assurance 开发团队,专门为 网格/云部署和 Exadata 数据库计算机制订客户最佳业务流程。他在高可用性领域拥有 13 年的丰富经验,曾经使用过各种不同版本和应用程序栈,是“网格栈”方面的公认专家。 他还负责为扩展客户提供支持。在 RAC Assurance 之前,Sandesh 管理着“数据库、企业 管理员和语言 BDE(Bugs Diagnostics and Escalations)”。 Sandesh 拥有超过 10 年的前台与 后台经验,在掌管“支持与开发”组织方面有超过 6 年的管理经验。他拥有印度孟买大 学的计算机科学学位。 致 谢 让那些对美好事物的想法随你而去,从来都不是什么好主意。 要写一本书,绝不只是作者在印刷材料上记下自己的想法或者与他人共享知识那样 简单。它更像是指挥一个乐队。许多音乐家聚集在一个乐队中,在一名优秀指挥的引导 下,按照谱子演奏自己的乐器,发出优美的曲调。同样,也要有一个大型团队一同工作, 从而帮助作者编写一本书。当一个一流的团队像这样一同协作时,结果就是一本阅读起 来赏心悦目、理解起来简单易懂的书。作为这本书的作者,我衷心地感谢在背后支持我、 帮助我完成本书的团队。 首先,我要衷心地感谢我的老朋友、哲人和导师——John Kanagaraj,感谢他在我启 动的每个项目中所给予的支持。John 本人是一位 Oracle 作者,他从最开始就一直鼓舞着 我。我向他的耐心和指导致敬。每当我精神不振时,John 就会给我加油、鼓劲儿。 Oracle Database 11g RAC 手册(第 2 版) VI 还要特别感谢本书的另一位作者 Harish Kumar Kalra。Harish 为本书(特别是在管理 章节)做出了巨大的贡献,并在整本书的撰写过程中都以不同方式向我提供了帮助。他以 多种方式向我提供支持,没有 Harish,这本书的撰写对我来说就会成为一次非常艰难的 航行。 我要感谢每一位对本书做出直接或间接贡献的人。在过去的几年里,我从很多人那 里学到了许多东西,我要特别感谢 Steve Adams、Jonathan Lewis、Vijay Lunawat、Scott Gossett、Scott Heisey、Gaja Vaidyanatha 和 James Morle。雪中送炭,情义无价! 我非常荣幸能与 Oracle 公司中最聪明的一些人一同合作,我要向 Kotaro Ono、Sarr Maoz、Roderic Manalac、Nitin Vengurlekar、Sudhi Vijayakumar 表达我诚挚的谢意,感谢 他们对我的帮助。我还要感谢我的同事 Sreekanth Krishnavajjala、Sathish Natarajan、Ganesh Rajamani 和 Kirti Deshpande,感谢他们最早给出的评论。 我还要向我在 Oracle 工程系统服务部门的经理 Michael Erwin 和 Inderpal Tahim,以 及 Oracle 企业解决方案组的经理 Shankar Jayaganapathy 表示诚挚的谢意,感谢他们支持 和鼓励我完成这一工作。没有他们的帮助和指导,我恐怕抽不出时间来完成这本书。我 还要感谢 Jerry Rickers、Angelo Prucino、Sheila Capreo 和 Sohan Demel,他们也来自 Oracle 公司,感谢他们在不同阶段提供的帮助和支持。 我要真心地感谢那些受人尊敬的客户。他们不仅提出挑战,还愿意在自己的系统中 实现我的解决方案。他们对于我在本书分享的知识获取和提升方面扮演着重要角色。 与 McGraw-Hill 这些杰出的人一同工作实在太棒了,他们包括:Lisa McClain、Wendy Rinaldi、Stephanie Evans、Aloysius Raj 和 Bart Reed。感谢你们对我如此耐心,并确保了 本书按部就班、及时完成。 最后,但绝非最不重要的一点,我要再次感谢我的技术编辑和审稿人 John Kanagaraj、 Arup Nanda 和 Sandesh Rao,他们的出色工作都反映在本书的丰富内容和及时完成之中了。 ——K Gopalakrishnan 序 Oracle RAC (Real Appliction Clusters,真正应用集群)是最畅销的 Oracle 数据库产品, 而且从 2001 年首次发布后一直如此。这一产品为什么能够如此成功?是因为它为公司提 供的价值清晰可见——随着时间的推移,这一价值会随着公司 IT 环境的发展而发展。 看一下后大型机时代的数据中心。传统上,IT 已经为每一种应用都构建了专用的硬 件和软件集。这样就可以很轻松地提供可预测的服务水平(当然,如果负载中存在过高的 峰值,那么另当别论)。但是,这也意味着需要超标准配置硬件和软件来满足峰值要求。 当应用需求增长时,通常需要升级和相应的停机时间,所以要根据业务需要的增长进行 伸缩是一件很困难的事情。因为 IT 倾向于超标准配置,所以公司在硬件、软件和维护方 面支付的费用超过了真实需求。另外,每个硬件和软件集当然都是独立进行管理的,这 样会进一步增加成本。但是,公司更多关注的还不是这一模型的低效性,而是如何提高 可用性。停机需要耗费金钱,而且越来越多的关键业务流程都转变为以联机方式完成, Oracle Database 11g RAC 手册(第 2 版) VIII 所以可用性成为最重要的业务推动力。Oracle RAC 在发布不久后就迅速成为实现数据库 高可用性的首选解决方案。 一旦公司解决了可用性问题,就开始深入研究降低成本的问题了。他们已经使用昂 贵的对称多处理(SMP)服务器构建了大型的可伸缩、高可用性系统。支付账单的业务部 门开始推动成本的降低。富有远见的 IT 管理者利用技术来积累竞争优势,他们寻求一种 更具成本效益的体系结构。他们在商品服务器中找到这种架构,这种服务连接成一个“横 向扩展”(scale-out)集群,所提供的服务级别与昂贵的大型 SMP 服务器相同,而成本只 是它的零头。如果一个数据库也在这样一个环境中运行,那么会怎么样呢?我们可以使 用 Oracle RAC 将数据库扩展到多台服务器上。因此,Oracle RAC 的发展已经能够应对 IT 业面对的新挑战。 向低成本服务器的转移可以降低成本,但这种方法只是暂时满足了公司尽最大可能 降低成本的渴望。接下来,IT 部门开始寻求各种方式,以期更高效地利用其资源,提高 利用率,实现小投入多生产。在 2004 年,Oracle 发布了 Oracle Database 10g 和“企业网 格计算”体系结构。整合为一种共享体系结构后就可以帮助降低成本,在这种共享体系 结构中,峰值功能和故障转移功能是由多个应用程序共享的。Oracle RAC 提供了用于开 启这一体系结构的关键功能,它为工作量提供了灵活性,可以随着负载的升高和降低而 扩展和缩小其内存印迹。Oracle Database 10g 还引入了“自动存储管理”,它将网格体系 结构扩展到存储层。 今天,向共享体系结构进行整合的趋势仍在继续。公司现在希望提高其敏捷性,缩 短上市时间。他们指望云计算能帮助自己更进一步。与网格相比,云在多个方面进行了 改进:可以快速配置资源,可以很轻松地按需创建数据库,能够及时满足新的提案。但 是,仔细研究一下云的这些特征,就会发现 Oracle RAC 已经在过去 10 年里提供了完全 相同的功能。云重点突出了一些原则,而在关系数据库的早期,这些原则就已经成为 Oracle 产品的指导。Oracle 很久以来就提倡将工作整合到一个共享计算资源池中,网络 访问已经成为其解决方案的关键组件,以最少的管理工作量快速供应计算资源的能力已 经被直接内置到 Oracle 数据库产品之中。 为了完全理解 Oracle RAC 是如何帮助公司构建数据库云的,可以更详细地研究一下 数据库云。一般来说,云就是资源池(也就是硬件、软件和存储),我们可以向其中部署 应用程序。这些资源被连接成池,由多个应用程序共享。这种资源共用确保有足够资源 可供使用,即使是在需求峰值和资源故障的情况下,也能满足服务需求的质量。云中的 资源具有弹性,它们可以根据需要扩展和收缩,表现出无限的可伸缩性。这一特性更多 的是通过快速供应资源来实现的,而这种快速供应通常又是通过自服务或自动基础结构 完成的。这样就能很轻松地快速部署应用程序、测试台和开发平台,从而提高了组织的 敏捷性。通过集中管理以及自动满足服务对象的质量要求,可以使管理成本保持在较低 水平。终端用户不需要再关心资源管理,他们与托管服务进行交互,使他们能够专注于 自己的核心业务。 尽管人们熟知的许多基础结构云都是使用服务器虚拟化来构建的,但服务器虚拟化 并不是云的一个必备要素。数据库云不必部署在服务器虚拟化环境中。Oracle RAC 多年 序 IX 以前就已经能够将一个数据库服务从托管它的底层实体硬件和存储中抽象出来,提供了 自己的虚拟化功能。这样就可以为数据库云实现多种部署模型,既可以在实体环境中进 行部署,也可以在虚拟环境中进行部署。 数据库云有助于促进整合,但并不是所有整合形式都能得到同样的好处。为使投入 回报率达到最高,公司需要了解各种不同的整合形式以及它们对盈利水平的影响。最简 单的整合形式是在服务器级别进行整合,经常是利用服务器虚拟化来完成的。这是很容 易的,可以得到即时、可见的回报。你过去有 100 台未能充分利用的数据库服务器,而 现在,尽管仍然运行着 100 个操作系统和数据库,但拥有了 10 台充分利用的服务器。我 们节省了地面空间、电力、冷却、基本建设费用,而且硬件管理员也不再需要管理 100 台服务器了。但是,你的系统、存储、数据库和应用程序管理员看不到任何节约。为了 进一步提高投入回报率,应当在栈的更高层进行整合。整合存储以降低存储成本。整合 操作系统、数据库,甚至是工作量。在上移到栈时,整合过程就需要多费一点脑筋了。 但是,其回报也是巨大的。这 100 台服务器、100 个存储卷、100 个操作系统、100 个数 据库和 100 个架构都可以整合到非常少量的项中,极大地减少了需要管理的项数。 在整合到服务器集群,最终整合到更少、更大的数据库时,Oracle RAC 成为这些数 据库云解决方案的关键组件。Oracle RAC 提供了很大的灵活性,用于将数据库部署到一 个服务器集群池中,用于扩展服务器,用于在集群中的节点之间执行联机再均衡工作。 Oracle RAC 在支持大型整合数据库方面至为重要,因为这些数据库现在必须在多台低成 本商品服务器之间伸缩,以满足整合数据库的聚合需求。 Oracle 真正应用集群现在已经有 10 多岁了。在过去的 10 年里,Oracle 一直不断开 发更多的技术,这些技术在今天使数据库云成为可能。这里给出一些非常著名的示例: Oracle 10g 引入了“动态数据库服务”,它允许 IT 控制运行在共享集群环境中的工作量。 “自动存储管理”将数据库云的好处扩展到存储层,为那些可以无停机时间、联机配置 的数据库提供了弹性存储。“实例隔离(instance caging)”在共享 OS 部署中的实例之间提 供隔离,从而促进了 OS 整合。Oracle 11g 带来了“服务器池”和“服务管理质量”,它 们是在整合环境中满足服务级别的关键。Oracle Exadata 改变了云的采购与部署模型,提 供了私有云(cloud in a box),从而打开了新的天地。它还引入了一些关键的性能改进,如 “混合列压缩”、智能闪存和智能扫描。 所有这些技术听起来可能都非常高级,你可能不确定如何开始充分利用它们。我鼓 励你阅读本书,了解更多知识,使用 Oracle RAC,使你的公司具备在 21 世纪保持兴旺 所必需的竞争优势。 Bob Thome Oracle 公司 产品管理部总监 前 言 无论从什么人嘴里听到什么,智者都能准确判断出其中的真正含义。 我的职业是咨询师,到世界许多地方去实现 Oracle RAC。在我的日常工作中,既要 回答一些简单的问题,比如为 RAC 选择哪种平台,也要处理一些非常复杂的性能问题。 我遇到的大多数客户都抱怨说关于这一主题没有明确的文字说明,他们中的许多人仍然 把 RAC 看作“黑盒”。即使是那些多年从事 Oracle 数据库工作、拥有丰富经验的数据库 管理员也是如此。那些过去实现过“Oracle 并行服务器”(OPS)的客户还希望知道 RAC 是如何工作的,它与 OPS 有什么不同。 尽管市面上有许多其他专门介绍 Oracle RAC 的书籍,但我还没有看到一本书能够涵 盖有关 RAC 的所有主题。因此,公众在了解 RAC 内部构造和细微差别方面还有很大的 差距。正是因为找不到这样一本书,才促使我编写了本书。我的另一本书——Oracle Wait 前 言 XI Interface:A Practical Guide to Performance Diagnostics & Tuning 取得了巨大成功,也给 了我很大的鼓舞,正是因为那本书,使我在 2005 年荣获了由 Oracle Magazine 评选的 “Oracle 年度作者”奖。 和上一本书一样,我在本书中的目标是解释如何以最高效的方式实现和使用 RAC, 而不是对网格进行理论概述。如果查看目录,将会发现我们没有讨论任何有关网格技术 或网格体系结构的内容。同样,您也不会找到有管网格管理的任何细节,既没有“企业 管理器”和“网格控制”,也没有涉及任何奇特的技术概念。我非常小心地避免讨论那些 不适合更广泛读者的内容。 我信奉这样一句谚语:“授人以鱼,不如授人以渔”。因此,本书的目的是提供有关 Oracle RAC 的翔实背景知识和基础原理,而不是提供一大堆命令和语法,这些内容都可 以从标准文档和其他 Oracle 书籍中找到。尽管本书涵盖了有关 RAC 的各个方面,但它 仍然不是完整的——它只是一次令人兴奋的长途旅途的开始。希望读者能够把本书当作 一本参考书和概念指南(能够长久地放在书架上),而不是把它用作某一特定版本的介绍。 我也无意于提供一些仅作权宜之计的解决方案和命令。但是,一些章节的确包含了与 Oracle Database 11g 相关的最佳实践技巧和设计考虑事项。 本书讨论的一些概念的确非常复杂,建议读者在第一次阅读时跳过它们。在读完本 书之后,再将这些章节复读几次,直到自己能够清晰地理解这些概念为止。注意,除非 另行指出,这里讨论的一些概念仅适用于 Oracle 的当前版本。 您还会注意到,对于有些技术主题的处理是非常简单的。因此,作为一名 DBA,您 只需要对 Oracle 的体系结构及工作方式有一些基本但却扎实的理解。我相信,对一些高 深技术内容的讨论是不切实际的,也不需要在所有地方都进行这些讨论。例如,“缓存融 合”和分布式锁管理器的内部工作方式就不可能在一章之内解释清楚。我认为每一个主 题本身都值得专门用一本书来进行讨论。因此,要知道这些讨论是在各自标题的上下文 中展开的。 本书分为 5 个独立部分。 第Ⅰ部分介绍高可用性集群的历史和体系结构,并对比了各种不同的集群体系结构。 它还深入研究了Oracle 集群体系结构(包括Oracle并行服务器)和Oracle集群技术的发展。 我们还讨论了 RAC 的体系结构和使 RAC 成为成功解决方案的 Oracle 内核组件。 第 1 章讨论了高可用性体系结构和集群。我们将在这一章学习最常用的可用性技术, 并了解计划内和计划外宕机时间对业务的影响。我们还讨论了用于实现高可用性和可伸 缩性的最常见解决方案。硬件集群是用于实现高可用性和“按需”可伸缩性的最常用 方法。 第 2 章向用户介绍了 RAC 的悠久历史,给出了有关集群技术基本知识的一些细节, 并对早期的 Oracle 并行服务器进行了讨论。我们还讨论了 Oracle 并行服务器的内在局限 性,以及 RAC 如何用新的技术来克服这些限制。我们还会学习到一些有关“分布式锁管 理器”(DLM)锁定的基础知识。 第 3 章介绍了 Oracle RAC 体系结构以及使之正常运行的组件。我们将介绍 RAC 为 什么需要全局协调,由于共享存储是 RAC 基础结构的关键,所以还将简要讨论 RAID, Oracle Database 11g RAC 手册(第 2 版) XII 介绍“自动存储管理”(ASM)和一些与 Oracle 11g 有关的新技术,比如 Oracle Grid Infrastructure。 本书的第Ⅱ部分介绍 RAC 软件和 ASM 的安装。另外还提供了一些基本细节,涉及 为 RAC 准备硬件、在普通 UNIX 和 Linux 环境中安装 RAC。有关自动存储管理的基础 知识也将在这一部分介绍。 第 4 章讨论如何为 RAC 安装准备硬件。正确、合理地为 RAC 安装任务准备硬件, 是成功部署的关键。Oracle Grid Infrastructure 是“Oracle 集群件”,它在操作系统级别逻 辑绑定服务器,我们将在这一章讨论“Oracle 集群件”的安装。 第 5 章专门讨论在集群上安装 RAC。我们将使用截屏过程来讨论 RDBMS 安装和 RAC 数据库配置。我们还使用新的集群验证实用工具来验证安装的完整性。 第 6 章介绍 ASM。ASM 是来自 Oracle 的一种新数据库文件系统,您将学习如何在 ASM 环境中管理磁盘组。您还会学习 ASM 中的一些新改进,比如“ASM 集群文件系统” (ACFS)和各种命令行工具。Oracle 提供的实用工具 ASMLIB 也将在本章进行简要讨论。 第Ⅲ部分讨论了 RAC 数据库的基础管理知识。其中包含有关 RAC 数据库基本管理 的注释,列举了单实例管理和 RAC 数据库管理之间的相似之外与区别。RAC 性能管理 一章介绍了 Oracle 11g RAC 中的最常见问题、议题和等待方案,以及有可能适用的解决 方案。除了高级管理之外,本章还介绍了 RAC 中的服务管理。 第 7 章从 DBA 的角度讨论对 Oracle RAC 数据库的管理。管理 RAC 类似于管理单 实例数据库,但有一些变化。我们将研究有关 RAC 数据库管理的考虑事项,还将讨论 “Oracle 集群就绪服务”和表决磁盘的管理主题。 第 8 章讨论在 RAC 环境中管理服务。“服务”仍然是数据库中一个比较新的概念, 它简化了资源管理和工作量的分发,为工作量提供了高可用性。Oracle Clusterware 命令 行界面也将在这一章进行详细讨论。 第 9 章讨论 RAC 的备份和恢复概念,以及 RAC 中的实例和数据库恢复概念。我们 不会讨论在备份和恢复过程中涉及的命令和语法。本章深入讨论在单实例中恢复的体系 结构,并深入探讨 Oracle RAC 数据库中的不同恢复类型。 第 10 章涉及 RAC 的性能管理。在任何系统中,管理和实现优异性能可能都是一个 主要目标,在 RAC 中也是如此。与单实例调优相比,RAC 的性能调优需要的考虑事项 要多一些,这是因为访问同一资源集合的实例多了。在设计和调优 RAC 数据库时,应当 考虑一些额外的注意事项,我们将在本章的性能调优主题中详细讨论它们。Oracle Wait Interface 在 11g 版本中得到了增强,我们将非常详细地讨论它特有的一些事件。这一章 还对如何调整这些事件提供了建议。 本书的第Ⅳ部分主要讨论一些高级主题。我们将进入 RAC 环境的资源管理内容,讨 论如何在 RAC 环境中共享和管理资源。我们讨论“全局缓存服务”和“全局队列服务” 及其内部工作方式。我们还将更详细地讨论“缓存融合”主题,全面回顾过去是如何运 作的,以及“缓存融合”是如何改变在实例之间共享数据的动态性。 前 言 XIII 第 11 章详细讨论全局资源目录及其要做的事情。您将了解不同的锁定和序列化机 制,以及它们在操作 Oracle RAC 数据库中的重要性和实用性。您应当注意到这些讨论在 本质上是十分深入的,所以您应当做好准备,将这一章多读几遍,有效地掌握其中的内 容。全局资源目录和资源控制主题在本章讨论。 第 12 章提供理解缓存融合所需要的大多数细节。我们将用示例和演示来说明缓存融 合到底是如何工作的。这是本书中最重要的一章,理解它之后将有助于我们欣赏这一组 件中包含的智慧。它还会在设计可伸缩 RAC 解决方案和调试最复杂性能问题中提供极大 帮助。您会学习一些有关 RAC 在 Oracle 11g 中如何工作的内部技巧,这些技巧非常令人 兴奋,还会提供一个文档齐备的示例来帮助读者轻松地理解这些事实。 第 13 章从 Oracle 的角度介绍了工作量管理。您还会学习“透明应用故障转移”(TAF) 以及如何实施它。Oracle 11g 已经增强了“快速应用通知”(FAN)功能,并将基于服务的 管理发展到高一级水平。本章对它们的用法进行了讨论。 第 14 章讨论 RAC 故障排除——这是人们了解最少的 RAC 主题之一。本章为读者 提供了几种方法,可以用来快速解决非正常 RAC 实例的疑难问题。本章从操作的角度讨 论了故障排除,介绍了性能诊断和实例恢复的故障排除。 第Ⅴ部分讨论 RAC 的部署,包括将 RAC 扩展到一个分散在不同地理区域的集群环 境中和常见的应用程序开发最佳业务流程。这一部分将讨论最常用的 RAC 应用程序开发 技巧。 第 15 章介绍如何扩展 RAC,讨论在 WAN 环境中对 RAC 进行扩展。Oracle RAC 最 常被用作可伸缩性和可用性解决方案。但在特定情况下,它也可以用作一种灾难恢复解 决方案。这一配置被称为“扩展 RAC 集群”,我们将讨论与这一主题有关的最常见问题。 第 16 章介绍 RAC 应用开发中的一些最佳业务流程。我们已经尝试涵盖 Oracle RAC 环境中的一些最常见问题,并提供了一些克服这些挑战的最佳实践方法。 本书的第Ⅵ部分是附录。附录 A 解释最有用和最常用的 V$视图,将这些动态性能 视图根据使用情况进行了分组。附录 B 讨论如何在集群中添加和删除节点。附录 C 列举 了在编写本书时用到的一些参考文献。 我们绝对没有试图涵盖 Oracle RAC 的方方面面。我相信这本书只是一个开始。 作为作者,我希望听到您的反馈,告诉我您是否喜欢这本书,需要我做些什么来进 行改进。请随时通过 kaygopal@yahoo.com 联系我,告诉我您对本书的任何评价。 目 录 第Ⅰ部分 高可用性体系结构与 集群 第 1 章 高可用性和可伸缩性概述 .......... 3 1.1 高可用性 ..................................... 4 1.1.1 高可用性术语 .......................... 4 1.1.2 计划内与计划外停机 .............. 5 1.1.3 端到端视角 .............................. 6 1.1.4 停机时间的成本 ...................... 6 1.1.5 构建冗余组件 .......................... 9 1.1.6 实现高可用性的常用 解决方案 ............................... 10 1.1.7 集群、冷故障转移和热故障 转移 ....................................... 10 1.1.8 高可用性选项的优缺点 ........ 13 1.2 可伸缩性 ................................... 14 1.3 Oracle RAC 解决方案 ............... 14 1.4 新兴趋势 ................................... 15 1.5 小结 ........................................... 16 第 2 章 集群的基础知识与历史 ............. 17 2.1 用集群实现网格计算 ................ 19 2.2 集群中的共享存储 .................... 22 2.3 Oracle RAC 的历史 ................... 27 2.4 Oracle 并行服务器体系结构 .... 29 目 录 XV 2.5 OPS 数据库的组件 ................... 30 2.5.1 集群组服务(CGS) ................. 31 2.5.2 分布式锁管理器(DLM) ........ 31 2.5.3 Oracle 并行服务器中的 锁定概念 ............................... 32 2.5.4 缓存融合第 1 阶段,CR 服务器 ................................... 36 2.5.5 Oracle 并行服务器的 局限性 ................................... 37 2.6 Oracle RAC 解决方案 .............. 38 2.6.1 可用性 .................................... 38 2.6.2 可伸缩性 ................................ 38 2.6.3 可负担性 ................................ 39 2.7 小结 ........................................... 39 第 3 章 Oracle RAC 体系结构 ............. 41 3.1 单实例环境与 Oracle RAC 环境的对比 ............................... 42 3.2 Oracle RAC 组件 ...................... 43 3.2.1 共享磁盘系统 ........................ 44 3.2.2 Oracle 集群件 ........................ 50 3.2.3 Oracle 集群件组件 ................ 50 3.2.4 联网栈组件 ............................ 61 3.3 Oracle 内核组件 ........................ 65 3.3.1 全局缓存和全局队列服务 .... 65 3.3.2 全局资源目录 ........................ 65 3.3.3 Oracle RAC 后台进程 ........... 66 3.4 小结 ........................................... 71 第Ⅱ部分 安装、配置和存储 第 4 章 Oracle Grid Infrastructure 的 安装 ......................................... 75 4.1 安装之前的任务 ....................... 77 4.1.1 配置网络 ................................ 77 4.1.2 设置组和用户 ........................ 79 4.1.3 配置共享存储 ........................ 80 4.1.4 保护外壳和用户限制配置 .... 82 4.1.5 配置内核参数 ........................ 83 4.1.6 Oracle 验证配置 RPM .......... 84 4.1.7 运行集群验证实用工具 ........ 84 4.1.8 Oracle Grid Infrastructure 的 安装 ....................................... 88 4.1.9 安装 Oracle Grid Infrastructure ......................... 91 4.2 小结 ......................................... 108 第 5 章 Oracle RAC 的安装 ............... 109 5.1 Oracle RAC 的安装 ................. 111 5.2 小结 ......................................... 127 第 6 章 自动存储管理 ........................ 129 6.1 有关自动存储管理的 一些事实 ................................. 130 6.1.1 ASM 的物理限制 ................ 131 6.1.2 操作中的 ASM .................... 131 6.1.3 ASM 的组成模块 ................ 134 6.2 ASM 管理 ................................ 138 6.3 ASM 工具 ................................ 152 6.3.1 ASMCA:ASM 配置助手 ... 152 6.3.2 ASMCMD:ASM 命令行 实用工具 ............................. 152 6.3.3 ASM FTP 实用工具 ............ 153 6.4 ASMLib ................................... 154 6.4.1 安装 ASMLib ...................... 154 6.4.2 配置 ASMLib ...................... 155 6.5 小结 ......................................... 156 第Ⅲ部分 Oracle RAC 管理 第 7 章 Oracle RAC 基本管理 ........... 159 7.1 初始化参数.............................. 160 7.1.1 特有参数 ............................. 161 7.1.2 相同参数 ............................. 163 7.1.3 实例特有的参数 ................. 166 7.1.4 管理参数文件 ..................... 167 7.2 启动和停止实例 ...................... 168 7.2.1 使用 srvctl 启动/停止实例 .... 169 Oracle Database 11g RAC 手册(第 2 版) XVI 7.2.2 使用 SQL*Plus 启动/停止 实例 .................................... 169 7.2.3 使用 SRVCTL 在 OCR 中 注册单实例数据库 ............ 170 7.3 管理撤销 ................................. 170 7.3.1 自动撤销管理 ..................... 170 7.3.2 手动撤销管理 ..................... 171 7.4 管理临时表空间 ..................... 171 7.5 管理联机重做日志 ................. 172 7.6 启动闪回区域 ......................... 174 7.7 用 SRVCTL 管理数据库 配置 ......................................... 175 7.8 管理数据库对象 ..................... 178 7.8.1 管理表空间 ......................... 178 7.8.2 管理序列 ............................. 178 7.8.3 管理表 ................................. 178 7.8.4 管理索引 ............................. 179 7.8.5 SQL 命令的范围 ................ 179 7.8.6 数据库连接 ......................... 179 7.9 小结 ......................................... 180 第 8 章 Oracle RAC 高级管理 ........... 181 8.1 理解服务 ................................. 182 8.2 管理服务 ................................. 186 8.3 管理 SCAN .............................. 189 8.4 管理集群就绪服务 ................. 190 8.4.1 集群件的启动过程 (Oracle 11g R1)................... 190 8.4.2 集群件的启动顺序 ............. 191 8.4.3 Oracle 集群件自动启动 ..... 195 8.4.4 Oracle 集群件手动启动 ..... 195 8.4.5 启动和停止 CRS (Oracle 11g R2)................... 195 8.4.6 验证 CRS ............................ 196 8.4.7 禁用和启用 CRS ................ 197 8.4.8 CRS 实用工具 .................... 197 8.5 管理 OCR ................................ 205 8.6 管理 Oracle 本地注册表 ......... 207 8.7 管理表决磁盘.......................... 207 8.8 小结 ......................................... 208 第 9 章 Oracle RAC 备份与恢复........ 209 9.1 备份简介 ................................. 210 9.2 Oracle 备份基础知识 .............. 211 9.3 Oracle RAC 中的实例恢复 ..... 213 9.3.1 重做线程和重做流.............. 214 9.3.2 重做记录和修改向量 .......... 214 9.3.3 检查点 ................................. 214 9.4 崩溃恢复 ................................. 216 9.4.1 崩溃恢复步骤(单实例) ....... 216 9.4.2 Oracle RAC 中的崩溃恢复 .... 216 9.5 实例恢复 ................................. 217 9.5.1 OPS 中的实例恢复 ............. 217 9.5.2 Oracle RAC 中的实例恢复 .... 218 9.6 崩溃恢复和介质恢复 .............. 218 9.6.1 限定恢复 ............................. 219 9.6.2 写块记录(BWR) .................. 219 9.6.3 过去映像(PI) ....................... 219 9.6.4 两步恢复 ............................. 220 9.6.5 缓存融合恢复 ..................... 221 9.7 动态再配置和关联性主控 切换 ......................................... 222 9.7.1 Oracle RAC 中的快速 再配置 ................................. 222 9.7.2 缓存融合恢复内幕.............. 225 9.8 表决磁盘和 OCR 的备份与 恢复 ......................................... 228 9.8.1 表决磁盘的备份和恢复 ...... 228 9.8.2 OCR 的备份和恢复 ............ 229 9.9 小结 ......................................... 231 第 10 章 Oracle RAC 性能管理 ......... 233 10.1 Oracle RAC 设计考虑事项 .... 234 10.1.1 Oracle 最佳设计实践 ...... 234 10.1.2 Oracle RAC 特有的最佳 设计实践 ......................... 235 10.2 工作量分区............................ 236 目 录 XVII 10.3 可伸缩性与性能 ................... 236 10.4 为 Oracle RAC 数据库选择块 大小 ....................................... 238 10.5 使用自动段空间管理 ........... 238 10.6 V$和 GV$视图介绍 .............. 239 10.7 Oracle RAC 等待事件 .......... 240 10.8 全局缓存统计信息 ............... 252 10.9 全局缓存服务时间 ............... 255 10.10 Oracle RAC 中的队列 调优 ..................................... 258 10.11 Oracle AWR 报表 ................ 259 10.11.1 AWR 报表解读 ........... 260 10.11.2 GCS 和 GES 消息发送 统计部分 ..................... 264 10.11.3 STATSPACK ............... 266 10.11.4 ADDM ......................... 266 10.12 集群互联调优 ..................... 267 10.12.1 验证正在使用专用 互联 ............................ 267 10.12.2 互联延迟 .................... 268 10.12.3 验证网络互联未饱和 ... 269 10.13 小结 ..................................... 269 第Ⅳ部分 Oracle RAC 中的 高级概念 第 11 章 全局资源目录 ....................... 273 11.1 资源与队列 ........................... 274 11.1.1 授权与转换 ..................... 275 11.1.2 锁与队列 ......................... 276 11.2 缓存一致性 ........................... 276 11.3 全局队列服务 ....................... 277 11.3.1 锁存器与队列 ................. 277 11.3.2 全局锁数据库和结构 ..... 279 11.3.3 Oracle RAC 中的消息 发送 ................................. 282 11.4 全局缓存服务 ....................... 285 11.4.1 锁模式与锁角色 ............. 286 11.4.2 一致性读取处理 ............. 289 11.4.3 GCS 资源主控 ................. 292 11.4.4 主读锁定 ......................... 294 11.5 小结 ........................................ 299 第 12 章 缓存融合的深入探讨 ........... 301 12.1 缓存融合中的关键组件 ........ 303 12.1.1 ping .................................. 303 12.1.2 延期 ping ......................... 304 12.1.3 过去映像(PI)块 ............... 304 12.1.4 锁主控 ............................. 305 12.1.5 争用类型 ......................... 305 12.2 缓存融合 I 或一致读 服务器 ................................... 305 12.3 缓存融合 II 或写/写缓存 融合 ....................................... 308 12.3.1 操作中的缓存融合 ......... 310 12.3.2 缓存融合演练 ................. 316 12.3.3 资源主控和主控切换 ..... 334 12.4 后台进程和缓存融合 ............ 335 12.4.1 LMON:锁监控器进程 .... 335 12.4.2 LMS:锁管理器服务器 .... 335 12.4.3 LMD:锁管理器守护 进程(LMDn) .................... 336 12.4.4 LCKn:锁进程(LCK0) .... 336 12.4.5 DIAG:诊断守护进程 (DIAG) ............................. 336 12.5 小结 ....................................... 336 第 13 章 工作量和连接管理 ............... 337 13.1 工作量分发与负载均衡 ........ 338 13.2 负载均衡和 Oracle 网络服务 ............................... 340 13.2.1 客户端负载均衡 ............. 340 13.2.2 服务器端负载均衡 ......... 344 13.3 透明应用程序故障转移 ........ 346 13.4 工作量管理............................ 353 13.4.1 Oracle 服务 ...................... 353 13.4.2 负载均衡 ......................... 355 13.4.3 高可用性功能 .................... 359 Oracle Database 11g RAC 手册(第 2 版) XVIII 13.5 小结 ....................................... 367 第 14 章 Oracle RAC 故障排除 ......... 369 14.1 安装日志文件 ....................... 370 14.2 Oracle RDBMS 中的日志目录 结构 ....................................... 370 14.3 Oracle Grid Infrastructure 中的 日志目录结构 ....................... 372 14.4 Oracle Grid Infrastructure 安装 失败时的故障排除 ............... 373 14.5 数据库警告日志的内容 ....... 375 14.6 RAC 的开与关 ...................... 379 14.7 数据库性能问题 ................... 380 14.8 调试节点逐出问题 ............... 383 14.8.1 集群健康监控器 ............. 385 14.8.2 实例成员资格恢复 ......... 386 14.9 Oracle 集群件模块的 高级调试 ............................... 393 14.10 调试 Oracle RAC 中的各种 实用工具 ............................. 395 14.11 小结 ..................................... 396 第Ⅴ部分 部署 Oracle RAC 第 15 章 扩展 Oracle RAC 以实现最大 可用性 ................................. 401 15.1 扩展的好处 ........................... 403 15.1.1 全面利用资源 ................. 403 15.1.2 极快速恢复 ..................... 403 15.2 设计考虑事项 ....................... 403 15.2.1 光速 ................................ 403 15.2.2 网络连通性 ..................... 404 15.2.3 缓存融合性能 ................. 405 15.2.4 数据存储......................... 405 15.3 常用数据镜像技术 ............... 406 15.3.1 基于阵列的镜像 ............. 406 15.3.2 基于主机的镜像 ............. 407 15.3.4 ASM 优先读取 ............... 408 15.3.5 扩展集群中的挑战 ......... 408 15.4 扩展 Oracle RAC 的局限性 ... 409 15.5 扩展 Oracle RAC 与 Oracle 数据卫士的对比 ................... 409 15.6 小结 ....................................... 410 第 16 章 为 Oracle RAC 开发 应用程序 .............................. 411 16.1 应用程序分区........................ 414 16.2 数据分区 ............................... 416 16.3 缓冲区繁忙等待/块争用....... 418 16.4 索引分区 ............................... 419 16.4.1 缓冲区繁忙等待: 索引枝节/叶块争用 ........ 419 16.4.2 有序哈希集群 ................. 421 16.5 处理序列 ............................... 422 16.5.1 CACHE 和 NOORDER .... 422 16.5.2 CACHE 和 ORDER ........ 423 16.5.3 NOCACHE 和 ORDER .... 423 16.5.4 最佳实践:为每个实例 使用不同序列 ................. 423 16.6 连接管理 ............................... 424 16.7 全表扫描 ............................... 425 16.7.1 识别全表扫描 ................. 425 16.7.2 互联协议 ......................... 426 16.8 分析中的库缓存效果 ............ 428 16.9 提交频率 ............................... 428 16.10 小结 ..................................... 429 第Ⅵ部分 附 录 附录 A Oracle RAC 参考 ................... 433 附录 B 添加和删除集群节点 .............. 461 附录 C 参考文献 ................................ 467 第 2 章 集群的基础知识与历史 根据第 1 章中的定义,“集群”是一组互联节点,它们的整体运行类似于单个大型服 务器,能够根据需要进行扩展和收缩。换句话说,在逻辑上可以把“集群化”看作一种 方法,它能够使多台独立服务器协同工作,作为一个称为“集群”的协调单元。参与这 个集群的服务器必须是“同质的”,也就是说,它们必须使用相同的平台体系结构、操作 系统以及几乎一样的硬件体系结构和软件补丁,这些服务器需要作为独立的计算机对客 户端请求池中的相同请求做出响应。 从另一个角度来看,还可以将集群看作现代云计算体系结构中主机的虚拟化——终 端用户应用程序不是特别连接到“一台服务器”,而是连接到一台逻辑服务器,这台逻辑 第Ⅰ部分 高可用性体系结构与集群 18 服务器的内部是一组物理服务器。集群这一层对底层的物理服务器进行封装,只向外部 公开逻辑层,从而向外部世界提供了非常简明的单一节点。 集群在传统上已经用于扩展系统、加快系统速度和对抗故障。 “扩展”是通过向集群组中添加额外节点实现的,从而使集群能够处理逐渐增大的 工作量。集群提供水平按需可伸缩性,不会因为重新配置而产生任何停机时间。图 2-1 显示了对某个集群系统的扩展。 时间 工作量 硬件 时间 工作量 硬件 时间 工作量 硬件 原系统(100%任务) 集群系统(200%任务) 图 2-1 集群系统的扩展 “加速”的完成过程是:将一个大型工作量分解为多个较小的工作量,然后在所有 可用 CPU 上并行运行它们。对于可以并行运行的任务,并行处理可以显著提高性能。非 常简单的“分而治之”方法应用于大型工作量,并行处理过程会利用所有资源的力量, 更加快速地完成工作。图 2-2 显示了集群系统的加速。 时间 工作量 硬件 总时间=t/2 工作量 硬件 原系统(时间) 集群系统的加速 总时间=t 图 2-2 集群系统的加速 因为集群是一个由独立硬件节点组成的群组,所以一个节点发生故障不会停止应用 程序在其他节点上的运行。应用程序和服务被无缝传递到仍在正常运行的节点,借助于 正确的设计,应用程序可以像该节点发生故障之前一样继续正常工作。在某些情况下, 应用程序和用户进程甚至可能不知道这些故障,因为向其他节点进行的故障转移对于应 用程序来说是透明的。图 2-3 显示了集群系统的故障转移。 第 2 章 集群的基础知识与历史 19 工作量 工作量 硬件 硬件 图 2-3 集群系统的故障转移 当单处理器系统达到其处理极限时,会对伸缩性造成巨大的威胁。对称多处理(SMP) 解决了这一问题,SMP 就是在一个计算机内使用多个处理器(CPU)来提高处理能力(这些 处理器共享内存)。SMP 计算机通过并行机制来实现高性能,这种机制对处理任务进行分 割,然后在可用 CPU 上执行。通过添加更多的 CPU 和内存可以实现高伸缩性。 图 2-4 对比了对称多处理和集群在基本体系结构方面的相似性。但是,这两种体系 结构在保持缓存一致性的级别和延迟方面都完全不同。 缓存一致性 缓存融合 CPU CPU CPU CPU CPU CPU CPU CPU 共享缓存 CPU CPU 节点 节点 共享缓存 共享内存 共享内存 共享内存 缓冲区缓存 SMP 体系结构 集群体系结构 图 2-4 SMP 与集群的对比 2.1 用集群实现网格计算 集群是 Oracle 网格计算方法的组成部分,利用这一技术,几个低成本商品硬件组件 通过联网结合在一起,获得更大的计算容量。按需提供的可伸缩性是通过添加补充节点 并将工作量分发到可用计算机上实现的。 可伸缩性和应用程序性能的改进可以通过 3 种方法完成。 第Ⅰ部分 高可用性体系结构与集群 20 ● 更努力地工作。 ● 更聪明地工作。 ● 获取帮助。 “更努力地工作”意味着添加更多的 CPU 和更多的内存,使处理能力增强,以处理 任意数量的工作量。这是常用方法,由于增加 CPU 可以解决工作量问题,因此这种方法 通常是有帮助的。但是,这种方法并不是特别经济,因为计算能力的平均成本并非总是 线性增加的。为单个 SMP 计算机增加计算能力通常会导致成本和复杂度以对数比例增大。 另外,其性能(和可用性)也经常会受到基础设施层的瓶颈限制,例如将存储器连接到服 务器的可用带宽和速度。 “更聪明地工作”是通过在应用层或存储层采用智能、高效的算法来实现的。通过 在存储层引入“智能性”,可以大幅减少为获得期望结果所需完成的总工作量。要在应用 层更聪明地工作,经常需要重新编写应用程序或者改变它的工作方式(有时需要改变应用 程序的设计本身),这对于一个正在运行的应用程序是不可能做到的,它需要的停机时间 是不可接受的。有时,对于第三方供应商和封装的应用程序来说,这一选项也是几乎不 可能实现的,因为要让所有人都参与进来可能会变成一项极为单调和耗费时间的任务。 在存储层更聪明地工作是通过引入智能存储服务器来实现的,存储服务器会卸载一 定数量的处理进程。这需要一些特殊设计的存储服务器(例如在 Oracle 数据库计算机中使 用的 Oracle Exadata 存储服务器)在临近存储器的地方处理一定数量的关键工作量。在临 近存储器的地方处理工作量可以极大地提高应用程序的性能,这样可以大大限制存储器 与主机之间的往返次数,同时还能限制向数据库集群基础设施传递的数据规模。 “获取帮助”非常简单,就是使用其他计算机的计算能力来完成任务。换句话说, “获取帮助”就是对硬件进行集群化,使用空闲节点的多余处理能力,并在最后合并处 理事务的结果。更重要的是,这一方法并不需要对应用程序进行任何修改,因为它对应 用程序是透明的。使用这一方法的另一个好处是它支持按需伸缩,可以选择在需要时获 取帮助,而不需要对大量硬件进行投资。 Oracle Exadata 和智能扫描 前面提到,为了提高性能和可伸缩性,可以采用“更聪明地工作”方法,而新发布 的 Oracle Exadata 存储服务器正好适合这一方法。传统数据库实现方式将这种存储用作 转储和获取数据的简单容器,这些存储容器对于它们经常存储的数据来说是相对“简易” 的。所有数据库处理工作都是在数据库主机内存中处理的,通常需要将大量数据从存储 设备传递到实际完成数字处理的主机上。然后,将汇总的结果传递到终端用户应用程序 的较高层。为了验证所需业务智能操作的有效性,需要向这些列级数据应用筛选条件, 处理数量非常庞大的原始数据。 专用存储服务器在存储层设有额外智能,这些存储器完全“了解”磁盘上存储的数 据。当主机处理复杂业务智能报表时,它会与存储服务器进行对话,针对正在从存储服 务器请求的数据集提供更多的相关信息。这些存储服务器对存储器中的数据进行筛选(称 为“智能扫描”处理),并传递与主机指定条件相匹配的记录。一定数量的处理工作是在 第 2 章 集群的基础知识与历史 21 存储层处理的,数据库主机在处理查询时不需要处理巨量原始数据。 在传统的存储器托管的数据库中,SQL 查询处理工作是在数据库服务器中处理的。 磁盘中存储的数据以块的方式获取到数据库服务器中,并加载到数据库缓冲区缓存中进 行处理。图 2-5 显示了传统存储体系结构中的表扫描处理。 传统扫描处理 传统扫描处理 (1) SELECT customer name FROM receivables WHERE balance 200000; (2) 确定的表扩展块 (3) 发出的 I/O 调用 (4) 在确定的扩展块 上执行 I/O,并向主机 返回块 (5) 数据库扫描块并 提取行 (6) 返回的行 图 2-5 传统存储体系结构中的表扫描处理 (1) 应用层(终端用户客户端)发出 SQL 查询。为简单起见,我们假定这是一条带有 WHERE 条件的 SELECT 语句。 (2) 数据库内核查询数据字典,确定存储表数据的文件和扩展块。 (3) 数据库内核发出 I/O 调用,从磁盘中读取所有物理数据块。 (4) 来自磁盘的物理数据块加载到数据库服务器的内存中(SGA 中的缓冲器缓存)。 (5) 数据库服务器读取内存缓冲区,根据谓词(WHERE 条件)筛选满足条件的行。 (6) 匹配行被返回到客户端。 如果这些表比较小且有很好的索引,那么这种传统 SQL 处理过程会工作良好。但对 于涉及多个大型表的复杂业务智能查询来说,从磁盘中读取所有数据并将它们传送到主 机内存是一项成本很高的任务,需要通过网络将大量原始数据传递到主机内存。此外, 那些不满足筛选条件的记录会在主机级别被丢弃。这是一种效率极低的 I/O 操作,对查 询响应时间有着严重影响。在这种情况下,我们经常要多次读取匹配筛选条件所需要的 数据;构造不佳的查询会对存储子系统产生不必要的开销,并影响到整体系统性能。 但是,在 Exadata 智能扫描模型中,整个工作流程完全不同,它采用非常智能化的 方式进行处理。执行表扫描的查询被卸载到 Exadata 存储服务器,只有那些满足筛选条 件的记录才会返回数据库服务器。诸如行筛选、列筛选等任务以及一定数量的连接处理 都是在存储服务器中完成的。另外,Exadata 还使用一种特殊类型的未缓冲直接读取机制 来扫描表,效率很高。它类似于 Oracle 并行查询操作,图 2-6 显示了这一操作。 第Ⅰ部分 高可用性体系结构与集群 22 (1) SELECT customer name FROM receivables WHERE balance>200000; (2) 构造智能扫描并发向 单元格 (3) 智能扫描确定平衡表内 与请求相匹配的行与列 (4) 匹配数据返回到 服务器 (5) 合并从所有单元 格返回的结果集 (6) 返回的行 图 2-6 使用 Exadata 进行智能扫描 (1) 应用层(终端用户应用程序)发出 SELECT 查询。 (2) 当数据库服务器检测 exadata 时,它构建一个表示这一 SQL 语句的 exadata 构造 (称为 iDB 命令),并将之发送到 Exadata 存储服务器。iDB 是一种基于无限带宽协议的数 据传递机制(低延迟、高带宽),在 Exadata 存储服务器和数据库服务通信之间使用。 (3) Exadata 存储服务器对表执行“智能扫描”,并直接在存储器上应用 WHERE 条 件以提取感兴趣的数据行。 (4) 结果集被直接传递到数据库实例。这个结果集就是查询结果,而不是满足筛选 条件的数据块。它被直接发送到用户会话的“程序全局区”(PGA),而不是缓存在“系 统全局区”(SGA)中。 (5) 匹配行被返回到客户端。 将 SQL 处理卸载到 Exadata 服务器极大地提高了查询处理速度,释放了数据库服务 器中的 CPU 周期。另外,在接近存储器的地方处理数据可以减少大量的低效 I/O,提高 存储子系统的可伸缩性。 2.2 集群中的共享存储 集群中的关键组件之一是共享存储。存储器可以供所有节点访问,根据集群的配置, 所有节点可以对共享存储进行并行读写。一些配置允许所有节点在所有时间内访问此存 储器;而其他一些配置则只允许在故障转移期间共享存储器。 更重要的是,应用程序会把集群看作单个系统镜像,而不是多个连接在一起的计算 机。集群管理器不会向应用程序公开系统,集群对应用程序是透明的。在可用节点之间 共享数据是伸缩过程中的基本概念,它是通过几种类型的体系结构实现的。 2.2.1 集群体系结构的类型 根据节点之间共享存储的方式,可以将集群体系结构宽泛地分为 3 种类型: ● 无共享体系结构 第 2 章 集群的基础知识与历史 23 ● 共享磁盘的体系结构 ● 完全共享的体系结构 表 2-1 对比了各种集群体系结构之间的最常见功能,列举了它们的优缺点,并以示 例方式给出了实现细节。共享磁盘的体系结构和完全共享的体系结构在节点数量和存储 器共享上稍有不同。 表 2-1 不同集群体系结构的功能 共享的功能 无 共 享 共 享 磁 盘 完 全 共 享 磁盘所有权/共享 磁盘由各个节点拥有,在 任何时间都不与任何节 点共享 活动节点通常拥有磁 盘,当活动节点发生故 障时,所有权被传递给 仍在正常工作的节点, 也就是仅在故障期间共 享磁盘 磁盘总是被共享,所有实 例对磁盘拥有相同的权 利。任何实例都可以读写 任何磁盘中的数据,因为 没有节点能够独占自己 的磁盘 节点数 通常是一个很大的数量 通常是两个节点,但在 任何时间都只有一个活 动节点 两个或更多个,取决于配 置。在使用供应商提供的 集群件时,节点数有时会 受到集群管理器或分布 式 锁 管 理 器(DML) 容量 的限制 数据分区 严格分区—— 一个节点不 能访问其他节点的数据。 本地节点能够访问该节 点的本地数据 因为只有一个实例访问 完整的数据集,所以不 需要数据分区 因为集群中的任何节点 都能访问数据,所以不需 要数据分区 客户端协调器 外部服务器或任何群组 成员 因为其他节点只会在故 障转移期间使用,所以 不需要协调器 不需要。任何节点可以访 问任何数据集 性能开销 因为不涉及或不需要外 部协调器,所以没有性能 开销 没有性能开销 3 个节点以上没有开销。 在不多于 3 个节点时,有 几乎可以忽略的开销 锁管理器 因为没有在成员之间共 享数据,所以不需要锁管 理器 不需要 需要 DLM 来管理资源 初始/按需可伸 缩性 在开始时是高度可伸缩 的,但受限于各个节点对 本地访问的功能。按需可 伸缩性是不可能的 可伸缩性不是很强。可 伸缩性限于单个节点的 计算能力 因为可以按需添加节点, 所以具有无限可伸缩性 第Ⅰ部分 高可用性体系结构与集群 24 (续表) 共享的功能 无 共 享 共 享 磁 盘 完 全 共 享 写访问 每个节点可以执行写入 操作,但仅限于自己的磁 盘。一个实例不能向另一 实例拥有的磁盘中写入 内容 一次只有一个节点。一 个节点可以向所有磁盘 内写入内容 所有节点可以同时写入 所有磁盘,因为锁管理器 可以控制有序写入 负载均衡 不可能 因为在任意时刻只有一 个活动节点,所以不可 能实现负载均衡 提供了接近完美的负载 均衡和各种配置选择 应用程序分区 严格要求,因为成员节点 只能看到数据的子集 不需要,因为在任意时 刻只有一个活动节点 不需要,但在需要时可以 进行配置 动态添加节点 不可能 可能,但没有任何意义, 因为在任何时候只有一 个节点是活动的 非常有可能。这是这种体 系结构类型的主要优点 故障转移功能 不能故障转移,因为节点 /磁盘被绑定到特定节点 可以向其他节点进行故 障转移,服务丢失很小 很强大,通常是透明的 I/O 隔离 不需要 不需要 由 DLM 和集群管理器 提供 一个节点的故障 使一个数据子集暂时不 可访问:100/N%的数据不 可访问,其中 N 是集群中 的节点数。然后,其所有 权被转移到仍在正常运行 的节点 数据访问暂时中断,直 到应用程序被故障转移 到另一个节点 由于连接扩展到所有节 点,因此一些会话可能必 须重新连接到其他节点, 整体数据可供所有节点 访问。不会因为节点故障 而造成数据丢失 添加节点 在重新部署体系结构时 需要全面重新组织 不可能,因为添加节点 没有任何帮助 可以在正常工作期间添 加和删除节点。负载均衡 是在重新配置期间自动 完成的 示例 IBM SP2、Teradata、 Tandem NonStop、 Informix OnLine XPS、 Microsoft Cluster Server HP M/C ServiceGuard、 Veritas Cluster Servers Oracle 并行服务器/真正 应用集群、Oracle Exadata 数据库计算机 第 2 章 集群的基础知识与历史 25 1. 无共享体系结构 无共享体系结构是使用一组独立服务器构建的,每台服务器接受预先确定的工作量 (参见图 2-7)。例如,如果集群中有许多服务器,那么将总体工作量除以服务器数量,每 台服务器处理特定的工作量。无共享体系结构有一个最大的缺点,那就是它需要非常仔 细的应用程序分区,并且不能动态添加节点。要添加节点,就需要全面重新部署,所以 它不是一种可伸缩的解决方案。Oracle 不支持无共享体系结构。 CPU CPU CPU CPU 内存 内存 内存 内存 磁盘 磁盘 磁盘 磁盘 图 2-7 无共享体系结构 在无共享集群中,数据通常被分割到独立节点中。由于每个节点负责整体数据库中 的不同子集,因此很少需要对这些节点进行协调。但在一个严格的无共享体系结构中, 如果一个节点停机,它负责的部分数据就是不可用的。 集群服务器既不共享磁盘,也不镜像数据——它们都有自己的资源。在发生故障时, 服务器将其各自磁盘的所有权传递给其他服务器。无共享集群使用软件来完成这些转移。 这一体系结构可以避免在共享磁盘时发生的分布式锁管理器(DLM)瓶颈问题,同时还能 提供相当的可用性和可伸缩性。无共享集群解决方案的示例包括 Tandem NonStop、 Informix OnLine Extended Parallel Server (XPS)和 Microsoft Cluster Server。 无共享集群的主要问题之一就是它们在数据分区方面需要非常精心的部署计划。如 果分区出现偏差,就会对整体系统性能产生负面影响。另外,当磁盘属于另一个节点时(在 任意成员节点出现故障期间通常会发生这种情况),处理开销也会显著增大。 无共享集群的最大好处是它们为数据仓库应用程序提供了线性可伸缩性——它们非 常适合于这种情况。但是,它们不适用于联机事务处理(OLTP)工作量,并且它们不是完 全冗余的,当一个节点发生故障时,会使该节点上运行的应用程序不可用。但是,大多 数主流数据库,如 IBM DB2 企业版、Informix XPS 和 NCR Teradata,的确实现了无共享 集群。 注意: 一些无共享体系结构需要在服务器之间复制数据,以便这些数据能够供 所有节点使用。这样就不再需要应用程序分区,但需要一种高速复制机 制,与高速的“内存至内存”传送相比,这种机制几乎总是不可能实现的。 第Ⅰ部分 高可用性体系结构与集群 26 2. 共享磁盘的体系结构 为获得高可用性,需要对数据磁盘的共享访问(参见图 2-8)。在共享磁盘存储集群的 低端解决方案中,如果一个节点发生故障,那么另一个节点可以接管存储器(和应用程 序)。在高级解决方案中,在多个节点上运行的应用程序有可能同时访问数据,但在某一 时刻,由单一节点负责协调对给定数据磁盘的所有访问,并向其余节点提供存储。在繁 忙的配置中,这个单一节点可能会成为数据访问的瓶颈。 节点 1 节点 2 CPU CPU CPU CPU CPU CPU 内存 内存 共享存储 图 2-8 共享磁盘集群 在简单的故障转移集群中,一个节点运行应用程序并更新数据;另一个节点一直保 持空闲,在需要时完全接管。在更高级的集群中,多个节点可以访问数据,但在某一时 刻通常由一个节点向其余节点提供文件系统,并执行对该文件系统的所有协调工作。 3. 完全共享的体系结构 完全共享集群利用可供该集群内所有计算机(节点)访问的磁盘。它们也经常称为“完 全共享集群”,这是因为所涉及的 I/O 通常用作普通文件和/或数据库的磁盘存储。这些 集群依赖于一个公共通道进行磁盘访问,因为所有节点可能会同时在这些中心磁盘上读 写数据。因为所有节点对集中式共享磁盘子系统拥有同等访问权限,所以必须使用一个 同步机制来保证系统的一致性。集群软件的一个独立部分 DLM 承担着这一角色。 在一个完全共享的集群中,所有节点可以同时访问所有数据磁盘,任何一个节点都 不需要通过一个分离的对等节点来访问数据(参见图 2-9)。具有这一功能的集群采用一个 集群范围内的文件系统(CFS),所以所有节点都是同等看待文件系统的,它们提供了一个 DLM,使节点能够协调对文件、记录和数据库的共享及更新。 CFS 对集群中所有节点的磁盘数据提供相同的视图。这意味着对于用户和应用程序 来说,每个节点上的环境看起来都是相同的,所以在任何时刻,应用程序或用户在哪个 节点上运行是没有关系的。 第 2 章 集群的基础知识与历史 27 节点 1 节点 2 节点 3 CPU CPU CPU CPU CPU CPU CPU CPU CPU 内存 内存 内存 公用高速总线 公用高速总线 共享存储 图 2-9 完全共享集群 完全共享的集群支持更高级别的系统可用性:如果一个节点发生故障,那么其他节 点不会受到影响。但是,这种更高的可用性是有代价的:由于在使用 DLM 时会产生开 销,另外共享硬件中可能出现潜在瓶颈,因此多少会降低这些系统的性能。完全共享的 集群以较好的伸缩特性来弥补这一缺陷。 Oracle RAC 是完全共享体系结构的经典示例。Oracle RAC 是 Oracle 数据库的一种 特殊配置,它充分利用了硬件集群技术,将集群扩展到应用程序级别。数据库文件存储 在共享磁盘存储中,从而使所有节点都能同时读写它们。共享存储是一种典型的联网存 储,如 Fibre Channel SAN 或基于 IP 的 Ethernet NAS,它以物理形式或逻辑形式连接所 有节点。 2.3 Oracle RAC 的历史 硅谷饥饿的流浪汉们倡导了“大规模并行处理”(MPP)的概念,并将之命名为“集 群”。Digital、IBM 和 Cray 是集群领域的一些先行者。DataPoint 于 1977 年成功地开发 了第一个集群产品 ARCnet。 尽管 ARCnet 在研究实验室中算是一件优秀产品,是学术领域的宠儿(对于整个大学 的研究团体、系和计算机集群资源来说),但它在商业上并不成功,直到 Digital Equipment Corporation(DEC)于 20 世纪 80 年代为 VAX/VMS 操作系统发布了它的 VAX 集群产品, 集群才真正开始腾飞。ARCnet 和 VAX 集群产品不仅支持并行计算,还共享文件系统和 外围设备。它们计划在维护数据原子性的同时提供并行处理的好处。 Oracle 的集群数据库是随着 Oracle 6 一起为 Digital VAX 集群产品发布的,在 nCUBE 机器上运行。Oracle 是第一个在数据库级别支持集群的商业数据库。由于原来由 Digital 出品的锁管理器对于数据库应用程序来说其可伸缩性不是很强,而且数据库需要在数据 块级别进行细粒度锁定,因此 Oracle 为 VAX/VMS 集群创建了锁管理器。Oracle 6.2 中加 入了“Oracle 并行服务器”(OPS),它使用 Oracle 自己的 DLM,能够与 Digital 的 VAX 集群很好地协同工作。Oracle 是第一个运行并行服务器的数据库。 第Ⅰ部分 高可用性体系结构与集群 28 在 20 世纪 90 年代早期,当开放系统主导计算机行业时,许多 UNIX 供应商启动了 集群技术,主要就是以 Oracle 的 DLM 实现为基础的。Oracle 7 并行服务器(OPS)使用了 由供应商提供的集群件。OPS 几乎拥有所有 UNIX 特性,而且工作状态极佳,但其安装 和管理比较复杂,这是因为在此过程中涉及了多个层。 当 Oracle 在第 8 版中引入通用锁管理器时,它清楚地为 Oracle 自己的集群件和锁管 理器的未来版本指明了方向。Oracle 的锁管理器通过一个名为 OSD(操作系统相关性)的 附加层与 Oracle 代码集成在一起。Oracle 的锁管理器不久与内核集成在一起,在 Oracle 的稍后版本中称为 IDLM(集成分布式锁管理器)。 Oracle RAC 9i 版本使用了相同的 IDLM,并依赖于外部集群件。Oracle 在 Oracle 9i 中为 Linux 和 Windows 提供了自己的集群件,从 10g 开始为所有操作系统提供集群件, 在 Oracle 11g 中引入了服务器池和用于管理第三方应用程序的补充 API,从而集群件得 到大幅提升。“Oracle 集群件”是事实上的集群件,是运行 Oracle RAC 必不可少的组成 部分。表 2-2 列出了各种操作系统的最常用集群件。 表 2-2 各种操作系统的常用集群件 操 作 系 统 集 群 件 Solaris HP-UX HP Tru64 Windows Linux IBM AIX Sun Cluster、Veritas Cluster Services HP MC/ServiceGuard、Veritas Cluster Services TruCluster Microsoft Cluster Services Oracle 集群件 HACMP (高可用性集群多处理) 2.3.1 Oracle 并行存储评估 除了集群软件基础设施,还有另一个关键组件,那就是并行存储管理系统的开发, 它是与 Oracle RAC 一起成长的。Oracle 集群的早期版本(在 Oracle 8i 之前称为“Oracle 并行服务器”)依赖第三方软件进行并行存储管理。集群文件系统,如 Veritas Cluster File System (VxFS)和 RAW 磁盘分区,是 Oracle RAC 中进行并行管理的基础。 由于没有通用集群件和集群范围内的文件系统可供使用,因此阻碍了 Oracle RAC 的 适应性。Oracle 在 Oracle 9i RAC 中提供了针对 Linux 和 Windows 的通用集群件,名为 “Oracle 集群管理器”(OraCM)。除了集群件,Oracle 还开发了一个名为“Oracle 集群文 件系统”(OCFS)的集群文件系统,用于为 Linux 和 Windows 环境构建共享存储。新提供 的 OraCM 和 OCFS 极大地提高了 Oracle RAC 的适应性。但是,OCFS 有其固有的局限 性,其伸缩性不足以提供较大数量的集群节点。另外,OCFS 只为 Linux 和 Microsoft Windows 提供了端口。 Oracle 在 Oracle Database 9i R2 中为 Solaris 操作系统提供了另外一个名为“Oracle 磁盘管理器”(ODM)的类似产品。ODM 能够处理文件管理操作(在此之前,这些操作, 第 2 章 集群的基础知识与历史 29 包括创建和删除文件,都是在 Oracle 外部完成的),ODM 中的文件标识符代替了文件描 述符。ODM 文件标识符缓存在 SGA 中,减少了内核用于文件查找和文件 I/O 操作的开销。 由于 Oracle 磁盘管理器的成功和智能性,Oracle 为全面运行“支持集群”的数据库 文件系统做好了准备,这个文件系统的名称为自动存储管理(ASM)。从 Oracle Database 10g 开始,Oracle 为重要存储引入了 ASM,并大范围推广 ASM 的使用。为了运行标准 版本的 Oracle RAC,Oracle 甚至曾经强制要求使用 Oracle ASM 作为必需的存储。Oracle ASM 很快在市场上得到了推动,在 Oracle 基准测试和大型客户环境中都能完美地运行。 当采用 Oracle ASM 作为重要数据存储时,一些 Oracle RAC 组件仍然需要有额外的 共享存储(外部 ASM),用于保存在集群配置期间使用的集群配置细节和专用存储,这些 专用存储常被称为“表决磁盘”。最初的 ASM 版本缺乏在 ASM 中存储集群组件(如 OCR 和表决磁盘)的功能,因为需要启动集群件来访问存储在 ASM 管理托管存储内部的数据。 ASM 的当前版本实现了一种很智能的技巧,用于访问 ASM 数据。ASM 的详细信息将在 本书后面章节中讨论。 使用 Oracle 数据库开发的自定义应用程序,甚至是一些商业应用程序(如 Oracle 电 子商务套件),在数据提取和加载期间都使用了大量的外部文件。一个经典示例是在电信 记账应用程序中处理“呼叫数据记录”(CDR),或是在 Oracle 应用程序并行管理器处理 中的输出文件。与此类似的数据库应用程序需要一种可伸缩的集群范围内文件系统,以 便能够在节点之间并行访问所有数据。 为了满足对集群范围内文件系统的需求,Oracle 对 Oracle ASM 进一步进行了改进, 担当一种通用文件系统,称之为“ASM 集群文件系统”(ACFS)。ACFS 提供了一种无缝 方式,用于跨节点访问非数据库文件,并广泛用于存储 Oracle 数据库中使用的数据库二 进制文件、日志文件和非数据文件。在 Oracle ASM 基础上构建的应用编程接口(API)允 许在服务器之间使用 ACFS 卷,如传统的网络文件系统(NFS)挂载点(mount point)。 带有 ACFS 的 Oracle ASM 为 Oracle 集群件的并行存储需求提供了完整的存储解决 方案,不再需要昂贵的第三方文件系统或维护任务繁重的裸设备。Oracle ASM 还为 Oracle 数据库提供了卷管理器和文件系统功能,它是 Oracle 集群件体系结构的一个组成部分。 2.4 Oracle 并行服务器体系结构 Oracle 并行或集群数据库由两台或更多台物理服务器(节点)组成,它们管理着自己的 Oracle 实例,并共享一个磁盘阵列。每个节点的 Oracle 实例有自己的“系统全局区”(SGA) 和自己的重做日志文件,但数据文件和控制文件由所有实例共用。数据文件和控制文件 由所有实例同时读写;但是,重做日志文件可以由任意实例读取,但只能由拥有它的实 例写入。一些参数,如 db_block_buffers 和 log_buffer,可以在每个实例中进行不同配置, 但其他一些参数必须在所有实例中均保持一致。每个集群节点有其自己的后台进程集合, 就像单个实例一样。另外,还会在每个实例上启动 OPS 特有的进程,以处理跨实例通信、 锁定管理和数据块传送。 图 2-10 显示了 OPS 的体系结构。理解 OPS 的内部工作方式对于理解 Oracle RAC 非 第Ⅰ部分 高可用性体系结构与集群 30 常重要,因为它为深入了解 Oracle RAC 的操作奠定了坚实的基础。尽管管理 Oracle RAC 并非一定需要这一知识,但深入理解 OPS 组件可以使您成为 Oracle RAC 的专家,因为 Oracle RAC 就是从 OPS 基础上演变而来的。 节点 1 节点 2 集成的 DLM 集成的 DLM LMON LMD0 LMON LMD0 DLM 数据库 字典缓存 字典缓存 日志缓 冲区 日志缓 冲区 缓冲区 缓存 缓冲区 缓存 库缓存 库缓存 分布式锁区域 分布式锁区域 LCK0 LCK0 LGWT LGWT DBW0 DBW0 BSP0 BSP0 SMON PMON SMON PMON 互连 重做日志文件 重做日志文件 数据文件和控制文件 SGA1 SGA2 DLM 数据库 图 2-10 OPS 体系结构 2.5 OPS 数据库的组件 在 Oracle 8i 并行服务器数据库的每个实例上,都可以找到以下组件: ● 集群管理器,每个操作系统供应商提供不同的集群管理器(Windows 除外),其中 包含节点监控工具和故障检测机制。 ● 分布式锁管理器(DLM),包括死锁检测和资源控制。 ● 集群互联。 ● 共享磁盘阵列。 注意: 这里并不讨论供应商特有的管理器软件,只是出于完整性而提及。在安 装和配置 OPS 及 RAC 早期版本的一些变体之前,这种供应商产品是必 需的基本集群软件。它通常称为“集群管理器”(CM),有自己的群组成 员资格服务、节点监控器和其他核心层。 第 2 章 集群的基础知识与历史 31 2.5.1 集群组服务(CGS) OPS 有一个关键的“隐藏”组件或很少为人知的组件:“集群组服务”(CGS),它原 来在 Oracle 8 中称为“组成员资格服务”(GMS)。CGS 有一些 OSD 组件(节点监控器接 口),其余部分是内置于 Oracle 内核的 GMS 部分。CGS 保存着一个供 DLM 使用的键仓 库,用于通信和与网络有关的活动。Oracle 8i 内核(以及更高版本)中的这个层提供了一 些关键功能,没有这些关键功能,OPS 数据库就不能运行: ● 节点间通信 ● 组成员资格一致性 ● 集群同步 ● 进程分组、注册和取消注册 一些集群软件仍然随操作系统而有所不同,所以必须开发和实现一个 OSD 层。某些 低级集群通信只能通过这个 OSD 层来完成,它使用 Oracle 指定的 API 与 Oracle 内核进 行通信。这些 OSD 组件包含在“节点监控器”(NM)中,它是 CGS 的一部分。 一整套集群通信接口和 API 成为 OPS 8i 中 Oracle 代码的内部部分。GMS 提供了许 多服务,如成员状态、节点逐出(node eviction)等,在 Oracle 8 中,它们还未被包含在内; 而在 Oracle 8i 中,它们已经成为内部组成部分。GMS 从 Oracle 8i(8.1.6)开始变为 CGS, CGS 基本上包含了 GMS 和集群管理的 NM 组件。在这个层的下面是集群监控器或是由 OS 供应商提供的集群软件(如 TruCluster、Veritas Cluster Services、HP MC/ServiceGuard 等)。 Oracle 8i 还引入了网络冗余,这样一来,网络路径的问题或故障就都会向上传递到 群组监控器级别(CGS 的一部分),并允许关闭该实例,或者使用冗余网络硬件提供网络 路径的故障转移。在 OPS 8i 版本之前,网络问题可能导致实例的无限期挂起。 2.5.2 分布式锁管理器(DLM) DLM 是 OPS 和 RAC 栈的完整组成部分。前面曾经提到,早期的 Oracle 版本依赖于 OS 供应商来提供这一组件,它在全局范围内协调资源,保持系统同步。在从 Oracle OPS 7 到 11g 的所有版本中,数据的一致性和完整性都是由这个层维持的。从 Oracle 8/8i 往 后,对 DLM 的所有引用都被关联到集成 DLM(IDLM),它是在 Oracle 8 中引入的,与 Oracle OPS 内核集成在一起。术语 DLM 和 IDLM 描述的是同一个实体,它们是相同的。 在版本 8 之前,DLM API 模块必须依靠外部操作系统例程来查看一个锁的状态(因 为 DLM 功能是由操作系统供应商提供的)。这一通信是使用 UNIX 套接字和管道来完成 的。在采用 IDLM 时,所需数据位于每个实例的 SGA 中,只需要使用锁存器和/或排队 来执行序列化查询(参见 2.5.3 节),还可能需要全局协调,其算法内置于 Oracle 内核代 码中。 在 OPS 8i 中,IDLM 经历了重大发展,变得更加稳定。IDLM 拥有一个库,其中包 含 OPS 数据库中所有实例所拥有的全部锁和全局队列。IDLM 的任务就是跟踪每个被指 定给资源的锁。对于各个实例获取和释放锁的请求,其协调功能由 DLM 完成。DLM 运 行所需要的内存结构是在共享池之外分配的。锁资源、消息缓存区等都在每个实例的共 第Ⅰ部分 高可用性体系结构与集群 32 享池中。在节点出现故障时,只要集群中有一个节点仍能正常工作,DLM 的设计就能使 它继续正常运行。 DLM 总是知道锁的当前拥有者或请求者以及被锁定的资源。当锁不可用时,DLM 将锁请求放入队列,并在锁资源变为可用时通知请求者。DLM 管理的一些资源是数据块 和回滚段。Oracle 资源按照各个实例与 DLM 锁关联在一起,这一关联过程使用了一种 复杂的哈希算法。OPS 中的锁和队列功能与单实例 RDBMS 服务器中相同,只不过 OPS 是从全局着眼的。 DLM 依赖于核心 RDBMS 内核提供锁定和队列服务。这些成熟的、经过验证的技术 和功能不需要在 DLM 层中重新编写。DLM 在全局级别协调锁定,这是核心层没有提供 的一个服务。为了使事情变得更简单一些,Oracle 8i OPS 和 Oracle RAC 中的锁定以及队 列内核服务与 DLM 功能保持分离。 2.5.3 Oracle 并行服务器中的锁定概念 在 OPS 数据库中,用户要对任意资源执行操作,都必须事先获得一个锁。这一点也 适用于单实例情景。在纯粹的 DLM 术语中,“资源”是指任何可由用户访问的对象,“锁” 是客户端对该资源发出的特定类型或模式的操作请求。 OPS 中有一个名为“并行缓存管理”(PCM)的新概念,它的意思是在(一个实例的) 每个数据缓冲区缓存中都可以对数据块进行协调和维护,从而使用户查看或请求的数据 绝对不会出现不一致的情况。对数据的访问是使用 PCM 框架,利用带有全局协调块的 数据块来控制的。简单地说,PCM 确保在任意给定时刻,一个集群中只有一个实例可以 修改一个锁。其他实例都必须等待。 宽泛地说,OPS 中的锁要么是 PCM 锁,要么是非 PCM 锁。PCM 锁几乎是独占地 保护数据块,而非 PCM 锁则控制对数据文件、控制文件、数据字典等的访问。PCM 锁 在 OPS 中是静态的,而非 PCM 锁是使用特定参数的 init.ora 设置动态设定的。PCM 资 源上的锁称为“锁元素”,而非 PCM 锁称为“队列”。DLM 锁是在一个资源上获得的, 通常被授予一个进程。PCM 锁和行级锁是独立运行的。 1. PCM 锁和行级锁的独立性 PCM 锁和行级锁是独立运行的。一个实例可以放弃一个 PCM 锁,但又不影响这个 PCM 锁所覆盖数据块上的行级锁。行级锁是在事务期间获得的。当一个实例要读取一个 数据库资源(如一个数据块)以进行更新时,这个数据库资源获得一个 PCM 锁。在事务期 间,如果其他实例也需要这些数据块,那么可以多次放弃和获取一个 PCM 锁。 而行级锁则与之相反,在提交或回滚对这些数据行的更改之前,事务是不会释放行 级锁的。Oracle 使用内部并发控制机制来隔离事务,在一个修改数据的事务提交之前, 其他事务看不到这个事务对数据进行的修改。行级锁并发控制机制独立于并行缓存管理: 并发控制不需要获取 PCM 锁,PCM 锁在运行时不依赖各个事务的提交或回滚。 IDLM 锁模式与 Oracle 锁模式有些类似,但它们并不相同。在 OPS 中,锁可以是本 地的,也可以是全局的,具体取决于请求和操作的类型。就像在单一实例中一样,锁的 第 2 章 集群的基础知识与历史 33 形式为: 其中 Type 由两个字符组成,ID1 和 ID2 是取决于锁类型的值。ID 是一个 4 字节的 正整数。 本地锁可以分为锁存器和队列。可以为本地实例上运行的操作获取这些锁。共享池 锁存器是本地锁存器的一个简单示例,与是否存在 OPS 无关。队列可是本地的,也可以 是全局的。它们在 OPS 环境中担当全局角色,而在单一实例中保持本地身份。TX(事务) 队列、控制文件队列(CF)、DFS(分布式文件系统)队列锁和 DML/表锁都是 OPS 数据库中 全局队列的示例。相同队列在单实例数据库中是本地的。与此类似,数据字典和库缓存 锁在 OPS 环境中是全局的。 本地锁提供事务隔离或行级锁定。实例锁在访问共享资源时保证缓存一致性。 GV$LOCK 和 GV$LOCK_ELEMENT 都是重要的视图,它们提供了全局队列和实例锁的 相关信息。 在 Oracle 8i 中,两个后台进程——锁管理器守护进程(LMD)和锁监控器(LMON)—— 实现了 DLM(见图 2-7)。每个实例自身拥有这两个进程的集合。DLM 数据库存储有关资 源、锁和进程的信息。在 Oracle 9i 中,DLM 已经被重命名为“全局缓存服务”(GCS) 和“全局队列服务”(GES)。尽管其中的一些代码发生了变化,但 GES 和 GCS 的基本功 能与 DLM 早期版本中的保持一致。 2. DLM 锁兼容性矩阵 每个资源都由自己与众不同的唯一资源名称进行识别。每个资源都可能有一个锁列 表,其中列出当前被赋予用户的锁。这个列表称为“Grant Q”。当一个锁由一种模式转 换为另一种模式或者等待被转换时,这个锁被放在资源的“Convert Q”上。对于每个锁, 内存中都存在一种资源结构,用来维持这个锁的拥有者和转换者的列表。每个拥有者、 等待者或转换者都有一种锁结构,如表 2-3 所示。 表 2-3 DLM 锁兼容性矩阵 锁 NL CR CW PR PW EX NL 授予 授予 授予 授予 授予 授予 CR 授予 授予 授予 授予 授予 队列 CW 授予 授予 授予 队列 队列 队列 PR 授予 授予 队列 授予 队列 队列 PW 授予 授予 队列 队列 队列 队列 EX 授予 队列 队列 队列 队列 队列 每个节点都拥有它所管理资源集的目录信息。为了找到一个资源,DLM 使用一种哈 希算法,根据资源名称找出哪个节点中保存了这个资源的目录信息。完成这一工作后, 第Ⅰ部分 高可用性体系结构与集群 34 会直接向这一“主”节点发出锁定请求。这个目录区域就是一个 DLM 内存结构,它存 储了哪个节点控制着哪些数据块的信息。 表 2-4 中给出了传统的锁命名约定(例如 SS、SX、X),还给出了 DLM 模式。 表 2-4 传统命名与 DLM 命名 传统命名 NL CR CW PR PW EX DLM 命名 NL SS SX S SSX X 请注意,在这个表中,NL 表示 NULL 模式;CR/SS 表示并发读取模式;CW/SW 表 示并发写入模式;PR/S 表示受保护读取模式;PW/SSX 表示受保护写入模式;EX/X 表 明独占模式。 3. 锁的获取与转换 授予资源的锁位于 Grant Q 中(如前面所述)。当一个进程获取一个资源的 Grant Q 上 的锁时,就在这个资源上设置了锁。只有在此时,一个进程才以兼容模式拥有这个资源 上的锁。 如果不存在转换者,并且 Oracle 内核需要的模式与其他对象所拥有的模式兼容,那 么可以获取一个锁。否则,它将在 Convert Q 中等待,直到该资源变为可用。当一个锁 被释放或转换时,转换者运行核验算法,查看它们是否可获取。 在向一个已经有锁的资源发出新请求时,会将一个锁由一种模式转换为另一种模式。 “转换”是指将一个锁由当前拥有的模式转换为一种不同模式的过程。即使模式为 NULL,也认为它拥有一个锁。只有当所请求的模式是已有模式的子集,或者锁模式与 其他对象已有的模式兼容,并且符合 IDLM 中的转换矩阵,才会发生转换。 4. 基于进程和组的锁定 在 DLM 内存区域中分配锁结构时,请求进程的操作系统进程 ID(PID)是这个锁的请 求者的关键标识符。在 Oracle 中可以很容易地将一个进程映射到一个会话,相关信息可 以在 V$SESSION 中获得。但在特定的客户端中,如 Oracle 多线程服务器(MTS)或 Oracle XA 中,单个进程可以拥有许多事务。会话会在许多进程之间迁移,构成一个事务。这样 就可能无法识别这一事务及其出处。因此,锁标识符的设计必须拥有一些基于会话的信 息,在向 DLM 发出锁定请求时,由客户端提供其中的事务 ID(XID)。 在使用基于群组的锁定时会用到群组。特别是在涉及 MTS 时,更是优先选择这种方 式。当使用 MTS 时,如果拥有锁,那么共享服务不能供其他会话使用。从 Oracle 9i 往 后,不再存在基于进程的锁定。在 Oracle 8i OPS(及以后版本)中,无论事务种类如何, 都使用基于群组的锁定。前面曾经提到,一个群组内的进程在向 Oracle 申请任何事务锁 之前使用 XID 来标识自身。 第 2 章 集群的基础知识与历史 35 5. 锁的主控 对于关注某一给定资源的所有节点,DLM 中保存了这些节点上的锁信息。DLM 指 定一个节点来管理一个资源的所有相关锁信息;这个节点称为“主控节点”。锁的主控在 所有节点之间进行分布。 利用“进程间通信”(IPC)层,DLM 的分布式组件允许它共享主控(管理)资源的负载。 因此,一个用户可能在一个节点上锁定一个资源,但实际上是与另一个节点上的 LMD 进程进行通信。容错功能要求,无论有多少 DLM 实例发生故障,都不能丢失有关被锁 定资源的重要信息。 6. 异步陷阱 DLM 进程(LMON、LMD)之间的跨实例通信是使用高速互联上的 IPC 层实现的。为 了传递锁资源的状态,DLM 使用了异步陷阱(AST),它在操作系统处理程序例程中实现 为中断。纯粹主义者可能同意 AST 的确切含义以及它的实现方式(中断或其他阻塞机制), 但对于 OPS 或 Oracle RAC 来说,它就是中断。AST 可以是一个“阻塞 AST”,也可以 是一个“获取 AST”。 当一个进程请求一个资源上的锁时,DLM 向当前对同一资源拥有锁的全部进程发出 一个阻塞异步陷阱(BAST)。在可能和必要时,这个锁的拥有者会放弃这个锁,允许请求 者获取对该资源的访问。DLM 将向请求者发送一个获取 AST(AAST),通知其现在可以 拥有这个资源(和这个锁)。通常将 AAST 看作进程的“唤醒呼叫”。 7. 在 DLM 中如何授予锁 为了说明锁定在 OPS 的 DLM 中是如何工作的,请考虑一个由两个节点组成的示例 集群,它有一个共享磁盘阵列: (1) 进程 p1 需要修改实例 1 上的一个数据块。p1 需要检查这个数据块上是否存在锁, 然后才能将它读入实例 1 上的缓冲区缓存中。 (2) 这个数据块中可能存在锁,也可能不存在,因此 LCK 进程检查 SGA 结构,以 验证缓冲区锁状态。如果存在锁,那么 LCK 必须请求 DLM 对这个锁进行降级。 (3) 如果不存在锁,那么 LCK 必须在本地实例中创建锁元素(LE),其角色是本地的。 (4) LCK 必须以独占模式向 DLM 请求这个 LE。如果该资源由实例 1 主控,那么 LM 继续处理。否则,必须将这个请求发送到集群中的主控 DLM。 (5) 假定这个锁由实例 1 主控,则这个实例上的 DLM 在其 DLM 数据库中进行本地 缓存查询,发现实例 2 上的一个进程已经对同一数据块拥有独占(EX)锁。 (6) 实例 1 上的 DLM 向实例 2 上的 DLM 发出一个 BAST,请求对此锁进行降级。 实例 2 上的 DLM 向同一实例上的 LCK 发出另一个 BAST,将这个锁由 EX 降级为 NULL。 (7) 实例 2 上的进程可能已经更新了这个锁,并且可能还没有提交修改。“脏缓冲区 写入器”(DBWR)得到信号,将这个数据块写到磁盘上。在写入确认之后,实例 2 上的 LCK 将这个锁降级为 NULL,向同一实例上的 DLM 发送一个 AAST。 第Ⅰ部分 高可用性体系结构与集群 36 (8) 实例 2 上的 DLM 针对锁状态的修改对本地 DLM 数据库进行更新,并向实例 1 上的 DLM 发送一个 AAST。 (9) 实例 1 上的主控 DLM 更新主控 DLM 数据库中这个锁(EX)的状态,现在可以将 这个锁授予其实例上的进程。DLM 自身将这个锁升级到 EX。 (10) 实例 1 上的 DLM 现在向本地 LCK 进程发送另一个 AAST,向它通知有关锁授 予的情况,而且现在可以从磁盘读取该数据块。 2.5.4 缓存融合第 1 阶段,CR 服务器 OPS 8i 引入了“缓存融合第 1 阶段”。在 8.1 版之前,缓存一致性都是利用磁盘维护 的(ping 机制)。缓存融合引入了一个名为“阻塞服务器进程”(BSP)的新后台进程。BSP 的主要用途或责任就是在读/写争用情况下,在实例之间传递数据块的一致读取(CR)版 本。这一传递是使用高速互联而不是磁盘完成的。这称为“缓存融合第 1 阶段”,因为不 可能向发出请求的实例传送所有类型的数据块,特别是在写/写争用情况下。 缓存融合第 1 阶段为 Oracle RAC 缓存融合第 2 阶段奠定了基础,在第 2 阶段中,两 种类型的数据块(CR 和 CUR)都可以使用互联进行传递,不过在某些情况下仍然需要进行 磁盘 ping 操作。 Oracle 8i 还引入了 GV$视图或“全局视图”。在 GV$视图的帮助下,DBA 可以查看 集群范围内的数据库和位于集群内任意节点/实例上的其他统计信息。这对 DBA 来说是 一个很大的帮助,因为在此之前,他们必须汇总或连接在多个节点上收集的数据,才能 分析所有统计信息。GV$视图拥有一个 instance_number 列来支持这一功能。 1. 数据块争用 当不同实例上的进程需要访问同一数据块时,就会发生数据块争用。如果一个数据 块正被实例 1 读取,或者以读取模式处于实例 1 的缓冲区缓存中,而且实例 2 上的另一 个进程以读取模式请求同一数据块,就会导致读/读争用。这种情况是所有情况中最简单 的一种,因为没有修改数据块,所以可以很轻松地加以解决。由 BSP 将这个数据块的一 个副本从实例 1 传递到实例 2,或者由实例 2 从磁盘读取,在此过程中不需要为了获取 一致版本而担心应用撤消操作。事实上,在这种情况下并不需要 PCM 协调。 如果实例 1 在其本地缓存中修改了一个数据块,而实例 2 请求读取同一数据块,这 时就会发生“读/写争用”。在 Oracle 8i 中,利用缓存融合第 1 阶段,实例锁被降级,BSP 进程使用在自己的缓存中存储的撤消数据构建该数据块的一个 CR 副本,并将这个 CR 副 本传递给发出请求的实例。这一过程是在 DLM 进程(LMD 和 LMON)的协调下完成的。 如果发出请求的实例(实例 2)需要修改实例 1 已经修改过的数据块,那么实例 1 必须 对锁进行降级,刷新日志条目(如果原来未完成此操作的话),然后将数据块发送到磁盘。 这一过程称为 ping 操作。只有在多个实例需要修改同一数据块时,才需要对数据块进行 ping 操作,使拥有该数据块的实例将数据块写到磁盘中,然后发出请求的实例才能将它 读到自己的缓存中进行修改。磁盘 ping 操作可能会使应用程序在性能方面付出昂贵的 代价。 第 2 章 集群的基础知识与历史 37 在每次向磁盘中写入数据块时,都会发生“虚假 ping”操作,即使另一实例请求的 并不是这个数据块本身,而是请求了由同一锁元素管理的另一数据块,也会发生这一操作。 如果因为另一个实例请求一个锁元素而需要对这个锁元素进行转换,而这个锁覆盖 的数据块已经被写到磁盘中,就会发生“软 ping”操作。 2. 写/写争用 当两个实例都必须修改同一数据块时,就会发生这一情况。前面曾经解释过,当在 实例 1 上对锁进行降级,并且数据块被写到磁盘中时,就会导致磁盘 ping 机制。实例 2 在缓冲区上获得独占锁,并对其进行修改。 2.5.5 Oracle 并行服务器的局限性 OPS 的可伸缩性仅限于在多个节点上执行大量修改的事务性系统。它的可伸缩性还 受限于 I/O 带宽和存储性能。 Oracle 并行服务器需要仔细、清晰的应用程序分区。例如,如果两个不同应用程序 需要两个逻辑数据集,那么应用程序的配置方式应当使一个节点专门针对一种应用程序 类型,在另一个节点上不会出现连接重叠现象。因此,可伸缩性还受限于节点的计算能 力。由于这一“应用程序分区”限制,OPS 在打包应用程序方面的适用性是很有限的。 按需可伸缩性也受到限制,因为我们无法向一个 OPS 集群中动态添加节点。有时, 在添加节点时需要非常仔细地分析应用程序分区,有时还要进行应用程序重新分区。这 极大地限制了其实际的可伸缩性。 OPS 需要进行仔细的设置和管理——有必要采用第三方集群管理程序来进行集群 化,需要增加用于整体应用程序部署的成本。换句话说,OPS 在任何环境中都是不便宜的。 1. 锁配置 OPS 还需要熟练的数据库架构设计师来进行调优和初始配置。OPS 支持许多类型的 锁,每一种都需要进行仔细分析;锁的数量还受到物理内存的限制。DLM 需要额外的内 存进行锁管理,在配置“固定/可释放/哈希”锁之前,有必要进行认真的分析。 OPS 的另一个重要问题是缺少诊断框架。操作系统、集群管理器和数据库集成在一 起,在这种栈中诊断错误是十分复杂的,即使对于富有经验的支持人员也是如此。OPS 中的死锁检测、锁跟踪和集群范围内的统计信息等功能都不充分。这些特性或功能或者 难以实现,或者运行成本很高,由于应对这些技术挑战、难题或需求的难度很大,因此 客户通常不愿意为了弄懂它们而花费太大的精力。 例如,为了诊断一个应用程序锁定问题或一个深层次的 OPS 问题,需要所有实例进 行集群系统状态转储。在一个四节点 OPS 集群中,这一任务非常耗费时间。但这不是一 种限制,而是一项要求。转储整个 SGA 及其所有锁结构的内容是一项成本很高的任务。 Oracle 9i RAC 在其诊断功能方面已经取得了很大进展,而 Oracle 11g RAC 已经通过引入 “自动诊断仓库”(ADR)和事件报表设计改进了这些功能。 第Ⅰ部分 高可用性体系结构与集群 38 2. 可管理性 在几乎所有操作系统中,OPS 都需要 RAW 分区。对于经验不够丰富的 DBA 来说, RAW 装置的安装和管理都非常复杂。RAW 装置不支持动态文件扩展,在一种操作系统 所能支持的 RAW 分区数量方面也有一定的限制。RAW 装置的备份与恢复不同于正常的 文件系统备份,对于 RAW 装置的管理也需要多加小心。DLM 的再配置过程需要很长时 间,当 OPS 注意到一个节点崩溃时,会发生大量的 OSD 级别 API 调用,从而使集群可 用性(以及数据库可用性)大打折扣。RDBMS 内核必须调用许多 API,与 OS 集群件通信, DLM 要等到 OS 集群件完成任务后才能开始进行自己的配置工作。在 Oracle 9i 中,内核 中紧密集成的集群通信代码已经减轻了这一时间延滞。 2.6 Oracle RAC 解决方案 Oracle RAC 是 OPS 的自然演化。OPS 的这些局限性通过代码的改进、缓存融合(将 在本书后面详细讨论)和动态锁主控切换(remastering)得以克服。动态锁主控切换允许在 本地实例中管理经常使用的数据库对象,这种方式大幅减少了互联通信流量,提高了性 能。Oracle 11g RAC 还有一个集成集群件和存储管理框架,不再需要供应商集群件,为 数据库应用程序提供了极强的可伸缩性和可用性。 2.6.1 可用性 通过适当的配置,可以使 Oracle RAC 系统中没有单一故障点的存在,即使运行在低 成本、商业的硬件或存储器上也是如此。如果某一服务器因为任意原因而发生故障,那 么运行在这台服务器上的应用程序和数据都完全不可用。而在 Oracle RAC 中,如果任何 一台数据库服务器发生故障,那么应用程序仍能保持运行,仍能通过其余服务器持续提 供服务。底层集群件确保将这些服务重新定位到其他仍在运行的服务器,这种故障转移 对应用程序经常是透明的,可以在数秒内完成。 Oracle RAC 已经反复证明:在所有“接近死机”的情况下,它仍能以自己的可控可 靠性来保持自己的荣誉。这一可靠性已经最大化。根据适当标准来分析和确认子系统及 系统故障率,可以确保可靠性,而这正是 Oracle RAC 技术的关键组件。 2.6.2 可伸缩性 Oracle RAC 允许一个集群内的多台服务器透明地管理单一数据库,同时不会对数据 库可用性造成任何影响。在数据库运行期间可以添加补充节点。通过动态添加节点和有 效的工作量管理,Oracle RAC 能够通过增加节点数量来运行增大后的工作量,也能够缩 短完成一个工作量所需要的时间,从而允许数据库系统在两个方向上扩展。这意味着过 去笼罩在可用性头顶上的上限已经去除。服务器集合可以透明地协作,以线性可伸缩性 来管理单一数据库。 Oracle RAC 不需要对已有数据库应用程序进行任何修改。一个集群 Oracle RAC 数 第 2 章 集群的基础知识与历史 39 据库对于应用程序来说就像是一个传统的单实例数据库环境。因此,用户可能很轻松地 从单实例配置迁移到 Oracle RAC,不需要修改它们的应用程序。Oracle RAC 也不需要对 已有数据库模式进行修改。 2.6.3 可负担性 Oracle RAC 允许组织使用低成本计算机的集合来管理大型数据库,而不需要购买昂 贵的单一大型计算机。现在,小型商品级服务器的集群可以满足任何数据库工作量。例 如,一位需要管理大型 Oracle 数据库的客户可能选择购买一台由 80 个行业标准服务器 构成的集群,每台服务器有 4 个 CPU;而不是选择一台拥有 32 个 CPU 的服务器。 Oracle RAC 允许运行 Linux 的低成本、行业标准的服务器集群进行扩展,以处理原 来需要使用单台更大、更昂贵的计算机的工作量。在这一计算扩展模型中,需要高级硬 件和操作系统向业务应用程序提供可伸缩性和可用性。但有了 Oracle RAC,就可以通过 Oracle 提供的功能来获得超越操作系统的可伸缩性和可用性的。 2.7 小结 集群是一种以超强可用性扩展和加速数据库工作量的优秀解决方案。因为存储是在 节点之间共享的,所以集群节点的所有成员都能并行访问存储器,这样在节点故障期间 有助于保持系统的可用性。Oracle 数据库实现了“完全共享”体系结构,从而获得按需 可伸缩性和最终的可用性。 通过合适的集群技术可以实现无限的按需可伸缩性和无中断可用性。Oracle 数据库 在集群方面的历史记录非常优秀,这主要是通过 OPS 及其后续的 Oracle RAC 实现的。 OPS 过去有一些局限性,在 RAC 的当前版本中引入了“缓存融合”框架,克服了这些 局限性。Oracle 11g 通过引入只读和主读(read-mostly)锁定框架进一步改进了缓存融合。 Oracle 并行存储技术已经和集群技术一起有了很大的发展。随着 Oracle 11g 引入 Grid Infrastructure,Oracle 集成了自动存储管理功能,它是用于 Oracle 数据库基础设施的真正 卷管理器和文件系统。这样一来,Oracle 基础设施就完全不再需要任何第三方的文件系 统卷管理器。Oracle RAC 11g 以很低的成本提供了极强的可伸缩性、可用性和灵活性。 它通过充分发挥体系结构扩展的功效,降低了数据库整合的成本,提高了可靠性。 第 5 章 Oracle RAC 的安装 在本章中,我们将详细介绍 Oracle 11g (11.2.0.2) RAC 数据库安装过程。安装前的大 多数准备工作已经在第 4 章的预安装阶段完成了;安装 Oracle RAC 软件类似于执行单实 例安装。甚至在内部,Oracle 通用安装程序(OUI)也是在一个节点上安装二进制文件,并 使用底层文件传输机制将文件传播到其他节点,再将它们重新链接到各自的操作系统二 进制文件。 Oracle 在 Oracle 11g R2 数据库中引入了一些变化,特别是在 11.2.0.2 补丁集中。我 们将在本节讨论这些重要的变化。为了提高可读性,本书将对 Oracle RAC 11g R2 中引 入的变化和功能进行适当标记。从 Oracle 11g R2 开始,数据库补丁集中将包含软件二进 第Ⅱ部分 安装、配置和存储 110 制文件并支持异地数据库升级,从而避免先安装 Oracle 基础版本二进制文件,然后再升 级补丁集。 Oracle RAC One Node 是 Oracle RAC 11g R2 中引入的另一个重要功能。Oracle RAC One Node 是一个单实例 Oracle RAC 数据库,它运行在预先配置有 Oracle Grid Infrastructure 的单台计算机上。另外从这个版本开始,利用 DBMS_DST PL/SQL 包简化 了对那些带有 TIMEZONE 数据的 TIMESTAMP 的维护,它可以透明地升级带有 TIMEZONE 数据的 TIMESTAMP,不需要客户端通过打补丁的方式添加时区数据文件。 Oracle RAC One Node Oracle RAC One Node 是一个单实例 Oracle RAC 数据库,运行在预先配置有 Oracle Grid Infrastructure 的单一节点上。通过利用集群化技术,Oracle RAC One Node 数据库 允许根据需要将数据库实例迁移到其他服务器,在没有任何停机时间的情况下转换到 Oracle RAC,并为单实例数据库提供补丁。Oracle RAC One Node 还为单实例数据库提供 了高可用性。Oracle 提供了 OMOTION 实用工具,用于在没有任何停机时间的联机情况 下,将 Oracle RAC One Node 数据库实例迁移到集群中的其他服务器。 Oracle 在内部使用事务关机来联机迁移单个实例,不会对当前事务产生影响,但 Oracle 确保两台服务器不会在同一时间提供相同服务。这是 Oracle 11g R2 中一个相当受 欢迎的变化,因为它允许大型组织在一个地方合并较小的单实例数据库,同时还允许它 们实现组织内部 Oracle 数据库的部署标准化,在没有停机时间的情况下将单实例数据库 升级到 Oracle RAC 数据库,从而提高这些数据库的可伸缩性。 注意: Oracle Support 已经发布了 Note 1189783.1,它解释了在 Oracle 11g R2 (11.2.0.2)补丁集中引入的重要变化。在“新功能指南”中可以找到有关 Oracle 11g R2 中新功能的详细信息,这一指南可以从“Oracle 技术网络” 网站获得,从以下网址中可以直接访问这一网站:http://download.oracle.com/ docs/cd/E11882_01/server.112/e17128/toc.htm。 尽管并非必需,但集群验证实用工具(cluvfy)也可用于进行数据库安装之前的检查。 我们可以采用预安装模式运行集群验证实用工具,以验证 Oracle 集群件的基本节点可到 达性和完整性。这样还会检查基本内核参数和所需要的操作系统库。最后,这个实用工 具检查 Oracle 集群件守护进程的状态和网络基础设施问题。为了确认在硬件方面已经完 成了安装准备,可以按照如下代码所示运行 cluvfy: $ ./runcluvfy.sh stage -pre dbinst -n alpha1,alpha2,alpha3 -osdba dba Performing pre-checks for database installation <> Pre-check for database installation was successful on all the nodes. 第 5 章 Oracle RAC 的安装 111 在为数据文件决定存储位置之后,就可以开始安装 RAC。只有从先前版本升级到 Oracle RAC 数据库时,才支持为 Oracle 11g R2 RAC 使用 RAW 设备;否则,只能使用 一种受支持的集群文件系统 NFS 或 Oracle ASM。 与 Oracle RAC 的先前版本不同,在安装数据库之前不再需要使用 Oracle 数据库二 进制文件来安装和配置 ASM,这是因为已经使用 Oracle Grid Infrastructure 安装和配置 了 ASM。因为我们将使用 Oracle ASM 来构建这个 Oracle RAC 数据库,所以需要创建 Oracle ASM 磁盘组来存储 Oracle 数据和备份。 在安装之前,可以为自己喜爱的外壳调整环境设置,并在启动安装程序时打开跟踪 选项(在第 4 章中对此进行了详细讨论)。跟踪信息可以帮助我们了解安装程序的当前阶 段,并在发生故障以及/或者挂起时对安装过程进行调试。 5.1 Oracle RAC 的安装 Oracle 通用安装程序用于安装 Oracle RAC 二进制文件。OUI 将在第一个节点上安装 Oracle RAC 二进制文件,然后将它们复制到集群中的其他服务器上。 可以使用 cluvfy 实用工具提前进行数据库配置检查,如下所示。这个实用工具必须 以 oracle 用户身份来运行。由于 Oracle 通用安装程序在安装 Oracle RAC 11g R2 之前将 在内部运行 cluvfy,因此并不一定要运行 cluvfy 实用工具来检查先决条件。 $ ./runcluvfy.sh stage -pre dbcfg -n alpha1,alpha2,alpha3 -d <> Pre-check for database configuration was successful on all the nodes. 前面曾经提到,在正确设置了先决条件之后,Oracle RAC 的安装和单实例环境一样 简单。可以从安装介质(CD-ROM 或 DVD)中安装它,如果把软件复制到磁盘上,那么也 可以从中转区域进行安装。 仅在集群中第一个节点上的 X 客户端中运行以下步骤: (1) 首先运行以下代码: $ cd /u01/stage/11gR2/database $ ./runInstaller OUI 将显示 Configure Security Updates 界面(参见图 5-1),在这个界面上可以指定用 于 Oracle My Support 注册的电子邮件及密码,以便 Oracle 在有新的安全更新时可以通知 你。注意,这一操作需要数据库服务器连接到互联网上,而大多数的数据中心出于安全 原因而不会将其数据库服务器暴露到公共网络。取消选中这个界面上的 I wish to receive security updates via My Oracle Support 复选框。 第Ⅱ部分 安装、配置和存储 112 图 5-1 Configure Security Updates 界面 (2) 单击 Next 按钮。这一操作将把你带入 Download Software Updates 界面(参见图 5-2),在这个界面上可以指定 Oracle My Support 登录详细信息,以便在开始 Oracle RAC 软件安装之前,OUI 可以从 My Oracle Support 自动下载所需要的软件更新——如任何新 的安装要求、已知的补丁集更新(PSU)等。这个界面还允许指定一个存储位置,用于存储 预先下载的软件更新。我们将在这个界面上选择跳过软件更新,因为我们不希望在安装 期间下载软件更新。 图 5-2 Download Software Updates 界面 (3) 单击 Download Software Updates 界面上的 Next 按钮,打开 Select Installation Option(选择安装选项)界面(参见图 5-3),在这里可以为当前安装指定所需要的安装和配 置选项。这个界面提供了以下 3 种安装选项: 第 5 章 Oracle RAC 的安装 113 ● Create and configure a database(创建和配置数据库) 这个选项是默认的安装 选项,它安装 Oracle RAC 二进制文件,并根据预先配置的模板创建一个数据库。 这个选项对于初学者非常有用,因为 Oracle 为不同类型的工作量提供了不同模 板,如用于 OLTP 和决策支持系统的不同模板。 ● Install database software only(仅安装数据库软件) 这个选项在集群中的所有 服务器上安装 Oracle RAC 软件。数据库管理员大多使用这一选项,这样,在安 装了 Oracle RAC 二进制文件之后,他们可以使用数据库配置助手来创建数据库, 从而拥有更大的灵活性。 ● Upgrade an existing database(升级已有数据库) 这一选项对集群中的已有 Oracle RAC 数据库进行升级。 在这个界面上,选择 Install database software only 选项。 图 5-3 Select Installation Option 界面 (4) 在指定安装选项之后,单击 Next 按钮。在 Grid Installation Options(网格安装选 项)界面上(如图 5-4 所示),可以选择以下 3 种选项之一: ● Single instance database installation(单实例数据库安装) 这一选项允许仅在 本地节点上安装单实例数据库软件。 ● Oracle Real Application Cluster database installation(Oracle RAC 数据库安装) 这一选项允许在集群中的选定节点上选择和安装 Oracle RAC 二进制文件。 ● Oracle RAC One Node database installation 这个选项在选定节点上安装 Oracle RAC One Node 数据库二进制文件。 在这个界面上,选择 Oracle Real Application Cluster database installation 选项。 第Ⅱ部分 安装、配置和存储 114 图 5-4 Grid Installation Options 界面 (5) 在选择网格安装选项之后,将会把你带入 Select Product Languages 界面(参见图 5-5),在这里选择安装语言(默认情况下选择英文)。可以从表中的可用列表内选择所需要 的语言。 图 5-5 Select Product Languages 界面 (6) 在完成 Select Product Languages 界面中的选择之后,将会转入 Select Database Edition(选择数据库版本)界面(参见图 5-6),在这里可以选择 Oracle RAC 数据库的企业版 或标准版。认真地根据自己购买的许可在这个界面上选择选项。 第 5 章 Oracle RAC 的安装 115 图 5-6 Select Database Edition 界面 (7) 接下来,在 Specify Installation Location 界面(参见图 5-7)中,为 ORACLE_BASE 和 ORACLE_HOME 指定存储位置。如果是从一个先前版本(例如 11.2.0.1)进行升级,那 么 Oracle 将允许选择现有的 ORACLE_HOME;在其他情况下,ORACLE_HOME 的存储 位置应当总是唯一的。 图 5-7 Specify Installation Location 界面 (8) 在 Privileged Operating System Groups 界面(参见图 5-8)中,从提供的值列表中选 择数据库管理员和数据库操作员操作系统组。应当确保在这个界面上选择了正确的操作 系统组,因为如果选择有误,就可能会干扰 Oracle RAC 数据库软件的运行。 第Ⅱ部分 安装、配置和存储 116 图 5-8 Privileged Operating System Groups 界面 (9) 在 Perform Prerequisite Checks 界面上(参见图 5-9),Oracle 通用安装程序验证安 装 Oracle RAC 数据库软件所需要的最低要求。Oracle 通用安装程序在内部执行集群验证 实用工具,验证操作系统和硬件先决条件。根据集群验证实用工具的执行结果,Oracle 在这个界面上显示未能达到的先决条件。因为我们在启动安装程序之前已经运行了集群 验证实用工具,所以在这一阶段不会产生什么意外。 图 5-9 Perform Prerequisite Checks 界面 从 Oracle Database 11g 开始,OUI 还提供了一些纠正脚本,用于纠正那些出现问题 但能纠正的先决条件需求。如果出现问题的先决条件能够用纠正脚本纠正,Oracle 就会 第 5 章 Oracle RAC 的安装 117 将其可纠正状态标记为 Yes,并在这个界面上显示出来。可以选择那些可纠正状态为 Yes 的问题先决条件,并单击这个界面上的 Fix and Check Again(修正并再次检查)按钮,对这 些先决条件进行修复,并再次检查。安装程序成功地验证了所需先决条件之后,单击 Next 按钮,继续进行操作。 (10) 在 Summary 界面上(参见图 5-10),Oracle 显示了安装信息。我们应当核对这些 信息。还可以将这些内容保存为一个响应文件,并将其用于采用静默安装方法进行的大 批量部署。关于如何用响应文件运行 Oracle 通用安装程序以实现自动部署的信息,请参 阅 Oracle Universal Installer Guide。我们现在介绍的这个分步安装过程称为“交互式安装 过程”。 图 5-10 Summary 界面 Oracle 静默安装 如果采用交互式方法在多台计算机上多次安装 Oracle 软件,那么不但费时,还容易 产生错误,所以在大批量部署 Oracle 产品时会采用静默安装方法。另外,静默安装还可 以在整个组织里采用统一的部署模式。这样就确保了组织内的多位用户使用标准安装选 项来安装 Oracle 产品。这为内部 Oracle 支持团队提供了极大的帮助,因为他们可以知道 每台服务器上安装了哪些组件和选项,还知道它们的环境设置,包括各个跟踪文件的 位置。 (11) 如果所显示的信息正确无误,那么单击 Install 按钮来启动软件安装。Oracle RAC 的安装可能要花费 30 分钟,具体取决于硬件配置。安装程序会将所有必需文件复制到 Oracle 数据库主目录中,并将这些文件与操作系统库相链接。在本地节点完成安装和链 接之后,安装程序会把这些文件复制到远程节点。在整个过程期间,可以在 Install Product 界面(参见图 5-11)的进度条中看到其状态,这个进度条显示了已完成的百分比。 第Ⅱ部分 安装、配置和存储 118 图 5-11 Install Product 界面 (12) 您会得到指示,以超级用户 root 身份来运行安装脚本。您需要打开一个新的终 端窗口,并以超级用户身份在集群中的所有节点上运行 root.sh 脚本(参见图 5-12)。这个 脚本在/etc 之下创建 oraenv 和 oratab 文件,并将 Oracle 可执行权限设置给拥有者和组级 别。oratab 项的文件位置取决于具体平台,通常可以在/etc 或/var/opt/oracle 目录中找到。 这个 root.sh 脚本必须以超级用户 root 身份运行。 图 5-12 root.sh 界面 (13) 在运行 root.sh 之后,返回安装程序,并单击 OK 按钮,显示 Finish 界面(参见 图 5-13)。 第 5 章 Oracle RAC 的安装 119 图 5-13 Finish 界面 (14) 单击 Finish 界面上的 Close 按钮,关闭 Oracle 通用安装程序。 创建 Oracle RAC 数据库 在 Oracle RAC 环境中创建 RAC 数据库和在单实例环境中创建数据库一样简单。在 使用 DBCA 的创建过程中,唯一的变化是在 Database Identification(数据库确认)界面上选 择节点。根据情况,可以使用 DBCA 生成脚本,并在以后运行它们。 要在创建数据库时为数据文件采用 ASM,请执行以下各个步骤(如果使用不同存储 选择,那么步骤编号可能会稍有一些变化。但是,数据库创建过程与 ASM 环境中创建 数据库的过程相同)。 (1) 创建将用于存储数据文件的 ASM 磁盘组。从 Oracle 11g R2 开始,DBCA 不能 再用于创建 ASM 磁盘组。Oracle 引入了一个名为“自动存储管理配置助手”(也称为 ASMCA)的专用配置助手来创建和管理 ASM 实例、卷、集群文件系统和磁盘组。可以采 用 grid 用户身份从$GRID_HOME/bin 中启动 ASMCA,就像我们在步骤(2)中执行 DBCA 的方式一样。我们将使用第 4 章安装 Oracle Grid Infrastructure 时创建的 DATA 磁盘组, 但创建 ASM 磁盘组的典型步骤中包括对 ASM 使用的磁盘进行标记,然后使用任意 ASM 客户端创建 ASM 磁盘组,这些客户端可以是 ASMCA、ASMCMD 或 SQL*Plus。我们将 在第 6 章中详细进行讨论。 (2) 以 oracle 用户身份启动“数据库配置助手”(DBCA)。浏览到$ORACLE_HOME/bin 目录。如果希望启动跟踪,那么需要根据第 4 章中的讨论来定制 Java 运行时环境,以获 得跟踪信息。 $./dbca 利用 DBCA 可以创建、配置或删除一个集群数据库和管理数据库模板。如果正在创 建集群中的第一个数据库,那么只允许选择 Create a Database 选项和 Manage Template 选 项。在 Welcome 界面(参见图 5-14)上,选择 Oracle Real Application Clusters(RAC)database 第Ⅱ部分 安装、配置和存储 120 选项,使用 DBCA 创建一个 Oracle RAC 数据库。单击 Next 按钮。 图 5-14 Welcome 界面 (3) 在创建 Oracle RAC 数据库时,将选择参与节点,而在单实例环境中,调用 DBCA 的节点就是创建数据库的默认节点。在下一个界面上(参见图 5-15),选择 Create a Database (创建一个数据库)单选按钮。单击 Next 按钮。 图 5-15 Operations 界面 注意: 从 Oracle RAC 11g R2 开始,DBCA 可用于创建 Oracle RAC One Node 数 据库。SRVCTL 实用工具也与 Oracle RAC One Node 数据库集成在一起, 可用于将 Oracle RAC One Node 数据库重新定位到另一台服务器。在 Oracle RAC 11g R2 中,通过创建和转换新创建的 Oracle RAC 数据库, 可以创建一个 Oracle RAC One Node 数据库。 第 5 章 Oracle RAC 的安装 121 (4) 利用预先定义的数据库配置模板,可以让这个过程变得更容易一些。在 Database Templates 界面中(参见图 5-16),Oracle 提供了一些预定义模板,可用于根据所期望的工 作量类型创建新数据库。这些模块带有数据文件,但如果希望自定义诸如数据块大小之 类的数据库属性,那么在使用这些模板时也可以放弃数据文件。这个界面显示了 3 个选 项:General Purpose or Transaction Processing、Custom Database 和 Data Warehouse。每个 选项都为新数据库提供了预先配置的参数/属性,并且 Custom Database 选项允许你决定 这些属性和参数。无论在这个界面上选择哪一个选项,都可以在后续步骤中对数据库进 行自定义。在这个界面上选择 General Purpose or Transaction Processing 选项,并单击 Next 按钮。 图 5-16 Database Templates 界面 (5) 在 Database Identification 界面(参见图 5-17)中,选择这个集群数据库的全局名称, 并选择一个前缀,作为数据库服务标识符。从 Oracle RAC 11g R2 开始,Oracle 为集群数 据库引入了两种不同的配置方案。在这个界面上,为这个数据库选择 Admin-Managed 配 置或 Policy-Managed 配置。这些不同配置允许进一步提高 Oracle RAC 数据库的资源利 用率。如果 Oracle 集群件正在运行,那么数据库配置助手将自动检测集群和集群中的节 点数量,然后填充这个界面上的节点名称。在这个界面上选择 Admin-Managed 选项,并 在 Global Database Name 和 SID Prefix 字段中输入 RAC。这个本地节点被默认选中,所 以单击 Select All 按钮,然后单击 Next 按钮。 注意: Global Database Name 和 SID Prefix 的值必须以字母字符开头,但后面可 跟有数字字符。 第Ⅱ部分 安装、配置和存储 122 图 5-17 Database Identification 界面 Admin-Managed 与 Policy-Managed 的 Oracle RAC 数据库 Admin-Managed 的 Oracle RAC 数据库是一种传统的配置方法,在这种方法中,我们 可以指定集群中运行 Oracle RAC 数据库实例的服务器。还可以为一个给定数据库服务指 定优选的、可用的 Oracle RAC 数据库实例。在 Policy-Managed 的 Oracle RAC 数据库中, 不能灵活地决定集群中的哪台服务器将运行 Oracle RAC 数据库实例。Oracle 将根据 Oracle RAC 数据库的基数(cardinality)启动一个服务器池中服务器上的 Oracle RAC 数据 库实例。 在一个 Admin-Managed 的 RAC 数据库中,数据库服务和 Oracle RAC 数据库实例之 间有一种关系/关联;而在 Policy-Managed 的 Oracle RAC 数据库中,在数据库服务和服 务器池之间有一种关系,因为 Oracle 将自动决定 RAC 数据库实例,它将提供给定的数 据库服务。服务器池是集群中不同服务器组成的池,Oracle 用它来自动容纳数据库实例。 服务器池中的服务器数量应当总是大于基数中所指定的 Oracle RAC 数据库实例数量。 CRSCTL 和 SRVCTL 实用工具可用于创建和管理 Oracle RAC 数据库中的服务器池。 (6) 我们可以使用 Oracle 企业管理器来管理数据库。在 Management Options 界面上 (参见图 5-18),如果希望使用企业管理器来管理这个数据库,那么可以选中 Configure Enterprise Manager 复选框。如果在这个本地节点上运行了“Oracle 网格控制”代理,在 网络中安装了“Oracle 网格控制”且它正在运行,那么可以向 Oracle 网格控制环境注册 和管理这个数据库。或者,可以使用 Configure Database Control for local management 选 项。还可以使用数据库控制来配置通知和备份。取消选中这个界面上的 Configure Enterprise Manager 复选框,并单击 Next 按钮。 第 5 章 Oracle RAC 的安装 123 图 5-18 Management Options 界面 (7) 在下一个界面上,会要求输入 SYS、SYSTEM、DBSNMP 和 SYSMAN 账户的 密码(参见图 5-19)。在早期的 Oracle 版本中,SYS 和 SYSTEM 账户使用默认密码(SYS 的默认密码为 change_on_install,SYSTEM 的默认密码为 manager)。由于在 Oracle Database 10g 和更新版本中,这些管理账户没有默认密码,因此请选择 Use the Same Password for All Accounts(为所有账户使用相同密码)选项,输入并确认密码,然后单击 Next 按钮。也可以选择 Use Different Administrative Passwords(使用不同管理密码)选项, 为这些管理账户使用不同密码。 图 5-19 Administrative Passwords 界面 (8) 在下一个界面中,为数据库指定存储类型和数据库文件位置(参见图 5-20)。可供 使用的存储类型为 Cluster File System(集群文件系统)和 Automatic Storage Management (自动存储管理),可以从 Storage Type(存储类型)下拉列表中选择它们。从 Oracle 11g R2 开始,不再支持 RAW 设备。由于我们将为这个集群数据库使用 ASM,因此从 Storage Type 第Ⅱ部分 安装、配置和存储 124 下拉列表中选择 Automatic Storage Management 选项。在这个界面上,Oracle 允许从模板 中选择数据库文件位置;可以将数据库文件存储到一个公共位置,或者可以使用 Oracle-Managed Files 机制,让 Oracle 为我们管理这些数据库文件。为存储位置选择 Use Oracle-Managed Files 选项,然后单击 Next 按钮。 图 5-20 Database File Location 界面 (9) 在下一个界面上,指定用于存储 Oracle 数据库备份文件的快速恢复区域,包括 存档和闪存日志(参见图 5-21)。可以在 Fast Recovery Area Size(快速恢复区域大小)字段中 指定“快速恢复区域”的大小。Oracle 使用 ASM 磁盘组的空间不会大于快速恢复区域 的大小。在这个界面上,还可以选中 Enable Archiving(启用存档)复选框,以启用重做日 志存档。在这个安装过程中,不使用快速恢复区域和存档,所以取消选中这个界面上的 Specify Fast Recovery Area 和 Enable Archiving 复选框,然后单击 Next 按钮。 图 5-21 Recovery Configuration 界面 第 5 章 Oracle RAC 的安装 125 快速恢复区域 快速恢复区域(在先前数据库版本中也称为“闪存恢复区域”)是一个专用存储位置, Oracle 用它来存储所有数据库备份相关的文件,从而在进行数据库恢复时,Oracle 可以 快速从这个专用存储位置恢复备份片段,而不用从慢速磁带库中进行提取。这个存储使 用两个数据库初始化参数进行配置:DB_RECOVERY_FILE_DEST 和 DB_RECOVERY_ FILE_DEST_SIZE。Oracle 管理这个存储区域,并根据备份保持策略自动清除过时的备 份内容。 (10) 在 Database Content(数据库内容)界面中,可以选择创建示例模式——一组可用 于培训目的的模式(如图 5-22 所示)。其中包括名声不佳的 EMP 和 DEPT 表。在 Custom Scripts(自定义脚本)选项卡中,可以选择在数据库创建过程中运行自定义脚本。单击 Next 按钮。 图 5-22 Database Content 界面 (11) 在 Initialization Parameters 界面中,可以指定一些初始化参数,用于控制 Oracle 数据库使用的内存(如图 5-23 所示)。大多数调整参数都可以在以后改变。在 Character Sets(字符集)选项卡中,可以选择这个数据库的字符集、默认语言和日期格式。在 Connection Mode(连接模式)选项卡中,可以指定数据库的连接模式。默认情况下,Oracle 使用 Dedicated Server(专用服务器)模式。在这一阶段,唯一必须知道的重要事情就是这 个数据库的字符集和数据块大小。选择适当的字符集和数据块大小,其他初始化参数集 保留默认即可。可以在以后对它们进行优化调整。 第Ⅱ部分 安装、配置和存储 126 图 5-23 Initialization Parameters 界面 (12) 单击 Next 按钮以打开 Database Storage(数据库存储)界面(参见图 5-24)。在这里 可以指定数据文件、控制文件和重做日志组的位置。还可以为数据文件和重做日志指定 文件位置变量。在为数据文件、控制文件和重做日志组指定位置之后,就可以开始创建 数据库了。可以立即创建数据库,也可以生成用于创建数据库的脚本。 图 5-24 Database Storage 界面 (13) 如果立即创建数据库,那么一种好的做法是生成脚本,以便能够查看正在运行 什么内容,还可以保留这些脚本,供以后使用。可以在任意本地目录中选择存储脚本的 位置。默认情况下,它们存储在$ORACLE_BASE/admin 目录中,如图 5-25 所示。 第 5 章 Oracle RAC 的安装 127 图 5-25 Creation Options 界面 (14) 单击 Finish 按钮以查看 Summary 界面(参见图 5-26)。这个界面包含为这一安装 过程选择的选项。单击 OK 按钮。在创建数据库之后,单击 Exit 按钮启动数据库实例。 图 5-26 Summary 界面 5.2 小结 本章详细介绍了 Oracle Database 11g R2 RAC 的安装过程。根据选择的选项和配置, 安装的步骤数量可能会稍有不同。我们详细给出了 Oracle 在 Oracle RAC Database 11g R2 中引入的重要变化,例如 Oracle RAC One Node 以及 Oracle RAC 数据库的 Admin-Managed 和 Policy-Managed 配置。 第Ⅱ部分 安装、配置和存储 128 Oracle RAC One Node 是一个新引入的选项,用于帮助构建一个单数据库基础设施, 为 Oracle Grid Infrastructure 提供的高可用性功能做好准备。实例故障由 Oracle 集群件检 测,会在服务器池中的另一台服务器中自动重新启动,从而确保了对 Oracle RAC One Node 的故障转移保护。 与 Oracle RAC 的先前版本不同,由于 ASM 是 Oracle Grid Infrastructure 的一部分, 并且在 Oracle Grid Infrastructure 安装和配置期间进行配置,因此不需要单独安装和配置 ASM。在第 6 章中,我们将讨论 ASM 体系结构,并详细研究它的功能。 第 6 章 自动存储管理 管理存储是 DBA 最复杂、最耗时的任务之一。由于数据库的整合以及业务的高速 发展,可能会使数据以指数速度增长。业务需求要求数据库存储系统具有持续可用性, 存储的维护窗口从数小时缩减到数分钟。法律方面的要求可能进一步加重了负担,因为 它要求这些数据必须保留更长的时间(我知道有些地方将几百 TB 的有效数据存储达 7 年 甚至更长时间)。DBA 管理的平均存储规模已经从几个 TB 增长到 PB 级别。 图 6-1 显示了磁盘容量与每个 DBA 的管理容量之间的管理差距。 第Ⅱ部分 安装、配置和存储 130 容量 ( 单位: TB) 磁盘容量 容量/DB 管理员 来源:OpenWorld 提供 管理差距 图 6-1 存储增长与管理差距 除了外部实体提出的挑战之外,存储管理还会始终涉及许多内部运行组织。它涉及 系统管理员、网络管理员和存储(或 SAN)管理员,以及 DBA 运行团队的参与。为了降低 复杂性和各个实例之间的相互依赖性,所有这些数据应当存储在一个位置,更重要的是, 应当由同一个运行团队来管理。 采用新技术可以帮助 DBA 很轻松地管理海量数量,不会花费太大数量的管理开销。 一些新的工具也在开发之中,它们能够与 RDBMS 内核紧密合作,使数据库管理和数据 合并变得更容易。自动存储管理(昵称为“卓越的存储管理”)是由 Oracle 提供的这些革 命性解决方案之一。Oracle 在 Oracle 10g 引入了自动存储管理,它在 Oracle 11g 中得到 了大幅度提升,在 Oracle 数据库软件内部提供了完整的卷管理器。Oracle ASM 和文件系 统得到了高度优化,可以避免传统文件系统产生的各种开销,从而提供原始磁盘所具备 的性能。 6.1 有关自动存储管理的一些事实 ASM 是一种存储解决方案,它提供了一个卷管理器,还有一些文件系统功能,可以 把它们与 Oracle 数据库紧密集成在一起,并对其进行优化。它是通过 3 个关键组件实现 的:ASM 实例、ASM 动态卷管理器(ADVM)和 ASM 集群文件系统(ACFS)。ASM 动态 卷管理器为 ASM 集群文件系统提供了卷管理器功能。只有 Oracle Grid Infrastructure 11g R2 及更高版本中才提供 ASM 集群文件系统。 ACFS 帮助客户降低整体 IT 预算成本,这是因为它完全消除了对第三方集群文件系 统的需求,这是集群应用程序的最常见需求。由于 ACFS 被构建为一种真正的集群文件 系统,因此它也可用于非 Oracle 企业应用程序。ASM 允许进行联机重新配置,并可以 实现 ASM 磁盘的再均衡,从而简化了存储管理。ASM 将 I/O 操作分散到一个磁盘组中 的所有可用磁盘上,并提供原始磁盘性能,所以它针对 Oracle 数据库进行了高度优化。 简而言之,ASM 环境以非常简单的文件系统管理提供了原始磁盘 I/O 的性能。它简 化了数据库管理,不再需要直接管理可能达到数千个的 Oracle 数据库文件。 第 6 章 自动存储管理 131 6.1.1 ASM 的物理限制 Oracle 从第 7 版开始,每个数据库中的数据文件数一直都在增加,在 Oracle 第 7 版 中,每个数据库只能使用1022个数据文件。现在的Oracle版本在每个表空间中支持65 533 个数据文件,在一个多数据库环境中管理数千个文件是很有挑战性的。ASM 允许将所有 可用存储划分到磁盘组中,从而简化了存储管理。我们可以针对不同性能要求创建不同 的磁盘组。例如,可以用低性能硬盘创建 ASM 磁盘组,以存储存档数据,而由高性能 磁盘组成的 ASM 磁盘组可用于活动数据。 我们管理为数不多的磁盘组,ASM 自动在这些磁盘组中放置数据库文件。利用 ASM, 可以拥有 63 个磁盘组,其中放置 10 000 个 ASM 磁盘,每个 ASM 磁盘可以存储高达 2TB 数据。一个磁盘组可处理 100 万个 ASM 文件。在 Oracle Database 11g 中,一个数据文件 所支持的最大文件大小为 128TB,而 ASM 在采用外部冗余时支持高达 140PB 数据,正 常冗余时支持 42PB,高冗余时支持 15PB。图 6-2 将传统数据存储框架与 ASM 进行了 对比。 ASM 之前 表 表空间 文件 文件系统 逻辑卷 磁盘 表 表空间 ASM 磁盘组 存储 (SAN、NAS、DAS、JBOD…) ASM 图 6-2 传统框架与 ASM 对比 6.1.2 操作中的 ASM ASM 将一个文件分为片断,并将这些片断均匀分布到所有磁盘上,这一点不同于卷 管理器,它将整个卷分散到不同磁盘上。这是与传统分条技术的关键性区别,传统分条 技术使用数学函数对整个逻辑卷进行分条,与文件和目录无关。分条需要在开始时仔细 进行容量规划,这是因为添加新卷时需要再均衡和停机时间。 利用 ASM,无论是添加新存储还是删除存储,ASM 都不会对所有数据进行再分条。 它只是移动一定数量的数据(这一数据与添加或移除的存储数量成比例),将这些文件进 行均匀的再分布,保持磁盘之间的 I/O 平衡。这一过程是在数据库处于活动状态下进行 的,对数据库和终端用户应用程序来说是完全透明的。 ASM 支持一个 Oracle 数据库使用的所有文件(pfile 和密码文件除外)。从 Oracle 11g R2 开始,ACFS 可用于非 Oracle 应用程序文件。ASM 还支持 Oracle RAC,并不再需要 第Ⅱ部分 安装、配置和存储 132 集群逻辑卷管理器或第三方集群文件系统。关于 ASM 的另一个关键事实是它与 Oracle 集群件集成在一起,可以从一个扩展集群中的镜像数据副本中进行读取,在扩展集群中 使用时,可以改进 I/O 性能(“扩展集群”是 Oracle RAC 中的专用体系结构,在这种体 系结构中,节点放在不同的地理位置。有关其设计与实现的更多详细信息将在第 15 章讨 论)。 ASM 有企业版和标准版可供使用,会自动随 Oracle Grid Infrastructure 一同安装。 ASM 代码可以与 RDBMS 代码紧密集成在一起,一直到 11.1 版本之前,它都是 RDBMS 安装的组成部分。从 Oracle Database 11g R2 开始,ASM 与 Oracle Grid Infrastructure 集 成在一起。 SQL 是连向数据库的接口,而 ASM 提供了用于创建数据库结构的 SQL 接口,这些 结构包括表空间、控制文件、重做日志和存档日志文件。我们可以指定磁盘组中的文件 位置;ASM 会为我们创建和管理相关的底层文件。其他接口也与 ASM 进行交互,如 ASMCMD、OEM 和 ASMCA。DBA 用得最多的 ASM 管理工具是 SQL*Plus,而系统和 存储管理员大多喜欢使用 ASMCMD 实用工具来管理 ASM。 1. ASM 分条和镜像 “分条”是一种用于在多个磁盘驱动器之间分散数据的技术。一个大的数据段被分 为较小的单元,这些单元分布在可用设备之间。分隔数据的单元称为“数据单元大小” 或“条带大小”。“条带大小”有时也称为“块大小”,是指向每个磁盘写入这些条带的大 小。可以同时读写的并行条带数量称为“条带宽度”。分条可以加快从磁盘存储中获取数 据的操作,这是因为它扩展了总 I/O 带宽的能力。这样就优化了性能和磁盘利用率,从 而不再需要手动 I/O 性能调优。 ASM 支持两个分条级别:精细分条和粗略分条。精细分条使用的条带宽度为 128KB, 而粗略分条使用的条带宽度为 1MB。精细分条可用于那些通常进行较小读写操作的文件。 例如,联机重做日志和控制文件是精细分条的最佳对象,因为对它们的读写操作在本质 上都是比较小型的。目前的 Oracle 版本不支持其他分条选项。 ASM 镜像要比操作系统镜像磁盘更灵活一些,因为 ASM 镜像支持按文件来指定冗 余级别,而不是按卷来指定。在内部,镜像是在盘区级别进行的。如果对一个文件进行 了镜像,那么根据为此文件设定的冗余级别,每个盘区上都会有一个或多个镜像副本, 镜像副本总是保存在磁盘组的不同磁盘上。 表 6-1 描述了 ASM 针对每个文件所支持的镜像选项。 表 6-1 镜像选项 ASM 冗余 镜 像 级 别 描 述 外部 无镜像 没有来自 ASM 的镜像。可以在存储级别或磁盘级别实现镜像时 使用 常规 双重镜像 每个盘区在不同的故障群组中有一个镜像副本 高 三重镜像 每个盘区在不同的故障群组中有两个镜像副本 第 6 章 自动存储管理 133 总而言之,ASM 不需要外部卷管理器或外部集群文件系统来进行磁盘管理;由于 ASM 提供的功能可能会与外部卷管理器的功能发生冲突,因此不建议使用外部卷管理 器。ASM 扩展了 Oracle 管理文件的功能,可以自动创建和管理这些文件,但利用 ASM, 还可以获得诸如镜像或分条等功能的附加优点。 2. Stripe And Mirror Everything(对所有内容进行分条和镜像) Stripe And Mirror Everything(SAME)是一种简单而高效的技术,用于管理海量数据。 ASM 实现了 Oracle SAME 方法,在这种方法中,对所有可用磁盘上所有类型的数据进 行分条和镜像。这样可以帮助在磁盘组的所有磁盘之间均匀地分布和平衡 I/O 负载。镜 像为数据库服务器提供了必需的容错功能,而分条则为数据库提供了性能和可伸缩性。 ASM 实现了 SAME 方法,对 ASM 动态卷中的文件进行分条和镜像。 3. 字符设备和块设备 任何直接连接或通过网络连接的存储设备都可以分类为“字符设备”或“块设备”。 字符设备仅保存一个文件。通常,原始文件被放置在字符设备上。原始设备的位置与平 台有关,它们在文件系统目录中是看不到的。块设备通常是一种字符设备,但它保存着 一个完整的文件系统。如果使用 ASMLib 作为磁盘 API,那么 ASM 支持块设备。ASM 向操作系统呈现一个 ASM 动态卷设备文件,作为块设备。 4. 存储区域网络 存储区域网络(SAN)是一种联网存储设备,它通过唯一识别的主机总线适配器(HBA) 连接。存储被分为逻辑单元号(LUN),在操作系统看来,每个 LUN 在逻辑上表示为一个 磁盘。 在自动存储管理中,ASM 磁盘或者是 LUN,或者是磁盘分区。它们对 ASM 的逻辑 表现是一个原始设备。原始设备的名称和路径与操作系统有关。例如,在 Sun 操作系统 中,原始设备的名称为 cNtNdNsN: ● cN 是控制器编号。 ● tN 是目标 ID(SCSI ID)。 ● dN 是磁盘编号,它是 LUN 描述符。 ● sN 是切片编号或分区编号。 因此,当我们看到 Sun 中一个显示为 c0t0d2s3 的原始分区时,将会知道这是连接到 第一个控制器的第一个 SCSI 端口的第二个磁盘中的第三分区。HP UX 不会公开原始设 备中的切片编号。 HP 为原始分区使用 cNtNdN 格式。注意,并不存在切片标号的概念,因为 HP/UX 不支持切片(HP/UX Itanium 的确是支持切片的,但 HP 不支持对这一功能的使用)。必须 向 ASM 提供整个磁盘。 一种典型的 Linux 配置使用“直接磁盘”。RAW 功能是后来的想法。但是 Linux 设 置了最多 255 个原始设备的限制,而这一限制正是开发 Oracle 集群文件系统(OCFS)和使 第Ⅱ部分 安装、配置和存储 134 用 ASMLib 的原因之一。原始设备通常存储在/dev/raw 中,命名为 raw1至 raw255。ASMLib 将在本章后面讨论。 6.1.3 ASM 的组成模块 ASM 实现为一种特殊类型的 Oracle 实例,其具有相同的结构以及自己的系统全局 区域(SGA)和后台进程。ASM 中的额外后台进程负责管理存储和磁盘再均衡操作。下面 讨论的组件可以看作 ASM 的组成模块。 1. ASM 实例 ASM 实例是一种 Oracle 实例,它为磁盘组、ADVM(ASM 动态卷)和 ACFS(ASM 集 群文件系统)管理元数据。所有元数据修改都是由 ASM 实例完成的,以隔离故障。数据 库实例连接到一个 ASM 实例,以创建、删除、打开、关闭文件或者改变其大小,数据 库实例直接读写由 ASM 实例管理的磁盘。在一个集群中,一个节点只可能有一个 ASM 实例。对于大型 Oracle RAC 集群来说,这有时可能会成为一个缺点(如一个 8 节点 Oracle RAC,其中除了 8 个“用户”实例之外,还要为 ASM 维护 8 个独立实例)。ASM 实例故 障会终止本地节点中的连接数据库实例。 ASM实例就像一个Oracle数据库实例,它由系统全局区域和后台进程组成。与Oracle 数据库实例中的缓冲区缓存一样,ASM 实例拥有一种称为 ASM 缓存的特殊缓存,用于 在再均衡操作期间读写数据块。除了 ASM 缓存之外,ASM 实例的系统全局区域还有共 享池、大型池和空闲内存区域。Oracle 在内部使用自动内存管理,很少需要对一个 Oracle ASM 实例进行调优。 Oracle ASM 实例没有维护一个数据字典,因此只能通过系统权限 SYSDBA、SYSADM 和 SYSOPER 连接到 ASM 实例,这些权限是由操作系统组为 Oracle Grid Infrastructure 拥 有者实现的,该拥有者在 Oracle Grid Infrastructure 安装期间提供给 Oracle 通用安装 程序。 2. ASM 侦听器 ASM 侦听器类似于数据库侦听器,它是一个负责在数据库服务器进程和 ASM 实例 之间建立连接的进程。ASM 侦听器进程 tnslsnr 是从$GRID_HOME/bin 目录启动的,类 似于 Oracle Net Listener。ASM 侦听器还会监听在同一台计算机上运行的数据库服务,所 以不需要为数据库实例配置和运行独立的 Oracle Net Listener。默认情况下,Oracle 在 1521 端口上安装和配置 ASM 侦听器,在安装 Oracle Grid Infrastructure 时或者在以后,都可 以将它改到非默认端口。 3. 磁盘组 磁盘组由一些磁盘组成,这些磁盘被一起管理,作为单一存储单元。作为 ASM 的 主存储单元,这一 ASM 磁盘集合是自描述的,不需要相关联的介质名称。Oracle 提供 了各种 ASM 实用工具,如 ASMCA、SQL 语句和 ASMCMD,用来创建和管理磁盘组、 第 6 章 自动存储管理 135 其内容及元数据。磁盘组与 Oracle 管理文件集成在一起,支持 3 种冗余类型:外部冗余、 正常冗余和高冗余。图 6-3 给出了磁盘组的体系结构。 磁盘组 A 磁盘组 B ASM 图 6-3 ASM 中的磁盘组 一个磁盘组中的磁盘称为“ASM 磁盘”。在 ASM 中,一个磁盘是磁盘组的永久存 储单元。典型数据库集群中的磁盘组是远程共享磁盘子系统的组成部分,如 SAN 或网络 连接存储(NAS)。它可以通过正常的操作系统接口来访问,还必须可以供所有节点访问。 Oracle 必须能够读写所有磁盘,即使当集群中的一台或多台服务器发生故障时也是如此。 在 Windows 操作系统中,一个 ASM 磁盘总是一个分区。在所有其他平台中,一个 ASM 磁盘可以是一个逻辑单元号(LUN)的分区或者任意 NAS 设备。 注意: 在 Oracle 11g R2 及更新版本中,Oracle 不支持将原始设备或块设备作为 Oracle RAC 的共享存储。但在我们的示例中,由于这个数据库是从 Oracle 10g 迁移而来的,因此我们使用了原始设备。只有在从先前版本进行升 级时,才支持原始设备。 4. 分配单元 ASM 磁盘分为大量的单元或存储块,它们都很小,因此不是热单元。存储的分配单 元很大,足以进行高效的顺序访问。分配单元的默认大小为 1MB,对于大多数配置都足 够了。ASM 允许改变分配单元大小,但通常不需要这样做,除非是 ASM 托管了一个非 常大的数据库(VLDB)。我们不能改变一个已有磁盘组的分配单元的大小。 1MB 在 ASM 中的重要性 各种 I/O 客户端及其使用模型都在本节中讨论,从而在 Oracle 级别对 I/O 块大小和 并行化进行了深入探讨。日志写入程序在日志文件中写入了非常重要的恢复缓冲区。这 些写入操作在默认情况下是顺序、同步执行的。在大多数平台上,任何 I/O 请求的最大 第Ⅱ部分 安装、配置和存储 136 值被设定为 1MB。重做日志读取是顺序执行的,或是在恢复期间进行,或是由 LogMiner 或日志转储发出执行请求。在大多数平台上,每个 I/O 缓冲区的大小被限制为 1MB。在 任意时刻都有两个异步 I/O 挂起,以实现并行化。 DBWR 是在大型批处理中提交异步 I/O 的主服务器进程。大多数 I/O 请求的大小等 于数据库块大小。DBWR 还会尽可能将磁盘中的相邻缓冲区接合起来,使其达到 1MB 的最大值,并作为一个大型 I/O 提交它们。内核顺序文件 I/O(ksfq)为顺序磁盘/磁带访问 和缓冲区管理提供了支持。ksfq 在默认情况下分配了 4 个顺序缓冲区。缓冲区的大小由 dbfile_direct_io_count 参数决定,它在默认情况下被设置为 1MB。部分 ksfq 客户端包括: 数据文件、重做日志、RMAN、存档日志文件、Datapump、Oracle 数据卫士和文件传输包。 5. 卷分配单元 与 ASM 磁盘组的分配单元类似,卷分配单元是 ASM 在 ASM 动态卷分配空间中的 最小存储单元。ASM 在多个卷分配单元中分配空间。卷分配单元的大小与 ASM 磁盘组 的分配单元的大小有关。默认情况下,ASM 在 ASM 磁盘组内部创建一个 64MB 的卷分 配单元,这个磁盘组的默认分配单元大小为 1MB。 6. 故障组 故障组定义了一些 ASM 磁盘,它们可能共用一种潜在的故障装置。故障组是磁盘 组中的一个磁盘子集,这个子集内的磁盘依赖于一个必须容忍其故障的公共硬件资源。 只有对于正常冗余或高冗余配置,它才非常重要。相同数据的冗余副本被放置在不同的 故障组中。例如,一个共享同一 SCSI 控制器的条带集或 SCSI 磁盘集中的成员就是这样 一个示例。故障组用于判断应当使用哪些 ASM 磁盘来存储数据的冗余副本。默认情况 下,每个磁盘都是一个单独的故障组。图 6-4 显示了故障组的概念。 ASM 控制器 1 控制器 2 故障组 1 故障组 2 图 6-4 故障组 第 6 章 自动存储管理 137 例如,如果为一个文件指定了双重镜像,ASM 就会自动在分离的故障组中存储文件 盘区的冗余副本。故障组仅适用于正常冗余和高冗余磁盘组,而不适用于外部冗余磁盘 组。在创建或修改一个磁盘组时,可以定义这个磁盘组中的故障组。 7. ASM 文件 写到 ASM 磁盘中的文件称为 ASM 文件。ASM 文件名通常以一个加号(+)开头。尽 管这些名称是由 ASM 自动生成的,但我们可以为 ASM 文件指定一个有意义的、便于理 解的别名。每个 ASM 文件都完全包含在单个磁盘组中,平均分布在这个组中的所有 ASM 磁盘上。一个 ASM 文件就是一个数据盘区集,每个数据盘区是分配单元的一个集合。 由于在 ASM 文件变大时 Oracle 会自动增大数据盘区的大小,因此我们不能改变数据盘 区的大小。 盘区分配类似于在使用自动分配模式时的本地托管表空间盘区大小。在分配前 20 000 个数据盘区时,每个盘区有一个分配单元;接下来的 20 000 数据盘区的部分为 8 个分配 单元。当 ASM 文件大于 40 000 个数据盘区时,超过 40 000 的数据盘区大小部分为每个 盘区 64 个分配单元。从 Oracle 11g R2 开始,Oracle ASM 可以存储所有类型的 Oracle 数 据库文件。 8. 磁盘伙伴(Disk Partner) “磁盘伙伴”限制了两个独立磁盘故障丢失一个虚拟盘区的两个副本的可能性。每 个磁盘都有有限数量的伙伴,冗余副本被分配到伙伴上。磁盘伙伴是由 ASM 自动选择 的,伙伴被放置在不同的故障组中。伙伴磁盘的大小、容量和性能特点都应当相同。 9. ASM 动态卷管理器和 ASM 集群文件系统 Oracle ASM 动态卷管理器是 ASM 集群文件系统(ACFS)的基础。ACFS 是一种通用 集群文件系统,支持非 Oracle 应用程序。 ASM 磁盘组是创建 ACFS 时的一个基本要素,因为磁盘组包含了 ASM 动态卷设备 文件,ADVM(ASM 动态卷管理器)将这些文件呈现给操作系统。一旦这些文件被呈现给 操作系统,传统的 mkfs 实用工具就可用于在 ASM 动态卷设备文件上构建和挂载 ASM 集群文件系统,这些设备都是块设备。ADVM 支持 ext3、ACFS 和 NTFS 文件系统,用 户可以在 Windows 操作系统上使用 advmutil 实用工具来构建 ADVM 的文件系统。 作为 Oracle Grid Infrastructure 安 装 的 一 部 分 , ADVM 安 装 在 Oracle Grid Infrastructure 主目录中,Oracle 集群件在系统重新启动时自动加载 oracleadvm、oracleoks 和 oracleacfs 模块,它们对于提供 Oracle ASM 的 ADVM 和 ACFS 功能非常重要。如果 在单实例环境中与 Oracle Restart 一起使用 ACFS,那么在系统重新启动时不会自动重新 加载这些 ACFS 模块,必须以手动方式加载它们并挂载 ACFS 文件系统。 可以使用诸如 ASMCA、ASMCMD、Oracle 企业管理器和 SQL*Plus 之类的 ASM 工 具来创建 ASM 动态卷。ASMCA 是 11g R2 版本中的新工具,可用于所有 ASM 管理操作。 第Ⅱ部分 安装、配置和存储 138 关于 ACFS 的使用有一些限制;例如,ACFS 不能创建一个根目录或启动目录,因 为 ACFS 设备驱动程序是由 Oracle 集群件加载的。类似的,我们也不能使用 ACFS 存储 Oracle Grid Infrastructure 软件。ACFS 是一个通用文件系统,可以像在任何其他的第三 方文件系统中那样对 ACFS 执行 I/O 操作。操作系统工具和 API(如 ioctl)可以访问 ACFS; 因此,ACFS 支持任意标准文件访问协议,如 NAS。 Oracle ACFS 与集群同步服务集成在一起;在发生故障时,集群同步服务可以将故 障集群节点与活动集群隔离开,以避免造成任何数据损坏。Oracle 使用各种后台进程来 提供 ADVM,这些进程将在本章后面关于 ASM 后台进程的部分中进行解释。 10. ACFS 快照 另外一个与 ACFS 捆绑在一起的令人激动的功能是能够创建 ASM 动态卷的快照; 这样就可以让用户恢复被删除的文件,甚至恢复到过去的某一时间点。ACFS 快照是 ACFS 文件系统在不同时间点保存的副本,它是只读的,以联机方式创建。为了执行时 间点恢复乃至恢复已删除文件,需要知道当前数据和对文件所做的修改。在创建快照时, ASM 存储 ASM 动态卷中的元数据,如目录结构和文件名等。除了这些元数据之外,ASM 还存储文件中所有数据块的位置信息,既包括从来没有任何数据的数据块,也包括拥有 数据的实际数据块。 在创建快照之后,为了实现快照的一致性,ASM 通过记录文件修改来更新快照。 ASM 集群文件系统支持 POSIX 和 X/Open 文件系统 API,我们可以使用传统的 UNIX 命 令,如 cp、cpio、ar、access、dir、diff 等。ACFS 支持标准操作系统备份工具、Oracle 安全备份和第三方工具,如存储阵列快照技术。 注意: 从 Oracle Grid Infrastructure 11.2.0.2 开始,ACFS 重命名为 Oracle 集群文 件系统—— 云版本,Linux、Solaris、AIX 和 Windows 操作系统都对其提 供支持。Oracle 还为 Oracle 集群文件系统—— 云版本引入了一些新的功 能,如添加标签、复制和加密。 6.2 ASM 管理 管理 ASM 实例类似于管理一个数据库实例,但其任务要少一些。在管理一个 ASM 实例时,并不需要正在运行数据库实例。ASM 实例没有数据字典,因为元数据不是存储 在字典中的。ASM 元数据很少,存储在磁盘头中。SQL*Plus 可用于执行所有 ASM 管理 任务,其方式与我们处理正常 RDBMS 实例的方式相同。 第 6 章 自动存储管理 139 注意: 为了用 SQL*Plus 管理 ASM,必须在启动 SQL*Plus 之前将 ORACLE_SID 环境变量设置为 ASM SID。单实例数据库的默认 ASM SID 为+ASM, Oracle RAC 节点上 ASM 的默认 SID 为+ASMnode#。ASM 实例没有数据 字典,所以必须使用操作系统身份验证,并以 SYSASM 或 SYSOPER 身 份连接。当通过 Oracle Net Service 远程连接时,必须使用一个密码文件 进行身份验证。 6.2.1 ASM 实例管理 ASM 实例被设计和构建为数据库实例的逻辑扩展;它们共用相同的实例管理机制。 与数据库实例参数文件相似,ASM 实例也有一个名为注册表文件的参数文件,它存储在 一个 ASM 磁盘群组的/ASMPARAMETERFILE 目录中,在 Oracle Grid Infrastructure 安装期间,指定该磁盘组来存储 OCR 和表决磁盘。Oracle 为 ASM 参数文 件使用保留文件号 253。对于单实例数据库,ASM 的 SID 为+ASM,而对于 Oracle RAC 节点来说为+ASMnode#。对数据库初始化参数文件适用的文件名、默认位置和搜索顺序 等规则也适用于 ASM 初始化参数文件。但是,它们有一组独立的初始化参数,这些参 数是不能在数据库实例中设置的。 1. 管理 ASM 实例 ASM 实例的启动类似于 Oracle 数据库实例;与使用 SQL*Plus 连接到实例中一样, 必须将 ORACLE_SID 环境变量连接到 ASM SID。初始化参数文件(可能是一个服务器参 数,也称为 ASM 参数文件)必须包含参数 INSTANCE_TYPE = ASM,以告诉 Oracle 可执 行文件:一个ASM 实例正在启动,而不是启动一个数据库实例。除了由ASM_DISKGROUPS 初始化参数指定的磁盘组之外,ASM 将自动挂载用于存储表决磁盘、OCR 和 ASM 参数 文件的磁盘组。 STARTUP 命令用一组内存结构来启动实例,并挂载由初始化参数 ASM_DISKGROUPS 指定的磁盘组。如果 ASM_DISKGROUPS 为空,那么 ASM 实例启动,并警告没有挂载 磁盘组。然后可以用 ALTER DISKGROUP MOUNT(类似于 ALTER DATABASE MOUNT 命令)来挂载磁盘组。 表 6-2 描述了 ASM 实例的各种启动模式。 表 6-2 启动模式 启动模式 说明 NOMOUNT 启动 ASM 实例,不挂载任何磁盘组 MOUNT 启动 ASM 实例,并挂载磁盘组 OPEN 挂载磁盘组,并允许从数据库中进行连接。这是默认的启动模式 FORCE 在 SHUTDOWN ABORT 之后启动 MOUNT 第Ⅱ部分 安装、配置和存储 140 其他一些启动子句对于 ASM 实例的解释与对数据库实例的解释类似。例如, RESTRICT 防止数据库实例连接这个 ASM 实例。OPEN 对于 ASM 实例是无效的。 NOMOUNT 启动 ASM 实例,而不挂载任何磁盘组。 ASM 实例没有任何数据字典,连接到 ASM 实例的唯一可能方式就是通过操作系统 权限,如 SYSDBA、SYSASM 和 SYSOPER。在安装 Oracle Grid Infrastructure 期间指定 操作系统组 OSASM、OSDBA 和 OSOPER,这些操作系统组为 Oracle ASM 实例实现 SYSASM、SYSDBA 和 SYSOPER 权限。Oracle 允许通过密码身份验证连接到 ASM 实 例,它要求将 ASM 初始化参数 REMOTE_ LOGIN_PASSWORDFILE 设置为一个不等于 NONE 的值。 默认情况下,Oracle 通用安装程序将为 ASM 实例创建一个密码文件,新用户将被 自动添加到密码文件中;用户随后可以使用 Oracle Net Service 通过网络连接到 ASM 实 例。在通过 ASMCMD 连接时,Oracle 以 SYSDBA 身份连接到 ASM 实例。我们可以使 用 SQL*Plus 连接到实例,并运行简单的 SQL 命令,如“show sga”和“show parameter ”。下面是一个示例: $ sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on Fri Jan 14 11:09:38 2011 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options SQL> show sga Total System Global Area 283930624 bytes Fixed Size 2225792 bytes Variable Size 256539008 bytes ASM Cache 25165824 bytes 可以查询 V$PWFILE_USERS 动态视图,列出密码文件中的用户。另外一种列出密 码文件中用户的方法是在 ASMCMD 命令提示下使用 lspwusr 命令。ASMCMD 可用于手 动创建和管理密码文件。 ASM 实例关闭类似于数据库实例关闭。在关闭一个 ASM 实例之前,必须先关闭使 用这个 ASM 实例的数据库实例。当使用 NORMAL、IMMEDIATE 或 TRANSACTIONAL 关闭时,ASM 会等待任何正在进行的 SQL 操作完成。一旦完成所有 ASM SQL 操作, 就卸载所有磁盘组,并按照有序方式关闭 ASM 实例。如果任何数据库实例连接到 ASM 实例,SHUTDOWN 命令就将返回一条错误,仍然使 ASM 实例保持运行状态。 在使用 SHUTDOWN ABORT 时,ASM 实例被立即终止。它不会以有序方式卸载磁 盘组。下一次启动时需要利用ASM恢复(类似于RDBMS恢复)使磁盘组的状态一致。ASM 实例还有一些类似于撤销和重做的组件(具体细节将在本章后面讨论),它们支持崩溃恢 复和实例恢复。 如果有任何数据库实例连接到这个 ASM 实例,那么数据库实例会终止,因为它不 能访问由这个 ASM 实例管理的存储系统。 第 6 章 自动存储管理 141 在 Oracle 11g R2 中,ASM 实例可以通过 ASMCA、ASMCMD 和 SRVCTL 实用工具 来启动和停止。SRVCTL 使用 OCR 中注册的启动和关闭选项来启动或停止一个 ASM 实 例。下面的示例说明使用 SRVCTL 实用工具来启动和停止集群节点 racnode01 上的 ASM 实例+ASM1。 使用下面的命令启动 racnodel 集群节点上的 ASM 实例: $srvctl start asm -n racnode01 使用以下命令停止 racnode01 集群节点上的 ASM 实例: $srvctl stop asm -n racnode01 与 SQL*Plus 类似,也可以使用 ASMCMD 命令行实用工具来启动和停止 ASM 实例, 只是其启动/关闭选项的语法有所不同。下面给出使用 ASMCMD 启动和停止 ASM 实例 的示例。 使用以下命令以挂载状态启动 ASM 实例: $asmcmd ASMCMD> startup –mount 使用以下命令立即关闭 ASM 实例: $asmcmd ASMCMD> shutdown –immediate 注意: 如果在 ASM 磁盘组中存储 OCR 和表决磁盘,那么不能单独启动或关闭 Oracle RAC 数据库系统中的 ASM 实例。必须使用 crsctl 命令来启动或停 止 CRS,它也会启动/停止 ASM 实例。 尽管 ASM 没有数据字典,但它提供了一个存储在内存中的动态性能视图,可用于 从 ASM 实例中提取元数据信息。下面对这些重要的动态性能视图进行简短描述。当然, 它并不是一个完整的性能视图清单。因此,要了解 ASM 动态性能视图的完整列表,应 参阅 Oracle 技术网络网站上的 Oracle 文档。 ● V$ASM 这个视图显示了所连接 ASM 实例的实例信息。 ● V$ASM_DISKGROUP 这个视图列出了在 ASM 中创建的磁盘组,还有元数据 信息,如磁盘组的空闲空间、分配单元大小和状态。 ● V$ASM_FILE 这个视图列出了在 V$ASM_DISKGROUP 视图所列磁盘组中创 建的文件。 ● V$ASM_ALIAS 这个视图列出了在V$ASM_FILE 视图中所列ASM文件的用户 友好名称。这个视图对于识别 ASM 文件的确切名称非常有用,因为 V$ASM_FILE 视图仅列出了文件号。 第Ⅱ部分 安装、配置和存储 142 ● V$ASM_DISK_IOSTAT 这个视图列出了 V$ASM_DISKGROUP 视图中所列每 个磁盘的磁盘 I/O 性能统计信息。 ● V$ASM_ACFSVOLUMES 这个视图列出了 ASM 动态卷的元数据信息。 ● V$ASM_OPERATION 这个视图显示了当前操作,例如在 V$ASM_DISKGROUP 视图中所列磁盘组上发生的任何再均衡操作。这个视图对于监控 ASM 中的再均 衡操作非常有用。 2. ASM 后台进程 由于 ASM 是使用 RDBMS 框架构建的,因此这些软件的体系结构类似于 Oracle RDBMS 进程的结构。ASM 实例是使用各种后台进程构建的,这些进程中专属于 ASM 实例的一部分用来管理 ASM 中的磁盘组、ASM 动态卷管理器和 ASM 集群文件系统。 下面的列表显示 ASM 实例的后台进程,它们拥有 ASM 的 SID: grid 23405 1 0 2010 ? 00:00:25 asm_o000_+ASM1 grid 25753 1 0 21:37 ? 00:00:00 asm_pz99_+ASM1 grid 27524 1 0 2010 ? 00:00:53 asm_pmon_+ASM1 grid 27526 1 0 2010 ? 00:00:01 asm_psp0_+ASM1 grid 27530 1 0 2010 ? 00:00:00 asm_vktm_+ASM1 grid 27534 1 0 2010 ? 00:00:00 asm_gen0_+ASM1 grid 27536 1 0 2010 ? 00:00:02 asm_diag_+ASM1 grid 27538 1 0 2010 ? 00:01:06 asm_ping_+ASM1 grid 27540 1 0 2010 ? 00:21:59 asm_dia0_+ASM1 grid 27542 1 0 2010 ? 00:08:59 asm_lmon_+ASM1 grid 27544 1 0 2010 ? 00:16:53 asm_lmd0_+ASM1 grid 27546 1 1 2010 ? 11:14:44 asm_lms0_+ASM1 grid 27550 1 0 2010 ? 00:00:00 asm_lmhb_+ASM1 grid 27552 1 0 2010 ? 00:00:00 asm_mman_+ASM1 grid 27554 1 0 2010 ? 00:00:02 asm_dbw0_+ASM1 grid 27556 1 0 2010 ? 00:00:00 asm_lgwr_+ASM1 grid 27558 1 0 2010 ? 00:00:04 asm_ckpt_+ASM1 grid 27560 1 0 2010 ? 00:00:00 asm_smon_+ASM1 grid 27562 1 0 2010 ? 00:05:55 asm_rbal_+ASM1 grid 27564 1 0 2010 ? 00:00:00 asm_gmon_+ASM1 grid 27566 1 0 2010 ? 00:00:00 asm_mmon_+ASM1 grid 27569 1 0 2010 ? 00:00:00 asm_mmnl_+ASM1 grid 27576 1 0 2010 ? 00:00:01 asm_lck0_+ASM1 grid 27680 1 0 2010 ? 00:01:11 asm_asmb_+ASM1 grid 30118 1 0 2010 ? 00:00:39 asm_o001_+ASM1 仔细看一下这些后台进程,将会发现 RDBMS 实例管理中使用的后台进程类似于 smon 和 pmon。但是,还有其他一些进程(如 rbal 和 gmon)都是 ASM 实例特有的。现在 让我们仔细研究一下 ASM 特有的这些进程。在 ASM 实例中创建 ASM 动态卷时,将会 看到更多的后台进程,如 VDBG、VBGn 和 VMB。这里将解释一些重要的 ASM 后台 进程。 第 6 章 自动存储管理 143 ● RBAL 这是一个再均衡后台进程。它负责再均衡操作,还协调 ASM 磁盘恢复 进程。 ● GMON 这是“组监控器”后台进程。它在管理磁盘组时将磁盘组标记为“脱 机”,甚至会删除这个磁盘组。 ● ARBn 尽管 RBAL 负责协调磁盘组的再均衡,但实际上是由 ARBn 来执行再均 衡协调的。 ● VMB 这是一个“卷成员资格”后台进程,它与 ASM 实例一同负责集群成员资 格。在创建 ASM 动态卷时,ASM 实例会启动这个后台进程。 ● VDBG 这是“卷驱动程序”后台进程。它与动态卷驱动程序一同提供卷盘区的 锁定和解锁。这是一个非常重要的进程,如果被意外终止,那么它会关闭 ASM 实例。 ● VBGn 这是“卷后台”进程。ASM 实例中的 VBG 与操作系统卷驱动程序通信。 它负责 ASM 与操作系统之间的消息发送。 ● XDMG 这是一个 Exadata 自动管理器。XDMG 监控所有配置的 Exadate 单元, 以了解状态变化,例如更换了一个坏磁盘等。它的主要任务是监控不可访问的 磁盘和单元,当它们再次可供访问时,启动 ASM ONLINE 操作。 3. 数据库实例中的 ASM 进程 每个使用 ASM 的数据库实例有两个后台进程:ASMB 和 RBAL。ASMB 后台进程 在数据库实例中运行,连接到 ASM 实例中的前台进程。通过这一连接,定期交互消息, 以更新统计信息,并核实两个实例都是健康的。通过 ASMB 将所有描述开放文件的盘区 映射图发送给数据库实例。如果重新定位了一个开放文件的盘区,或者改变了一个磁盘 的状态,那么从受影响数据库实例中的 ASMB 进程接收消息。 在需要 ASM 干预的操作期间,例如由数据库前台进程创建一个文件,这个数据库 前台进程会直接连接 ASM 实例,以执行此操作。每个数据库实例维护一个连接池(其中 包含指向这个 ASM 实例的连接),以避免在每次执行文件操作时重新连接所带来的开销。 一个由从属进程 O001~O010 组成的组建立到 ASM 实例的连接,这些从属进程用作 数据库进程的连接池。数据库进程可以使用从属进程向 ASM 实例发送消息。例如,打 开一个文件会通过一个从属进程向 ASM 实例发送打开请求。但是,从属进程不会用于 长时间运行的操作,例如用于创建文件的操作。利用这些从属连接,不再需要因为短期 请求而登录 ASM 实例所造成的开销。这些从属进程会在没有使用时自动关闭。 4. 数据库和 ASM 实例之间的通信 ASM 类似于 Oracle 数据库的一个卷管理器,它为 Oracle 数据库文件提供了文件系 统。当我们创建一个新的表空间或者只是向一个现有表空间中添加一个新的数据文件时, Oracle 数据库实例请求 ASM 实例创建一个可供 Oracle 数据库实例使用的新 ASM 文件。 在接收到创建新文件的请求之后,ASM 实例向“持续操作目录”中添加一个条目,并在 ASM 磁盘组中为这个新文件分配空间。ASM 创建盘区,并与数据库实例共享盘区映射 第Ⅱ部分 安装、配置和存储 144 图;事实上,数据库实例中的 ASMB 后台进程接收这一盘区映射图进程。 一旦数据库实例成功打开了这个实例,ASM 实例就提交新文件创建操作,并从“持 续操作目录”中删除该条目,因为新文件信息现在已经存储在磁盘头中。这里有一个需 要理解的重要概念:大多数人看到数据库 I/O 被重新导向到 ASM 实例,ASM 实例代表 数据库实例来执行 I/O;但是,这是错误的。Oracle 数据库实例直接向 ASM 文件执行 I/O, 但当 ASM 实例向数据库实例确认已经提交了新文件时,它必须重新打开一次新创建的 ASM 文件。ASM 实例使用两个数据结构来管理它所包含的元数据事务,这两种结构称 为“活动改变目录”(ACD)和“持续操作目录”(COD)。 活动改变目录(ACD) 活动改变目录(ACD)是一种日志记录机制,它提供了类似于 Oracle 数据库中重做日 志的功能。活动改变目录记录了 ASM 实例中的所有元数据改动,当由于操作故障或者 实例崩溃而发生意外故障,从而在决定前滚时,会用到这些记录。ACD 作为一个文件(大 小为 42MB)存储在一个 ASM 磁盘中。ASM 元数据是三重镜像的(高冗余),在添加新实 例时,可以在磁盘组内增长。ASM 的事务原子性是由 ACD 保证的。 持续操作目录(COD) 持续操作目录(COD)是 ASM 实例中的一种内存结构,它维持活动 ASM 操作及改变 的状态信息,如再均衡、添加新磁盘或删除磁盘等。另外,来自客户端(如 RDBMS 实例) 的文件创建请求会使用 COD 来保护完整性。COD 记录会根据 ASM 操作的成功或失败 来提交或回滚。COD 类似于 Oracle 数据库的回滚段(或撤销表空间)。 5. 初始化参数 就像数据库实例一样,ASM 实例需要有强制参数和可选参数。可以在数据库实例和 ASM 实例中设置初始化参数,但有些参数仅对 ASM 实例有效。以下初始化参数可以在 ASM 实例中设置。以“ASM_”开头的参数不能用于数据库实例。强烈建议将这些参数 存储在 ASM 参数文件中(也称为 SPFILE 或注册表文件)。 ● INSTANCE_TYPE 这个参数向 Oracle 可执行文件指明实例类型。默认情况下, Oracle 可执行文件假定实例类型是一个数据库实例。这是 ASM 实例中的唯一强 制参数。所有其他参数在没有指明时都有适当的默认参数。 ● ASM_POWER_LIMIT 设置磁盘再均衡的功能限制。这个参数值默认为 1,有 效值为 0~11。这个参数是动态的。有关再均衡的详细信息将在本章后面提供。 ● ASM_DISKSTRING 一个用逗号分隔的字符串列表,它限制了 ASM 发现的磁 盘集。这个参数接受通配符。只有那些与字符串之一匹配的磁盘才能被发现。 字符串格式取决于所使用的 ASM 库和操作系统。ASM 的标准系统库支持 glob 模式匹配。如果正在使用 ASMLib 来创建 ASM 磁盘,那么默认路径为 ORCL:*。 第 6 章 自动存储管理 145 ● CLUSTER_DATABASE 如果集群节点上的 ASM 实例希望访问同一 ASM 磁 盘,那么这个参数必须被设置为 TRUE。这个参数实际地启用集群存储。必须确 保集群中所有 ASM 实例上的这个参数都设置为相同值。 ● ASM_DISKGROUPS 使用 ALTER DISKGROUP ALL MOUNT 语句时或者由 ASM 在启动时挂载的磁盘组名称列表。如果没有指定这个参数,那么除存储 SPFILE、OCR 和表决磁盘的 ASM 磁盘组之外,不会挂载其他磁盘组。这个参 数是动态的,在使用服务器参数文件(SPFILE)时,不需要改变这个值。 ● ASM_PREFERRED_READ_FAILURE_GROUPS 这个参数是在 Oracle 11g 中引入的,允许扩展集群配置中的 ASM 实例从本地磁盘中读取数据,而不需要 总是从主副本中读取(在扩展集群配置中,每个站点都有自己的专用存储)。在 Oracle 11g 之前,无论本地磁盘上是否有可供使用的相同盘区,ASM 总是从主 副本中读取数据。这是 Oracle 11g 中非常受欢迎的改进,它对于提高 Oracle 扩 展集群的性能非常有用。在为扩展集群配置 ASM 时,要非常仔细地选择故障组 的数量,因为这一设置会对 ASM 读取性能产生直接影响。 ● LARGE_POOL_SIZE ASM 实例使用的内部包是从大型池中执行的,因此应当 将初始化参数 LARGE_POOL_SIZE 设置为一个大于 8MB 的值。至于其他缓冲 区参数,可以使用其默认值。 6. 手动创建磁盘组 Oracle提供了不同的ASM工具(如ASMCA、ASMCMD、Oracle网格控制和SQL*Plus) 来创建和管理 ASM 实例内部的磁盘组。在创建 ASM 磁盘组之前,了解对 ASM 磁盘的 性能和可用性需求(如 ASM 磁盘组的冗余级别)非常重要。如果底层存储不受 RAID 配置 的保护,就应当为 ASM 磁盘组选择正确的冗余,从而使用 ASM 镜像。ASMCA 是一个 GUI 工具,其用途是不言自明的,不需要太多的专业知识,但要改变 ASM 磁盘组的不 同属性,就应当单击 Show Advance Options 按钮。ASMCM 使用 XML 样式的标记来指 定 ASM 磁盘组名称、磁盘位置和属性。这些 XML 标记可被指定为内联 XML,也可以 创建一个可以用 ASMCMD 中的 mkdg 命令使用的 XML 文件。 在 SQL*Plus 中,使用 CREATE DISKGROUP 命令在 ASM 实例中创建磁盘组。在创 建磁盘组之前,ASM 实例将核查在一个磁盘组中添加的磁盘/RAW 分区是可寻址的。如 果磁盘/RAW 分区是可寻址的,而且所有其他组都没有使用它,那么 ASM 在要使用的磁 盘或 RAW 分区的第一个数据块中写入特定信息,以创建该磁盘组。从 Oracle 11g 开始, 可以为 ASM 磁盘组指定不同属性,这些属性会对 ASM 磁盘组的性能和可用性产生影响。 在创建 ASM 磁盘组时指定的属性可以从 V$ASM_ATTRIBUTE 动态性能视图中查看。下 面是通常会用到的重要 ASM 磁盘组属性列表: ● AU_SIZE 用于指定所创建 ASM 磁盘组的分配单元大小。不能改变一个已有磁 盘组的分配单元,所以要确保在创建 ASM 磁盘组时指定了正确的分配单元。默 认情况下,Oracle 为分配单元使用的大小为 1MB。 第Ⅱ部分 安装、配置和存储 146 ● DISK_REPAIR_TIME 这个属性与磁盘组的性能和可用性有关。这个属性指定 了一个时间量,ASM 在等待这一时间长度之后将删除一个脱机 ASM 磁盘并再 均衡磁盘组。 ● COMPATIBLE.ADVM 如果将使用这个磁盘组创建 ASM 动态卷,而且只在 Oracle Grid Infrastructure 11g R2 及以下版本中使用这个磁盘组,那么需要这个属 性。 ● CELL.SMART_SCAN_CAPABLE 这个属性仅对于 Oracle Exadata 网格磁盘有 效,它启用基于智能扫描的卸载处理。 在执行 CREATE DISKGROUP 命令时,ASM 自动挂载磁盘组,磁盘组名称也被添 加到 SPFILE 中的 ASM_DISKGROUPS 参数,所以在以后重新启动 ASM 实例时,只会 挂载这个新创建的磁盘组。 如果希望 ASM 对文件进行镜像,那么在创建 ASM 磁盘组时定义冗余级别。Oracle 提供了两种冗余级别:正常冗余和高冗余。在正常冗余情况下,每个盘区有一个镜像整 本;在高冗余情况下,每个盘区在不同磁盘组中有两个镜像副本。 一个磁盘组中的磁盘应当大小相当、性能特征类似。为不同类型的磁盘创建不同磁 盘组总是明智的做法。磁盘组中的磁盘应当大小相同,以避免在故障组中浪费磁盘空间。 用于创建磁盘组的所有磁盘都必须具有一致的 ASM_DISKSTRING 参数,以避免出现磁 盘发现问题。 7. 创建磁盘组 在下面的示例中,我们创建一个名为 DGA 的磁盘组,它有两个故障组,名为 FLGRP1 和 FLGRP2。此处使用 4 个原始分区,即/dev/raw/raw3、/dev/raw/raw4、/dev/raw/raw5 和 /dev/raw/raw6: SQL> CREATE DISKGROUP DGA NORMAL REDUNDANCY 2 FAILGROUP FLGRP1 DISK 3 '/dev/raw/raw3', 4 '/dev/raw/raw4', 5 FAILGROUP FLGRP2 DISK 6 '/dev/raw/raw5', 7 '/dev/raw/raw6', 在创建磁盘组之后,可能需要根据业务需求对它进行修改。Oracle 允许在创建磁盘 组之后对其执行创建、删除/撤销删除和挂载/卸载操作,并且允许调整磁盘组的大小。 8. 向磁盘组添加磁盘 只要向磁盘组中添加了磁盘,Oracle 就会在内部再均衡 I/O 负载。下面的示例说明 如何向现有磁盘组中添加磁盘。Oracle 使用 ADD 子句向现有磁盘组中添加磁盘或故障 组。在这个示例中,原始分区/dev/raw/raw7 被添加到现有组 DGA 中: 第 6 章 自动存储管理 147 ALTER DISKGROUP DGA ADD DISK '/dev/raw/raw7' NAME disk5; 在这条语句中没有定义故障组,所以不会将这个磁盘指定给它自己的故障组。 9. 删除磁盘组中的磁盘 Oracle 随 CREATE DISK GROUP 命令一起提供了 DROP DISK 子句,用以删除磁盘 组中的一个磁盘。在这个操作期间,Oracle 会在内部再均衡这些文件。如果磁盘组中的 其他磁盘中没有足够空间,Oracle 就会使 DROP 操作失败。如果正在一个磁盘组中添加 和删除磁盘,那么建议您采取先添加后删除的顺序,而且两个操作应当在单独一条 ALTER DISKGROUP 语言中执行,因为这样可以减少花费在再均衡上的时间。Oracle 还 提供了一些强制选项,即使 ASM 不能读写一个磁盘组中的磁盘,也能对其进行删除。 这个选项不能针对采用外部冗余的磁盘组使用。 在这个示例中,我们从 DGA 磁盘组中删除/dev/raw/raw7: ALTER DISKGROUP DGA DROP DISK '/dev/raw/raw7'; 10. 调整磁盘大小 Oracle 提供了 RESIZE 子句,该子句可结合 ALTER DISKGROUP 命令使用,以调整 磁盘大小,调整任意特定磁盘的大小,或者调整一个特定故障组中的磁盘大小。 调整磁盘大小对于释放磁盘空间非常有用。例如,如果在创建磁盘组时为磁盘定义 的 SIZE 小于磁盘大小,而后来希望完全利用这个磁盘的空间,就可以使用这个选项, 但不提供任何 SIZE,以使 Oracle 采用操作系统返回的 SIZE: ALTER DISKGROUP DGA RESIZE DISK '/dev/raw/raw6' SIZE 500M; 11. 管理 ACFS 诸如 ASMCA、ASMCMD、OEM 和 SQL*Plus 之类的 ASM 工具可用于创建和管理 ACFS。创建 ACFS 就像是用任意一个传统卷管理器来创建一个文件系统。在传统的卷管 理器中,首先创建一个卷组,然后创建卷。最后,创建文件系统,然后加载文件系统。 类似于 ASM 磁盘组中的一个分配单元,“卷分配单元”是一个 ASM 动态卷中可以 分配的最小存储单元。ASM 在每个卷分配单元中分配条带,其中每个条带都等于卷盘区 大小,这个卷盘区大小与底层 ASM 磁盘组的分配单元大小直接相关。默认情况下,对 于一个分配单元大小为 1MB 的磁盘组,一个卷盘区的大小为 64MB。我们在创建 ASM 动态卷时指定条带(也称为条带列)的数量和每个条带的宽度,因为 Oracle 在内部使用 SAME 方法对数据进行分条和镜像。Oracle 随后将存储在 ACFS 内部的文件分散到区块 中,每个卷盘区上的条带宽度大小为 128KB(默认的条带宽度)。 例如,如果创建一个400MB 的 ASM卷,并以默认设置在其内部存储一个大小为 1MB 的文件,那么 Oracle 将会创建 64MB 的卷盘区大小,每个卷分配单元将为 256MB(条带 第Ⅱ部分 安装、配置和存储 148 数量乘以卷盘区大小)。因为 Oracle 在多个卷分配单元中分配空间,所以尽管我们请求了 400MB 的空间,但它将为 ASM 动态卷分配 512MB。ASM 动态卷可在以后进行扩展。 ASM 将这个文件分布在 8 个 128KB 的区块中,并将它们存储在卷盘区中。ASM 以相同 方式对 ASM 磁盘组中可用磁盘上的卷盘区进行分条;因此,它提供了非常高效的 I/O 操 作。我们可以使用 ASM 实例的 V$ASM_ ACFSVOLUMES 和 V$ASM_FILESYSTEM 动 态性能视图来查看有关所连接 ASM 实例的 ACFS 文件系统信息。 12. 设置 ACFS 按照下面给出的步骤创建 ASM 集群文件系统: (1) 创建一个 ASM 磁盘组,将属性 COMPATIBLE.ADVM 设置为最小值 11.2.0.0.0, 因为设置这一属性会告诉 ASM,这个磁盘组可以存储 ASM 动态卷。如果还没有设置这 个属性,就不能在这个 ASM 磁盘组中创建动态卷。这个属性的最小值为 11.2.0.0.0,这 是因为 ACFS 是在 Oracle 11g R2 中引入的,不能在先前版本的 Oracle 集群件中使用。我 们可以使用 ASMCA、ASMCMD、OEM 或 SQL*Plus 来创建 ASM 磁盘组。如果正在使 用 ASMCA,那么可以通过单击 Show Advance Options 按钮来设置磁盘组属性。其他 ASM 工具允许在命令行中指定这一参数。 (2) 在创建 ASM 磁盘组之后,需要在上一步骤创建的 ASM 磁盘组中创建 ASM 动 态卷。 (3) 创建所需要的 OS 目录结构,以挂载新创建的 ASM 动态卷。 (4) 创建这个目录之后,需要使用操作系统命令 mkfs 来创建 ACFS 文件系统。确保 使用以下语法在 ASM 动态卷上创建 ACFS 类型的文件系统: mkfs -t acfs /dev/asm/ (5) 现在使用挂载操作系统命令挂载新创建的文件系统。确保使用 ACFS 系统类型 来挂载此文件系统。 13. 创建 ACFS 快照 可以使用 ASM 工具来创建和管理 ACFS 快照。ASMCMD 命令 acfsutil 可用于通过 命令行界面来创建和管理快照。下面是一个创建 ACFS 快照的示例: acfsutil snap create acfs_snap_01 /app/oracle/myfirstacfs 快照创建过程将创建一个隐藏目录(.ACFS),并在这个隐藏目录中创建一个目录结构 snaps/。在我们的示例中,ASM 将创建以下目录结构: .ACFS/snaps/acfs_snap_01 尽管 ACFS 拥有这些令人兴奋的功能,但它也有一些局限性,在使用 ACFS 之前必 须要了解它们。尽管可以在 ASM 动态卷上创建其他文件系统,但 Oracle 仅支持 ACFS 第 6 章 自动存储管理 149 作为 ASM 动态卷上的集群文件系统。对 ASM 动态卷的分区是不受支持的,所以不能使 用 fdisk 命令对 ASM 动态卷设备进行分区。除此之外,也不应当在 ASM 动态卷上使用 ASMLib,因为 Oracle 不支持这一配置。可以使用多路径设备来创建一个 ASM 磁盘组, 但禁止对 ASM 动态卷使用多路径。 14. ASM 快速镜像再同步 在 Oracle 11g 之前,只要 ASM 不能向 ASM 磁盘中写入数据盘区,它就使这个 ASM 磁盘脱机。除此之外,还禁止再次对这个磁盘进行读取,ASM 将根据其他 ASM 磁盘上 存储的镜像副本重新创建这些盘区。在将这个磁盘再次添加到组中时,ASM 将再次执行 这一再均衡操作,以重新构建所有数据盘区。这一再均衡操作非常耗时,对 ASM 磁盘 组的响应时间也有影响。 而 Oracle 11g 则不会删除脱机 ASM 磁盘,它会等待一段时间,对所修改的数据盘区 进行跟踪,等待时间由相关磁盘组的 ASM_DISK_REPAIR 属性指定。如果在这一时间内 修复了故障,那么 ASM 将只重建修改后的数据盘区,而不会对整个磁盘组进行全面再 均衡,从而使再均衡操作在整体上更快速、更高效。 15. ASM 再均衡 在存储配置和再配置期间,ASM 不需要任何停机时间,也就是说,在改变存储配置 时不需要使数据库脱机。在磁盘组中添加或删除磁盘之后,ASM 会自动在磁盘组的所有 磁盘之间均匀地再分布文件数据。这个操作称为“磁盘再均衡”,它对数据库是透明的。 再均衡操作在磁盘组的所有可用磁盘之间均匀地分布每个文件的内容。这个操作是 由磁盘的空间使用情况驱动的,而不是根据这些磁盘的 I/O 统计信息决定的。在需要时 会自动调用它,操作期间不需要人为干预。也可以选择手动运行这个操作,或者改变一 个正在运行的再均衡操作。 增加负责此操作的后台从属进程数量可以加快再均衡操作的速度。后台进程 ARBx 负责存储再配置期间的磁盘再均衡。为了动态增加从属进程的数量,可以使用 init.ora 参 数 ASM_POWER_LIMIT。当在 Oracle RAC 中运行时,建议仅使用一个节点执行再均衡。 关闭任何一个未使用的 ASM 实例都可以做到这一点。图 6-5 显示了再均衡功能。 如果没有在 ALTER DISKGROUP 命令中指定 POWER 子句,或者在添加或删除磁 盘时隐式调用了再均衡操作,那么再均衡操作产生的后台进程数量默认为 ASM_POWER_ LIMIT 初始化参数的值。这一参数可以动态调整。这一上限越高,再均衡操作的完成速 度越快。这一取值越低,会使再均衡操作花费的时间越长,但所占用的进程和 I/O 资源 也越少。这样就把这些资源留给了其他应用程序,如数据库。默认值 1 将对其他应用程 序的影响降到了最低。适当的取值应当根据硬件配置以及性能和可用性要求来决定。 第Ⅱ部分 安装、配置和存储 150 磁盘组 ASM ASM 磁盘组: 添加的新磁盘 磁盘组: 再均衡之后 图 6-5 ASM 再均衡 如果因为手动或自动删除了一个磁盘而正在进行再均衡,那么增加再均衡的后台进 程数量可以缩短在其他磁盘上为被删除磁盘上的数据重建冗余副本的时间。 V$ASM_OPERATION 视图提供了一些信息,可用于调整 ASM_POWER_LIMIT 和 再均衡操作产生的后台进程数量。V$ASM_OPERATION 视图还在 EST_MINUTES 列中 给出了完成再均衡操作所需要的估计时间值。通过观察时间估计值的变化,可以看出改 变再均衡后台进程数量的效果。 16. 手动再均衡磁盘组 可以使用 ALTER DISKGROUP 语句的 REBALANCE 子句对一个磁盘组内的文件进 行手动再均衡。通常不需要这一操作,因为 ASM 会在磁盘组的构成发生变化时自动再 均衡磁盘组。但如果希望控制再均衡速度,那么也可能要进行手动再均衡操作。 ALTER DISKGROUP...REBALANCE 语句的 POWER 子句指定了并行化程度,因此 也就指定了再均衡操作的速度。其设定值可以是 0~11。值 0 将会暂停再均衡操作,直到 再次隐式或显式地调用该语句为止。默认的再均衡后台进程数是由 ASM_POWER_LIMIT 初始化参数设置的。 注意: 在使用 REBALANCE POWER 0 创建磁盘组时,ASM 会自动禁用再均衡 功能。如果向磁盘组中添加更多磁盘,那么 ASM 将不会在新添加的磁盘 中分布数据。同样,在从这个磁盘组中移除磁盘时(DROP DISK),磁盘 组保持 DROPPING 状态,直到将 REBALANCE POWER 改为大于 0 为止。 在输入 REBALANCE 语句时提供新的级别,这会改变当前正在进行的再均衡操作的 后台进程数量级别。ALTER DISKGROUP...REBALANCE 命令在默认情况下会立即返回, 以便我们能够在后台异步进行再均衡操作时发出其他命令。我们可以通过查询 V$ASM_OPERATION 视图来了解再均衡操作的状态。从 Oracle 11g 开始,可以在 ASMCMD 命令提示下使用 lsop 命令,列出 ASM 操作。下面是一个使用 lsop 命令的示例: 第 6 章 自动存储管理 151 vASMCMD> lsop Group_Name Dsk_Num State Power Data RBAL REAP 2 如果我们希望ALTER DISKGROUP...REBALANCE 命令等到再均衡操作完成之后再 返回,那么可以向 REBALANCE 子句中添加 WAIT 关键字。这一点在脚本中特别有用。 这个命令还接受 NOWAIT 关键字,它将调用异步执行再均衡操作的默认行为。在大多数 平台中,可以通过按下 Ctrl+C 组合键中断运行在等待模式的再均衡操作。这样会使命令 立即返回,并给出消息:ORA-01013: user requested cancel of current operation,并异步继 续执行再均衡操作。 再均衡操作的其他规则包括以下: ● ALTER DISKGROUP...REBALANCE 语句使用的资源仅限于启动该语句的节点 上的资源。 ● 在给定实例上,ASM 只能同时执行一个再均衡过程。 ● 在执行再均衡的 ASM 实例发生故障时,再均衡会继续执行。 ● REBALANCE 子句(及其相关的 POWER 和 WAIT/NOWAIT 关键字)也可在添加、 删除磁盘或调整磁盘大小的 ALTER DISKGROUP 命令中使用。 下面的示例对磁盘组 dgroup2 进行手动再均衡。在再均衡操作完成之前,这个命令 不会返回: ALTER DISKGROUP dgroup2 REBALANCE POWER 5 WAIT; V$ASM_DISK_STAT 和 V$ASM_DISKGROUP_STAT 可用于查询性能统计信息。下 面的查询可用于获取磁盘组级别的性能统计信息。这些视图(再加上 V$filestat)可以提供 有关磁盘组及数据文件性能的更多信息。 SELECT PATH, READS, WRITES, READ_TIME, WRITE_TIME, READ_TIME/DECODE(READS,0,1,READS)"AVGRDTIME", WRITE_TIME/DECODE(WRITES,0,1,WRITES) "AVGWRTIME" FROM V$ASM_DISK_STAT; PATH READS WRITES READ_TIME WRITE_TIME AVGRDTIME AVGWRTIME ------------ -------- -------- ---------- ------------ ---------- ---------- ORCL:DISK1 50477 67683 20.86 724.856718 .000413258 .010709583 ORCL:DISK2 418640 174842 100.259 802.975526 .000239487 .004592578 17. ASM 中的备份和恢复 由于 ASM 实例本身不包含任何文件,而只是管理 ASM 磁盘的元数据,因此 ASM 实例没有进行备份。ASM 元数据是三重镜像的,它应当对元数据提供保护,避免受到典 型故障的损害。如果发生的故障足以导致元数据的丢失,那么必须重新创建磁盘组。ASM 磁盘上的数据使用 RMAN 备份。在发生故障时,一旦创建了磁盘组,就可以使用 RMAN 来恢复数据(如数据库文件)。 第Ⅱ部分 安装、配置和存储 152 每个磁盘组都是自我描述的,包含它自己的文件目录、磁盘目录和其他一些数据, 如元数据日志记录信息。ASM 会使用镜像技术自动保护其元数据,甚至会用外部冗余磁 盘组提供保护。ASM 实例在其 SGA 中缓存信息。ASM 元数据描述了磁盘组及文件,由 于它保存在磁盘组内部,因此也可以提供自我描述。元数据保存在块中,每个元数据块 的大小为 4KB,并采用三重镜像。 当多个 ASM 实例挂载相同磁盘组时,如果一个 ASM 实例发生故障,另一个 ASM 实例就会自动恢复由故障实例导致的短暂 ASM 元数据更改。这种情景称为“ASM 实例 恢复”,全局缓存服务会自动地即时检测这一情景。 当多个 ASM 实例挂载不同的磁盘组或者在单一 ASM 实例配置中时,如果在打开 ASM 元数据进行更新时一个 ASM 实例发生故障,那么当前未被任何其他 ASM 实例挂 载的磁盘组在被再次挂载之前不会进行恢复。当一个 ASM 实例挂载了一个发生故障的 磁盘组时,它会读取磁盘组日志,并恢复所有短暂更改。这种情景称为“ASM 崩溃恢复”。 因此,在使用 ASM 集群实例时,建议让所有 ASM 实例总是挂载相同的磁盘集。但 是也有一种可能,在本地连接的磁盘上有一个磁盘组,这些本地连接的磁盘只能让集群 中的一个节点看到,因此就仅在这些磁盘连接的节点上挂载这个磁盘组。 ASM 支持标准操作系统备份工具:Oracle Secure 备份,也支持第三方备份解决方案, 例如存储阵列快照技术,该技术用来备份 ACFS 文件系统。 6.3 ASM 工具 新的 ASM 工具,如 ASM 命令行界面和 ASM 文件传输实用工具,模拟了 ASM 文 件系统中的 UNIX 环境。尽管 ASMCMD 在内部使用 SQL*Plus 接口来查询 ASM 接口, 但因为它提供了一种 UNIX 外壳界面的外观和感觉,所以为系统管理员和存储管理员提 供了很大的帮助。 6.3.1 ASMCA:ASM 配置助手 ASM 配置助手是在 Oracle 11g 中引入的一种 GUI 工具,可用于安装和配置 ASM 实 例、磁盘组、卷和 ACFS。与 DBCA 相似,ASMCA 也可以以静默模式使用。Oracle 通 用安装程序在内部以静默模式使用 ASMCA,以配置 ASM 磁盘组,用以存储 OCR 和表 决文件。ASMCA 能够管理完整的 ASM 实例和相关的 ASM 对象。从 Oracle 11g 开始, DBCA 不再允许创建和配置 ASM 磁盘组,因为 ASMCA 是一个全面的 ASM 管理工具, 所以 Oracle 的未来方向是推动 ASMCA 的使用。 6.3.2 ASMCMD:ASM 命令行实用工具 Oracle引入ASMCMD 作为一种通过命令行界面来访问 ASM文件及相关信息的新选 项,它使 ASM 管理变得更轻松,DBA 使用起来更方便。这一新选项可以在 Oracle 10g 及更高版本中使用,但只有 Oracle 10g R2 及更高版本默认支持这一选项。Oracle 对这一 工具进行了增强,提供了更多的管理功能,使用户现在能够通过命令行界面来管理 ASM 第 6 章 自动存储管理 153 实例和 ASM 对象,如磁盘组、卷和 ASM 集群文件系统。 ASMCMD 为 DBA 提供了一种熟悉的外观和感觉,还具有大多数 UNIX 风格操作系 统的权限,拥有诸如 cd、ls、mkdir、pwd、lsop、dsget 之类的命令。从 Oracle 11g 开始, 添加了大量的新命令,用来管理整个 ASM 实例及其对象。现在完全可以通过命令行界 面来管理 ASM 实例,包括启动/停止;管理磁盘组、卷和 ASM 集群文件系统;备份和 恢复元数据;甚至在 ASMCMD 内部访问 GPnP 配置文件和 ASM 参数文件。关于特定 ASMCMD 命令的解释与示例用法,请参阅命令行帮助,ASMCMD 命令行帮助提供有关 这些命令的详尽信息。 6.3.3 ASM FTP 实用工具 Oracle 11g ASM 支持 ASM FTP,利用它,可以像使用传统文件传输协议(FTP)对普 通文件执行常规操作那样,对 ASM 文件和目录执行操作。通过这种方式访问 ASM 文件 的典型应用是从一个数据库向另一个数据库中复制 ASM 文件。 Oracle 数据库充分利用了 XML DB 的虚拟文件夹功能,它提供了通过 XML DB 协议 访问 ASM 文件的方式,这些协议包括 FTP、超文本传输协议(HTTP)和编程 API 等。ASM 虚拟文件夹在 XML DB 层次结构中挂载为/sys/asm。这个文件夹称为“虚拟”是因为没 有在 XML DB 中实际存储任何数据。所有操作都是通过底层 ASM 组件处理的。 在默认情况下,这个虚拟文件夹是在安装 XML DB 期间创建的。如果没有将这个数 据库配置为使用自动存储,这个虚拟文件夹就是空的,不允许执行任何操作。/sys/asm 虚拟文件夹包含的文件夹和子文件夹符合 ASM 完全限定命名结构的层次结构。图 6-6 显示了一个 ASM 虚拟文件夹的层次结构。 ASM 实例 /sys/adm 磁盘组 文件夹 文件 DGA DBA DBB DBB DBA DGB data01 存档 ASM 文件 indx01 图 6-6 ASM 虚拟文件夹层次结构 如图 6-6 所示,这个虚拟文件夹为 ASM 实例中的每个已挂载磁盘组包含一个子文件 夹。每个磁盘组文件夹为每个使用该磁盘组子文件夹的数据库包含一个子文件夹,这个 数据库文件夹包含一个文件类型子文件夹,文件类型子文件夹包含 ASM 文件,它在本 质上是二进制文件。尽管我们可以像在传统 FTP 应用程序中访问常规文件那样访问 ASM 第Ⅱ部分 安装、配置和存储 154 文件,但还是存在一些应用与访问限制。要查看/sys/asm 虚拟文件的内容,必须具备 DBA 权限。 下面的示例演示了如何通过虚拟文件夹来访问 ASM 文件。在这个示例中,我们假 定当前位于用户 oracle 的主目录中,即/home/oracle,并且我们正在使用 FTP 连接到托管 这个 ASM 实例的服务器。ASM 实例托管在 racnode01 服务器上。磁盘组名称为 DGA, 使用这个 DGA 磁盘组的数据库名称为 dba。 首先,我们打开指向 i3dl045e 的 FTP 连接,并传递登录信息。只有具有 DBA 权限 的用户可以访问/sys/asm 文件夹。在连接之后,我们将目录改为/sys/asm 虚拟文件夹,并 列出/sys/asm 文件夹的内容。为这个 DGA 磁盘组使用了一个名为 DGA 的子文件夹。然 后我们改变到 DGA 目录,查看另一个采用数据库名称的目录,在我们的示例中,其名 称为 dba。然后,我们列出了 dba 目录的内容,其中包含了与 dba 数据库相关的 ASM 二 进制文件。最后,我们将文件 data01.dbf 下载到本地目录中,即/home/oracle。 ftp> open racnode01 7777 ftp> use system ftp> passwd manager ftp> cd /sys/asm ftp> ls DGA ftp> cd DGA ftp> ls dba ftp> ls data01.dbf indx01.dbf ftp> bin ftp> get data01.dbf 6.4 ASMLib ASMLib 是一个存储管理界面,它帮助简化操作系统与数据库之间的接口。ASMLib API 是由 Oracle 开发和提供支持的,为支持 ASM 的内核提供了一种替代接口,用于识 别和访问块设备。ASMLib 接口用作标准操作系统接口的替代品。它使存储与操作系统 供应商有可能提供一些与存储相关的扩展功能,为用户提供一些好处,例如,相对于其 他数据库平台,可以提供更好的性能和更出色的完整性。 6.4.1 安装 ASMLib Oracle 为 Linux 操作系统提供了 ASM 库驱动程序。在这个库出现之后,不再需要进 行原始设备绑定之类的步骤。在安装任何 Oracle 数据库软件之前,必须安装 ASM 库驱 动程序。此外,建议在安装 OUI 数据库之前准备和创建数据库所需要的所有 ASM 磁盘 第 6 章 自动存储管理 155 设备。 ASMLib软件可以从Oracle技术网络(OTN)网站上免费下载。请打开网址http://otn.oracle. com/tech/linux/asmlib/,并选择适合自己的 Linux 平台版本的链接。 每个 Linux 平台有 3 个包可供使用。两个基本的 rpm 包是:oracleasmlib 包,它提供 实际 ASM 库;还有 oracleasm-support 包,它提供用于配置和启动 ASM 驱动程序的实用 工具。这两个包都需要安装。第三个包为 ASM 库提供核心驱动程序。每个包都为不同 内核提供驱动程序。必须为正在运行的内核安装适当的包。 6.4.2 配置 ASMLib 在安装这些包之后,可以使用/etc/init.d/oracleasm 实用工具中的配置选择加载和配置 ASMLib。对于 Oracle RAC 集群,必须在集群的所有节点上完成 oracleasm 的安装和配 置。ASMLib 的配置非常简单,只须执行以下命令: [root@racnode01/]# /etc/init.d/oracleasm configure Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: oracle Default group to own the driver interface []: dba Start Oracle ASM library driver on boot (y/n) [n]: y Fix permissions of Oracle ASM disks on boot (y/n) [y]: y Writing Oracle ASM library driver configuration [ OK ] Creating /dev/oracleasm mount point [ OK ] Loading module "oracleasm" [ OK ] Mounting ASMlib driver filesystem [ OK ] Scanning system for ASM disks [ OK ] 注意,ASMLib 挂载点不是可由操作系统命令访问的标准文件系统。只有与 ASM 驱 动程序通信的 ASM 库才会使用它。ASM 库与 Oracle 内核进行动态链接,多个 ASMLib 实现可以同时链接到同一 Oracle 内核。每个库必须提供对不同磁盘集的访问和不同的 ASMLib 功能。 ASMLib 的目标是提供一种更流畅、更高效的机制,用于管理磁盘和对 ASM 存储进 行 I/O 处理。ASM API 提供了一组相互依赖的功能,它们需要采用分层方式加以实现。 这些功能依赖于实现相关函数的后端存储。从实现的角度来看,这些功能分为 3 个功能集。 每个功能组依赖于低层组的存在。设备发现功能是最低层功能,在任何 ASMLib 库 中都必须实现。I/O 处理功能提供了一个经过优化的异步接口,用于安排 I/O 操作计划和 管理 I/O 操作完成事件。这些功能事实上扩展了操作系统接口。因此,必须实现 I/O 处 第Ⅱ部分 安装、配置和存储 156 理功能,将其作为操作系统内核内部的设备驱动程序。 性能和可靠性功能是最高层功能,依赖于 I/O 处理功能的存在。这些功能使用 I/O 处理控制结构在 Oracle 数据库和后端存储设备之间传送元数据。性能和可靠性功能还支 持在后端存储部分上实现其他一些智能。在通过 ASMLib API 传递元数据时可以做到这 一点。 1. 设备发现 “设备发现”提供了由高级功能操作的存储设备的标识和命名。设备发现不需要任 何操作系统代码,可以实现为一个独立库,由 Oracle 数据库调用和动态链接。发现功能 使 ASM 能够利用磁盘的特征。不需要通过常规的操作系统接口就能获得 ASMLib 发现 的磁盘。例如,一个存储供应商可以提供一种更高效的方法,用于发现和加载由其自己 的接口驱动程序管理的磁盘。 2. I/O 处理 目前的标准 I/O 模型需要大量操作系统开销,其中的一部分开销是由模式和上下文 切换造成的。ASMLib 的部署采用一种更高效的 I/O 时间表和调用处理机制,减少了从 内核向用户模式的状态转换数量。对 ASMLib 的一次调用可能提交和生成多个 I/O。这 样可以极大地减少在执行 I/O 时对操作系统的调用数量。此外,一个实例中的所有进程 可以使用同一个 I/O 句柄来访问相同磁盘。这样就不需要多个开放调用和多个文件描述符。 ASMLib I/O 接口的关键方面之一是它提供了异步 I/O 接口增强性能,在后端存储设 备上支持与数据库相关的智能。至于后端存储中的附加智能,I/O 接口支持从数据库向 存储设备传递元数据。存储阵列固件的进一步发展可能允许将数据库相关元数据传递给 后端存储设备,并在存储设备中支持新的与数据库相关的智能。 6.5 小结 自动存储管理是为 Oracle 数据库管理数据存储的最佳框架之一。ASM 实现了 Stripe and Mirror Everything (SAME)方法,用以管理 I/O 规模等于最常见 Oracle I/O 客户端的存 储栈,从而提供了极大的性能好处。 Oracle 还增强和改进了 ASM,可以用非 Oracle 企业应用程序为其提供支持,以存储 应用程序数据。ASM 提供了 GUI 工具 ASMCA 和 OEM,用于管理 ASM 实例及其相关 对象。ASM 集群文件系统是一个建立在 ASM 基础上的真正集群文件系统,不再需要在 企业集群应用程序中使用第三方集群文件系统。ACFS 还提供了丰富的功能,如快照和 加密。 诸如 SQL*Plus、ASMFTP 和 ASMCMD 之类的命令行工具也可用于提供一个命令行 界面,用以设计和构建准备脚本。利用 ACFS 和 ACFS 快照的附加功能,管理大量存储 不再是一项复杂任务,这项任务中会涉及大量规划和日常管理问题。
还剩92页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

xuyongjun

贡献于2012-12-13

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf