Oracle RAC 11g实战指南

来源:互联网 发布:火车票网上抢票软件 编辑:程序博客网 时间:2024/05/29 13:39
目录 前言 第1章 高可用性概述 1 1.1 什么是高可用性 1 1.2 如何获得高可用性 2 1.3 什么是集群 3 1.4 Oracle的高可用性产品 7 第2章 Oracle RAC 11g的体系结构 9 2.1 Oracle RAC 11g的新特性 9 2.2 RAC集群的体系结构 10 第3章 安装RAC之前的准备工作 15 3.1 系统需要满足什么条件 15 3.1.1 系统需要满足的硬件条件 15 3.1.2 系统需要满足的软件条件 16 3.1.3 节点间的网络需要满足什么条件 18 3.1.4 存储设备需要满足什么条件 21 3.1.5 节点的时钟需要满足什么条件 22 3.2 root用户需要完成的工作 23 3.2.1 如何调整操作系统 23 3.2.2 如何创建用户和用户组 25 3.2.3 如何配置存储设备 26 3.2.4 如何配置网络 29 3.3 oracle用户需要完成的工作 30 3.3.1 如何设置环境变量 30 3.3.2 如何手工配置SSH 31 第4章 Grid Infrastructure软件的安装 37
6 / 47
4.1 如何进行安装前的校验 37 4.2 开始安装Grid Infrastructure软件 39 4.3 如何查看安装结果 55 4.3.1 如何查看节点的状态 55 4.3.2 如何查看VIP和SCAN 56 4.3.3 如何查看Clusterware中服务的状态 57 4.3.4 如何查看ASM实例的状态 60 4.4 如何删除Grid Infrastructure 60 第5章 Oracle数据库软件的安装 64 5.1 安装前的准备工作 64 5.2 开始安装Oracle数据库软件 65 5.3 如何删除Oracle数据库软件 74 第6章 集群数据库的创建 75 6.1 创建集群数据库之前的准备工作 75 6.2 开始创建集群数据库 76 6.3 如何删除集群数据库 90 第7章 RAC集群的维护 93 7.1 如何管理Voting文件 93 7.2 如何管理OCR文件 95 7.3 如何管理RAC集群中的各种资源 97 7.4 如何管理RAC集群中的网络 99 7.4.1 如何修改VIP 99 7.4.2 如何修改SCAN 100 7.4.3 如何修改私有和公共IP地址 101 7.5 如何扩展RAC集群 102 7.5.1 扩展RAC之前的准备工作 103
7 / 47
7.5.2 如何扩展Clusterware 103 7.5.3 如何扩展Oracle数据库服务器 104 第8章 自动存储管理 105 8.1 ASM实例的创建 106 8.2 磁盘组的管理 110 8.2.1 磁盘组的创建和删除 110 8.2.2 磁盘的添加和删除 112 8.2.3 磁盘组信息的查询 112 8.2.4 磁盘组的重新平衡 114 8.2.5 磁盘组的挂接和卸载 114 8.2.6 磁盘组中目录的管理 115 8.3 如何使用ASM磁盘组 117 8.3.1 如何激活自动文件管理功能 118 8.3.2 文件的命名规则 118 8.3.3 如何创建OMF数据库 119 8.3.4 如何创建OMF表空间 122 8.3.5 如何创建OMF控制文件 123 8.3.6 如何创建OMF重做日志文件 123 8.3.7 如何存储归档日志文件 124 8.4 命令行工具ASMCMD的用法 124 8.4.1 如何通过ASMCMD管理ASM实例 125 8.4.2 如何通过ASMCMD管理ASM 磁盘组 128 8.4.3 如何通过ASMCMD管理磁盘组 中的文件 131 8.5 ACFS文件系统管理 133
8 / 47
8.5.1 如何管理ASM磁盘组中的卷 134 8.5.2 如何管理ASM磁盘组中的文件系统 137 8.5.3 ACFSUTIL工具的用法 139 第9章 集群数据库的维护 141 9.1 数据库的启动和关闭 141 9.2 如何对初始化参数进行维护 142 9.3 如何对重做日志进行维护 144 9.4 如何对表空间进行维护 147 9.5 如何对控制文件进行维护 149 第10章 数据库的备份与恢复—RMAN的用法 150 10.1 RMAN的基本结构 150 10.2 RMAN的配置 152 10.2.1 如何配置RMAN客户端的连接 153 10.2.2 恢复目录的创建 153 10.2.3 如何对目标数据库的归档日志文件进行配置 154 10.3 如何利用RMAN对数据库进行备份 155 10.3.1 通道的设置 156 10.3.2 存储脚本的用法 157 10.3.3 控制文件的备份 158 10.3.4 参数文件的备份 159 10.3.5 归档日志文件的备份 159 10.3.6 非归档模式下数据文件的备份 160 10.3.7 归档模式下数据文件的备份 161 10.3.8 备份集的备份 163 10.4 如何对数据库进行完全恢复 164 10.4.1 如何对备份文件进行校验 164
9 / 47
10.4.2 如何对数据文件进行恢复 165 10.5 两个实际的例子 167 10.5.1 模拟数据文件损坏的例子 167 10.5.2 模拟磁盘损坏的例子 168 10.6 如何对坏块进行恢复 169 10.6.1 什么叫块介质恢复 169 10.6.2 如何进行块介质恢复 170 10.7 如何对数据进行跨平台移植 171 10.7.1 字节存储次序相同时的移植 171 10.7.2 字节存储次序不同时的移植 173 附录A Oracle RAC 11g在Solaris下的安装 175 附录B Oracle RAC 11g在Linux下的安装 189
10 / 47
第1章 高可用性概述 计算机安全一直是困扰相关从业人员的一个重要问题。为了保证计算机的安全,尤其是保证计算机中所存储数据的安全,人们研究开发出无数的硬件和软件产品。例如:为了防止病毒感染,人们开发了杀毒软件;为了防止黑客的袭击,人们开发了防火墙;为了防止磁盘损坏而导致数据丢失,在重要的计算机中都使用磁盘阵列来存储数据;为了防止计算机出现故障,人们又研究开发了集群产品;为了防止计算机所运行的机房环境受到破坏,人们又开发了异地容灾产品。 总之,计算机的安全问题一直伴随着计算机的发展。计算机在给人们的生活带来翻天覆地的变化的同时,也给人们带来了无穷的烦恼。无数的聪明人在研究更先进、更智能、运算速度更快的计算机,又有无数的聪明人在研究如何保护这种脆弱的智能机器。 高可用性是计算机安全问题中的一个重要分支,它的目的是保证重要的计算机系统可以向用户提供不间断的访问。 1.1 什么是高可用性 许多重要的业务系统都需要提供7×24(即一天24小时,一周7天)不间断的服务,如银行、电信、保险、政府等部门的业务系统。对于一个普通用户来说,他最关心的问题是,他所需要的服务能否得到满足,比如在银行的ATM上能不能随时取出钱来,他所关心的股票能不能顺利地进行交易,在医院看病时能不能得到保险公司所支付的医药费等。而对于运营者来说,这些业务系统停止运行就意味着巨大的经济损失,更重要的是,这将失去用户的信任。 随着经济全球化的加速发展,人们对这种以计算机为核心的业务系统的依赖性越来越强。对于管理这些业务系统的部门来说,面临的重要任务是保证它们的高可用性,尽量减少停机时间,如果业务系统出现停机现象,应该在最短时间内对它们进行恢复。 业务系统的停机包括计划内停机和计划外停机两种。计划内停机是指管理员有意识安排的停机,比如在对硬件进行升级、对软件进行升级、更换损坏的硬件、对系统进行备份、系统的新功能测试时,可能需要停止业务系统的运行。计划外停机是指非人为的、因外界环境变化而引起的停机,比如当硬件出现重大故障、应用程序停止运行、计算机所运行的机房环境遭到灾难性的破坏时所引起的业务系统停止运行。 实践证明,在所有的引起业务系统停机的各种情况中,计划内停机约占85%,而由于硬件故障所引起的停机现象大约只占1%。也就是说,绝大部分停机现象是人为安排的,这多少有点出乎人们的意料。实际上,随着工艺水平的不断提高,计算机硬件出现故障的几率越来越低,随着人们对业务系统的重视程度不断提高,计算机所运行的机房环境也越来越安全,所以,计划外停机对业务系统的影响是很小的。很多客户都有这样的经历:业务系统连
11 / 47
续运行几年都没有出现任何故障,偶尔有一天对软件或硬件进行升级时,或者仅仅清理机箱后面的灰尘,却使业务系统无法重新正常运行。 高可用性的目的就是尽量减少停机时间,无论是计划内停机还是计划外停机。目前实现高可用性的方法基本上都是这样的:在一个业务系统中,对于重要的计算机组件,都有一个或多个对等的组件作为后备,一旦某个重要的组件由于人为原因或者因为故障而无法工作,后备的对等组件马上接替它的工作。在业务系统中,我们把这种由于重要的计算机组件没有后备的对等组件而可能引起的故障称为“单点失败”(即SPOF,Single Point Of Failure)。高可用性就是通过消除业务系统中的单点失败而减少停机时间。 1.2 如何获得高可用性 根据前面的描述,我们已经知道,通过消除单点失败,可以减少业务系统的停机时间,从而提高业务系统的高可用性。对于那些需要运行重要业务系统的计算机,厂商在硬件和软件方面都进行了一系列的强化,以保证计算机本身的高可用性。 在硬件方面,作为服务器的计算机大都具有以下特点: 1)多CPU 在计算机中至少有两颗CPU。通过多CPU,不仅可以保证多个进程能够真正实现并发执行,而且可以保证当一颗CPU出现故障时,整个计算机仍然能够运行。 2)冗余电源 在计算机中至少有两个电源,当其中一个电源出现故障时,其他电源仍然能够向计算机持续供电。 3)冗余网卡 在计算机中一般有两个以上网卡,用户可以通过任何一个网卡访问计算机中的服务。在网卡上可以指定可“漂移”的IP地址,当一个网卡出现故障时,这个网卡上的IP地址就漂移到另外一个网卡上。通过多个网卡还可以实现数据流量的均衡。 4)ECC内存 ECC(Error Checking and Correcting)内存就是具有错误检测和错误纠正的内存,这种内存可以检测到数据的错误,并对其进行纠正,从而使计算机系统更加稳定。 5)可热插拔的设备 许多外部设备都可以进行热插拔,如果这样的设备出现故障,工程师可以在不关闭计算机系统的情况下对其进行更换和修理。 6)磁盘阵列
12 / 47
对于一个业务系统来说,核心的部分是数据。为了保证数据的安全,在计算机中大多使用磁盘阵列作为数据的存储设备。磁盘阵列通过RAID(Redundant Array of Independent Disk)技术将多个独立的磁盘虚拟为一个大的存储空间,数据就存储在这个虚拟的空间中。如果一个磁盘出现故障,工程师可以在磁盘阵列中直接对其进行替换,这个磁盘中的数据也将被自动恢复。目前的磁盘阵列一般都使用光纤通道接口,为了保证磁盘阵列的访问路径是安全的,在一台计算机中一般有多个光纤卡,分别连接到不同的光纤交换机上,通过多条路径连接到磁盘阵列上,这样可以防止访问路径出现故障。在磁盘阵列中,对于同时出现故障的磁盘数量是有限制的。为了防止多个磁盘同时出现故障而导致数据无法恢复,一般都有一块或多块磁盘作为Hot Spare,这样的磁盘平常是闲置的,当其他存储数据的磁盘出现故障时,作为Hot Spare的磁盘将立即接替出现故障的磁盘。 在软件方面,操作系统一般都有以下特点: 1)稳定的文件系统 文件系统的稳定,对整个计算机系统的稳定起着至关重要的作用。目前各种操作系统一般都通过日志机制来保证文件系统的稳定性,如AIX的JFS/JFS2文件系统、HP-UX的VxFS文件系统、Solaris的ZFS文件系统、Linux的ext3文件系统等。 2)可动态修改的内核 许多操作系统的内核可以进行动态配置,配置结果可以立即生效,不用重新启动计算机系统。 3)应用程序监视 对于计算机中重要的应用程序,应该保证它时刻都在运行。在系统中应该有另外一个程序,对重要的应用程序的运行进行监视,如果发现它的运行意外中止,应该立即重新启动它。 4)数据的备份 备份无疑是保证数据安全的一种重要措施,当因为系统出现故障而导致数据丢失时,利用备份可以对数据进行恢复。 1.3 什么是集群 如果一台计算机出现故障,那么在这台计算机上运行的应用程序将停止运行。在一个业务系统中,对于重要的计算机,也应该有一台或多台对等计算机作为后备,一旦运行重要应用程序的计算机出现故障,作为后备的计算机立即接替它的工作,应用程序将切换到后备计算机上继续运行,这样可以保证整个业务系统的高可用性。实现这种应用程序切换的解决方案就是集群。这里所说的应用程序,就是指运行在一台计算机上的、向用户提供某种特定服务的应用软件,如Web服务器、邮件服务器、数据库服务器、中间件服务器等。
13 / 47
集群是由一些特定的硬件和软件组成的应用系统,用来提供应用程序的高可用性。多台物理上相互独立的计算机通过网络连接在一起,每台计算机通过心跳信号探测其他计算机的状态,一旦一台计算机出现故障,在这台计算机上运行的应用程序将立即切换到另外一台计算机上。为了建立集群,需要配置以下硬件设备: 1)节点 节点就是物理上独立的计算机,在一个集群中至少需要两个节点,这些节点的硬件配置应该基本相当,在节点上需要运行相同的操作系统,安装相同的应用程序。 2)网络 节点之间至少需要通过两个网络相连,其中一个称为私有网络,另外一个称为公共网络。私有网络用于发送心跳信号,心跳信号是网络中一种特殊的数据包,每个节点通过心跳信号探测其他节点的状态。公共网络一方面用于发送心跳信号,另一方面用于提供用户的访问。 3)共享的存储设备 共享的存储设备用于存储应用程序的数据,所有节点必须能够同时访问这种设备。应用程序在其中一个节点上运行,一旦这个节点出现故障,应用程序将切换到另外一个节点上。无论应用程序在哪个节点上运行,它都能够访问共享存储设备中的数据。 集群的硬件连接情况如图1.1所示。 (点击查看大图)图1.1 集群的硬件连接 在每个节点上需要运行相同的操作系统,安装相同的集群管理软件和应用程序。当安装集群管理软件后,在每个节点上将运行一个称为“集群管理器”的进程。集群管理器有两个基本功能:一是通过心跳信号监视每个节点的状态;二是进行资源组的切换,一旦发现某个节点出现故障,集群管理器将把这个节点上的资源组切换到另外一个节点上。资源组是资源的
14 / 47
集合,每个资源组代表一个应用程序,在资源组中包含当前应用程序所需要的资源。资源组可以在集群范围内进行切换,这就意味着应用程序在不同节点之间的切换。 在集群中需要为每个应用程序定义一个资源组,资源组中需要包含以下资源: 1)IP地址 应用程序将监听这个IP地址,用户通过这个地址访问应用程序。这个IP地址是可以漂移的,如果当前节点出现故障,IP地址将随着资源组的切换而漂移到另外一个节点上。 2)应用程序的启动脚本和停止脚本 应用程序虽然安装在每个节点上,但是只在一个节点上运行,集群管理器通过启动脚本启动应用程序,通过停止脚本关闭应用程序。 3)存储设备 应用程序所需要的数据都存储在这个存储设备中,存储设备在应用程序所运行的节点上打开,如果这个节点出现故障,存储设备将随着资源组的切换而在另外一个节点上打开。在不同的操作系统中,对存储空间的称呼是不一样的,如在AIX和HP-UX系统中,这样的存储空间称为卷组,在Solaris中称为磁盘集。这里所说的存储设备,是指同时连接在所有节点上、所有节点都可访问的外部共享存储设备,如磁盘阵列。 为了保证应用程序的高可用性,在集群中需要为应用程序定义一个资源组,在资源组中至少需要包含三种资源:用于向用户提供访问的IP地址、应用程序的启动脚本和停止脚本、用于存储应用程序的数据的存储设备。当集群启动时,资源组在其中一个节点上打开,这就意味着应用程序在这个节点上运行。当这个节点由于故障而不可用时,资源组便切换到另外一个节点上,在另外一个节点上打开。资源组也可以在管理员的控制下手工切换到另外一个节点上。 资源组的切换情况如图1.2所示。假设某个应用程序先在节点1上运行,它所对应的资源组在节点1上打开。如果节点1出现故障,资源组便切换到节点2上,应用程序所用的IP地址也将漂移到节点2上,应用程序的数据所在的存储设备在节点2上打开,应用程序的启动脚本在节点上也将自动执行,于是这个应用程序便在节点上运行。当节点1的故障解决后,应用程序所对应的资源组可自动切换到节点1上,也可以继续在节点2上保持打开状态。如果资源组继续在节点2上处于打开状态,那么当这个节点出现故障时,资源组便切换到节点1上。
15 / 47
(点击查看大图)图1.2 集群的资源组切换 在图1.2中,资源组在其中一个节点上打开,其他节点都是空闲的。如果在每个节点上都运行一个应用程序,就可以充分利用这些节点的处理能力。在集群中运行多个应用程序的情况如图1.3所示:在集群中为每个应用程序分别定义一个资源组,每个资源组在不同的节点上打开。如果节点1出现故障,那么这个节点上的资源组将切换到节点2上,这时在节点2上将打开两个资源组。尽管节点2的负载大大加重,但是两个应用程序对用户都是可以访问的。当节点1的故障解决后,以前在这个节点上打开的资源组便可再次切换到这个节点上。
16 / 47
图1.3 两个资源组的切换情况 目前主流的集群管理软件主要有以下几种: IBM公司的HACMP HP公司的ServiceGuard SUN公司的Sun Cluster Oracle公司的RAC 其中前三种产品只能安装在各个公司自己的操作系统中。它们的工作原理基本上是相同的。它们的基本功能就是通过资源组切换的方式来保证应用程序的高可用性。RAC可以安装在适合Oracle数据库运行的任何操作系统中,它不仅可以实现资源的切换,而且可以向用户提供并发访问,用户可以通过任何一个节点访问数据库中的数据。 集群是一个完整的应用环境。在配置集群时,需要在每个节点中安装集群管理软件,还需要在集群中安装应用程序,如Weblogic、Websphere、Oracle等。上述前三种软件仅仅是集群管理软件,而RAC本身就可以提供一个完整的应用环境,其中集群管理器的功能由Clusterware来提供,而Oracle数据库就是运行在这个集群管理器之上的应用程序。 1.4 Oracle的高可用性产品 Oracle公司不仅向用户提供了一个优秀的数据库产品,而且提供了许多用于保证数据库高可用性的产品。具体来说,Oracle通过以下组件或产品来保证数据库的高可用性: 1)Oracle RAC
17 / 47
Oracle RAC是所有集群管理软件中功能最复杂、最难配置的一种。本书的主要内容就是介绍RAC的结构、功能和详细的配置过程。 2)Oracle Restart Restart是从Oracle 11.2开始出现的一个组件,它的功能是在硬件或软件故障之后,或者在重新启动系统时,自动启动数据库、监听器以及其他相关组件,并且保证这些组件之间的正确启动顺序。Restart只能工作在单实例数据库中,在RAC环境中,Restart所具有的功能是由Clusterware来实现的。 3)Oracle Data Guard Data Guard的功能是实现Oracle数据库的异地容灾,防止数据库所运行的站点发生灾难性的故障,如业务系统所在的机房出现火灾、水灾,或者遭到人为破坏。两个相互独立的数据库通过网络保持同步:其中一个数据库向用户提供正常的访问,这个数据库称为主数据库(Primary);另一个数据库保持闲置,或者向用户提供少量的只读访问,如产生报表、对数据库进行备份等,这个数据库称为Standby。当用户在主数据库中执行DDL或DML语句修改数据时,数据库服务器将产生重做日志,Data Guard通过网络将重做日志传输到Standby数据库, Standby数据库服务器通过重做日志产生同样的数据。当主数据库出现故障时,用户的访问将切换到Standby数据库。这两个数据库一般分开放在两个不同的城市,甚至两个不同的国家。 4)Advanced Replication 高级复制(Advanced Replication)主要用在分布式数据库中。多个相互独立的计算机可以同时向用户提供访问,用户一般就近访问其中一个数据库。如果用户修改了一个数据库中的数据,这些修改将被复制到其他数据库中。 5)Oracle Streams Streams是一种特殊的高级复制技术,它提供了功能更强大、更加灵活的复制功能。 6)Oracle Flashback 利用Flashback技术,我们可以查询一个表在过去某个时刻的数据,或者在过去一段时间内在一个表上所发生的事务,可以把一个表或者整个数据库恢复到过去某个时刻,还可以还原对表的DROP操作。 7)Oracle ASM ASM(Automatic Storage Management)是Oracle强力推荐的存储管理技术,它是Oracle公司提供的逻辑卷管理器,这种技术目前主要用在RAC环境中。
18 / 47
8)Recovery Manager RMAN(Recovery Manager)用于对数据库进行备份和恢复,它是一种强有力的备份与恢复工具,利用这个工具,可以对整个数据库、一个表空间或者一个数据文件进行完全备份和增量备份。 9)LogMiner LogMiner的功能是对重做日志文件进行分析,将其中存储的重做日志还原为文本格式。通过分析重做日志,可以确定一条DML或DDL语句的精确执行时间,可以跟踪用户在某个特定表上的DML或DDL操作,也可以获得DML语句所对应的反操作,通过这样的反操作,可以取消用户所执行的DML语句。 第2章 Oracle RAC 11g的体系结构 从第1章的描述我们已经知道,集群是一种应用环境。在集群中安装重要的应用程序,通过集群可以保证应用程序的高可用性。集群管理器的基本功能是:通过心跳型号监视每个节点的状态,如果发现节点出现故障,便进行资源组的切换,使应用程序在其他没有出现故障的节点上继续运行。 RAC也是一种集群环境,这个应用环境包括三部分:Clusterware、ASM和Oracle数据库。其中Clusterware的功能就是通过心跳信号监视节点的状态,并进行资源的切换。ASM的功能是对磁盘进行管理。Oracle数据库就是运行在这个集群环境中的应用程序,RAC的主要功能就是保证Oracle数据库的高可用性。 本章的主要内容就是介绍RAC这种特殊集群环境的结构。 2.1 Oracle RAC 11g的新特性 与以前的版本相比,Oracle RAC 11g有较大的变化,特别是在RAC 11.2中。其中最大的变化是ASM存储技术。在RAC 11.2中,ASM软件是和Clusterware软件一起被安装的,在安装这两种软件的同时,就可以创建ASM实例和ASM磁盘组,OCR和Voting文件可以存储在ASM磁盘组中。下面列出了在Oracle RAC 11g中出现的一些主要的新特性: Clusterware和Oracle数据库软件由两个用户分别安装,ASM实例和数据库实例也由两个用户分别进行管理。 增加了SYSASM权限。具有这个权限的用户就是ASM实例的管理员,这个用户就能够以“AS SYSASM”的方式登录ASM实例。 在RAC 11.1中,OCR和Voting文件可以存储在磁盘裸设备和磁盘块设备中。在RAC 11.2中RAC中,OCR和Voting文件可以存储在ASM磁盘组中。
19 / 47
从RAC 11.2开始,Clusterware软件和ASM软件合在一起组成了Grid Infrastructure软件。由于Grid Infrastructure软件是先于Oracle数据库软件被安装的,所以OCR和Voting文件可以存储在ASM磁盘组中。 从RAC 11.2开始,完全取消了对裸设备的支持。 从RAC 11.2开始,增加了集群时间同步服务(CTSS),利用这个服务,可以对多个节点之间的时间进行同步。 从RAC 11.2开始,客户端应用程序既可以通过VIP,也可以通过SCAN地址连接数据库实例。Oracle建议使用SCAN。 从RAC 11.2开始,在ASM磁盘组中可以创建卷和ACFS文件系统。在安装Oracle数据库软件时,可以将ACFS文件系统指定为软件的安装路径。 2.2 RAC集群的体系结构 RAC是一个完整的集群应用环境,它不仅实现了集群的功能,而且提供了运行在集群之上的应用程序,即Oracle数据库。无论与普通的集群相比,还是与普通的Oracle数据库相比,RAC都有一些独特之处。 RAC由至少两个节点组成,节点之间通过公共网络和私有网络连接,其中私有网络的功能是实现节点之间的通信,而公共网络的功能是提供用户的访问。在每个节点上分别运行一个Oracle数据库实例和一个监听器,分别监听一个IP地址上的用户请求,这个地址称为VIP(Virtual IP)。用户可以向任何一个VIP所在的数据库服务器发出请求,通过任何一个数据库实例访问数据库。Clusterware负责监视每个节点的状态,如果发现某个节点出现故障,便把这个节点上的数据库实例和它所对应的VIP以及其他资源切换到另外一个节点上,这样可以保证用户仍然可通过这个VIP访问数据库。 在普通的Oracle数据库中,一个数据库实例只能访问一个数据库,而一个数据库只能被一个数据库实例打开。在RAC环境中,多个数据库实例同时访问同一个数据库,每个数据库实例分别在不同的节点上运行,而数据库存放在共享的存储设备上。 通过RAC,不仅可以实现数据库的并发访问,而且可以实现用户访问的负载均衡。用户可以通过任何一个数据库实例访问数据库,实例之间通过内部通信来保证事务的一致性。例如,当用户在一个实例修改数据时,需要对数据加锁。当另一个用户在其他实例中修改同样的数据时,便需要等待锁的释放。当前一个用户提交事务时,后一个用户立即可以得到修改之后的数据。 RAC集群环境的基本结构如图2.1所示。
20 / 47
在创建RAC集群时,一般来说,Clusterware软件和Oracle数据库软件安装在每个节点的本地文件系统中,而那些要被所有节点访问的文件则存放在共享的存储设备中。在安装Clusterware软件时,需要在共享存储设备中创建OCR和Voting文件。其中,在OCR文件中记录RAC集群的配置信息,在Voting文件记录每个节点的成员资格信息。每个节点中的RAC集群在启动时,都需要读这两个文件,以确定当前节点的成员资格,并获得整个集群的配置信息。在创建数据库时,数据库文件、重做日志文件、控制文件、参数文件也存放在共享的存储设备中。对于共享存储设备,RAC有以下几种使用方式: 图2.1 RAC的基本结构 在共享存储设备中创建集群文件系统,如Linux中的OCFS、AIX中的GPFS等。 在共享存储设备中创建文件系统,然后在NFS服务中将这些文件系统设置为共享文件系统。 创建ASM磁盘组,将共享存储设备放在ASM磁盘组中。 无论以什么样的方式使用共享存储设备,多个节点需要能够同时访问存储于这种设备中的文件。因此,与单机中的存储设备相比,共享存储设备需要向多个节点提供并发访问。 从11.2版本开始,Oracle已经完全取消了对裸设备的支持,这就意味着,无论是OCR和Voting文件,还是数据库文件,都不能存储在裸设备中了。Oracle目前强力推荐使用的存储技术是ASM。在安装Grid Infrastructure软件时,同时安装了Clusterware软件和ASM软件,这时就可以创建ASM实例和ASM磁盘组,并把OCR和Voting文件存储在ASM磁盘组中。在创建数据库时,还可以再创建其他的ASM磁盘组,把数据库文件和快速恢复区(Flash recovery area)也存放在ASM磁盘组中。
21 / 47
为了访问ASM磁盘组中的文件,在每个节点上需要运行一个ASM实例。ASM实例的功能是对ASM磁盘组进行管理和控制。在一个RAC集群环境中,可以创建多个ASM磁盘组,在不同的磁盘组可以存放不同类型的文件。 使用ASM磁盘组的RAC如图2.2所示。 (点击查看大图)图2.2 使用ASM磁盘组的RAC 在单实例数据库中,一个实例只能访问一个数据库,一个数据库只能被一个实例打开。实例是内存中的结构,包括SGA(System Global Area)和后台进程两部分。其中SGA是内存中一些缓冲区的集合。以下几种缓冲区是每个实例都需要的: 数据库高速缓存 存放用户最近所访问的数据。 重做日志缓冲区 存放与用户事务有关的重做日志。 共享池 包括库缓冲区和数据字典缓冲区。其中,在库缓冲区中存放用户最近所执行过的SQL语句以及它们的分析代码和执行计划。在数据字典缓冲区中存放用户最近所访问过的数据库对象的数据字典信息。 在启动实例时,系统在内存中分配SGA,同时启动若干后台进程。后台进程的主要功能是在实例和数据库之间交换数据。以下后台进程是每个实例都需要的: DBWR 用于把数据库高速缓存中的脏缓冲区写入数据文件。 LGWR 用于把重做日志缓冲区中的重做日志写入重做日志文件。 SMON 用于进行实例恢复。
22 / 47
PMON 用于监视用户进程的状态,如果发现用户进程意外终止,便回收相关的资源,回滚没有提交的事务,并释放用户进程对数据所加的锁。 CKPT 用于发出检查点,对数据文件、控制文件和重做日志文件进行同步。 ARCH 用于对重做日志文件进行归档。 数据库表现为磁盘上的文件,用户通过实例访问这些文件中的数据。数据库中的文件可以存放在计算机的内置磁盘上,也可以存放在外置的存储设备中。以下文件是每个数据库都需要的: 数据文件 用于存放用户所关心的业务数据。 控制文件 用于存放数据库的结构信息。 重做日志文件 用于存放与用户事务有关的重做日志。 除了上述三种文件以外,在数据库中还有归档日志文件、口令文件、跟踪文件、警告文件、参数文件等各种类型的文件。 单实例数据库的结构如图2.3所示。 图2.3 单实例数据库的结构 在RAC集群数据库中,每个数据库实例都具有数据库高速缓存等几种内存结构,以及SMON等后台进程,这一点与单实例数据库是相同的。然而,多个实例需要同时访问数据库中的数据,这就要求RAC保证数据的一致性。RAC通过“缓存融合”(Cache Fusion)技术来保证数据在多个实例之间的一致性。 利用“缓存融合”技术,RAC把每个数据库实例中的数据库高速缓存,在逻辑上虚拟为一个大的缓存,每个数据库实例在处理数据时,就好像是处于自己的缓存中一样。在每个数据库实例中还有另外两个后台进程GCS(Global Cache Service)和GES(Global Enqueue
23 / 47
Service),用来维护每个数据文件的状态,以及那些已经被读到数据库高速缓存中的数据块的状态,这些状态信息记录在一个称为GRD(Global Resource Directory)的内存数据结构中。当一个数据库实例访问数据时,数据所在的数据块被读到这个实例的数据库高速缓存中,其他数据库实例将从前一个实例中得到这个数据块的映像。如果数据块的内容被修改,其他实例也将得到被修改之后的映像。由此可见,当多个数据库实例同时访问同样的数据时,数据直接在这些实例的数据库高速缓存之间传输,而不需要重复地从数据文件中读取。为了实现“缓存融合”,在不同的实例之间需要进行相互通信,这种通信是通过私有网络来完成的。 从上述内容可以看出,私有网络在整个RAC集群环境中起着非常重要的作用:一方面,Clusterware通过私有网络发送心跳信号,探测每个节点的状态;另一方面,数据库实例通过私有网络实现“缓存融合”。为了避免对私有网络的通信带来干扰,建议大家不要通过私有网络实现用户的访问。 在RAC集群环境中,GCS和GES进程表现为实例中的以下后台进程: LMON LMD LMS LCK ACMS 这些后台进程相互合作,保证了数据在多个数据库实例之间的一致性,一旦数据在一个实例中被修改,在其他实例中可以得到相同的数据。 在RAC集群环境中,由于多个节点同时访问数据库,所以数据库中的文件都存放在共享的存储设备中。由于每个实例都独立地处理自己的事务,所以每个实例都有自己的重做日志组和UNDO表空间,临时表空间和业务数据所在的表空间以及控制文件都是多个节点共享的。为了对重做日志组进行切换和归档,每个数据库实例至少需要两个重做日志组。 RAC数据库服务器的结构如图2.4所示(在图中只列出部分后台进程)。
24 / 47
图2.4 RAC数据库的结构 第3章 安装RAC之前的准备工作 实际上,安装RAC的真正难点在于安装之前的准备工作,在这个阶段需要对软件、硬件进行一系列的配置,如配置存储、网络、内核参数、创建必要的用户和用户组等。在不同的操作系统下,对软件和硬件进行配置的方法是不一样的,而安装Grid Infrastructure和Oracle数据库软件以及创建数据库的方法基本上是相同的。本章仅介绍在AIX系统中需要做哪些准备工作,附录A和附录B分别介绍了在SUN Solaris和Redhat Linux两种系统中需要做哪些准备工作。读者可以根据自己的实际情况,先阅读本章或者附录A和附录B的内容,对自己的系统进行配置,然后参阅第4章的内容,开始软件的安装。 3.1 系统需要满足什么条件 为了安装Grid Infrastructure和Oracle数据库软件并创建Oracle数据库,计算机的硬件、软件必须满足一定条件,节点之间的网络也要满足一定的条件。 3.1.1 系统需要满足的硬件条件 为了配置RAC环境,至少需要两台计算机,每台计算机的硬件配置需要满足一定的条件。在RAC环境中,每台计算机称为一个节点。表3.1列出了每个节点需要满足的硬件配置。 表3.1 每个节点需要满足的硬件配置
25 / 47
需要注意的是,所有节点的CPU主频、内存大小应该大致相当,这样当用户的访问在不同的节点间切换时,两个节点的处理能力就不会相差太大。 每个节点至少需要两个网卡,分别与两个网络相连,这两个网络应该分别与两个不同的网络交换机连接。如果两个网络连接在一台交换机,那么这台交换机就成为单点失败点,一旦它出现故障,整个RAC集群就会停止运行。 以下命令序列用于检查系统硬件是否满足安装RAC的要求(以root用户身份执行): 1. # getconf HARDWARE_BITMODE 检查硬件体系结构 2. # lsattr -EH -l sys0 -a realmem 检查物理内存大小 3. # lsps -a 检查SWAP空间的大小 4. # df -m /home 以MB为单位查看/home文件系统的空间使用情况 5. # df -m /tmp 以MB为单位查看/tmp文件系统的空间使用情况 6. # lsdev -C -c if 列出系统中的所有网卡 7. # lsdev -C | grep scsi 列出系统中的SCSI卡 8. # lsdev -C | grep ssa 列出系统中的SSA卡 9. # lsdev -C | grep fc 列出系统中的光纤卡 注意:如果使用SCSI接口的外部存储设备,需要修改SCSI卡的ID。外部存储设备中的每块硬盘都有一个唯一的SCSI ID,每块SCSI卡也有一个ID,默认值为7。在连接外部存储设备之前,应该将两个节点中的SCSI卡的ID改为不同的值,并且不能与外部存储设备中任何一块硬盘的SCSI ID相同。 3.1.2 系统需要满足的软件条件 系统需要满足的软件条件主要包括操作系统版本、补丁级别、内核参数的设置、网络、用户和用户组等。表3.2列出了安装RAC所需要的操作系统环境。
26 / 47
表3.2 安装RAC所需要的操作系统环境 注意:为了通过SSH在两个节点间建立对等关系,需要在每个节点上安装以下软件: bash openssl openssh 其中,第一个软件位于IBM提供的AIX Toolbox for Linux光盘上,后两个软件可以在IBM官方网站上下载,或者从AIX Expansion光盘中获得。 另外,还需要对操作系统的一些内核参数进行调整。表3.3列出了需要调整的内核参数以及推荐值。 表3.3 安装RAC所需要调整的操作系统内核参数 为了在AIX中安装RAC,还需要在操作系统中创建一些用户组和用户。表3.4和表3.5分别列出了所需的用户组和用户。 表3.4 安装RAC所需要创建的用户组
27 / 47
表3.5 安装RAC所需要创建的用户 针对grid用户和oracle用户,我们还需要分别设置它们在SHELL中对资源的使用情况,如对CPU、内存、数据段等。为了保证数据库能够运行,需要这些资源的限制设置为-1,即没有限制,或者设置为Oracle推荐的值。表3.6列出了需要设置的SHELL资源限制。 表3.6 针对oracle用户和grid用户需要设置的SHELL资源限制 一般来说,为了安装RAC并创建集群数据库,首先以root用户登录系统,创建上述用户组和用户,然后以grid用户登录系统,安装Grid Infrastructure软件,并且创建ASM实例和ASM磁盘组,最后以oracle用户登录系统,安装Oracle数据库软件,并且创建数据库。以后,对ASM实例和ASM磁盘组的管理工作,都以grid用户身份完成,而对数据库的所有管理工作,都是以oracle用户的身份来完成的。为了简化安装和管理工作,我们可以把oracle用户和grid用户合二为一,在系统中只创建oracle用户,这个用户同时属于上述所有用户组,以后对所有Oracle产品的安装和配置工作,都以这个用户身份来完成。 以下命令序列用于检查系统的软件环境: 1. # oslevel -s 检查操作系统版本以及补丁级别 2. # getconf KERNEL_BITMODE 检查内核位数
28 / 47
3. # lslpp -l bos.adt.base bos.adt.lib bos.adt.libm 4. bos.perf.perfstat bos.perf.libperfstat 5. bos.perf.proctools 检查指定的软件是否已经安装 6. # lsattr -EH -l sys0 -a ncargs 检查内核参数ncargs的值 7. # lsattr -EH -l sys0 -a maxuproc 检查内核参数maxuproc的值 8. # lsattr -EH -l aio0 -a maxreqs 在AIX 5.3中检查内核参数maxreqs的值 9. # ioo -o aio_maxreqs 在AIX 6.1中检查内核参数maxreqs的值 10. 3.1.3 节点间的网络需要满足什么条件 11. 在RAC环境中需要两种网络,一种是公共网络,另一种是私有网络。其中,公共网络用于提供客户端的访问,而私有网络用于节点间的通信,比如每个节点通过私有网络探测其他节点的状态,两个数据库实例通过私有网络对事务进行协调等。 12. 对于公共网络的要求是:必须支持TCP协议,而且必须使用每个节点上名称相同的网卡,比如在所有节点上都使用en0,而不能在一个节点上使用en0,在另外一个节点上使用en1。这些网卡的IP地址必须属于同一个子网。 13. 对于私有网络的要求是:必须支持UDP协议,尽量使用每个节点上名称相同的网卡,节点之间需要通过网络交换机相连,不能使用TOKEN-RING网络,也不能使用直线连接两个节点,这些网卡的IP地址应该属于同一个子网。RAC中的所有节点都需要通过私有网络连接在一起。私有网络应该只用于节点间的通信,而不应该有其他的用途。私有网络在物理上也应该与其他网络分开。 14. 图3.1表示RAC中的两种网络。 (点击查看大图)图3.1 RAC中的公共网络和私有网络
29 / 47
15. 在RAC环境的网络中需要以下几种IP地址: 16. 公共IP地址:这个IP地址属于公共网络,每个节点都需要一个公共IP地址,而且需要为每个公共IP地址指定一个主机名,这个主机名一般就是节点本身的主机名。主机名和IP地址之间的对应关系必须记录在一个DNS中,或者记录在所有节点的/etc/hosts文件中。 17. 私有IP地址:这个IP地址属于私有网络,每个节点都需要一个私有IP地址,每个私有IP地址也需要一个主机名。私有IP地址与公共IP地址应该属于不同的子网。私有IP地址与主机名的对应关系应该记录在每个节点的/etc/hosts文件中,而不应该记录在DNS中,因为一旦DNS不可用,所有节点将无法通过私有网络进行通信,这将导致RAC停止工作。 18. VIP:即Virtual IP,它的功能是提供客户端的访问,客户端应用程序通过VIP访问其中一个节点上的数据库实例。每个节点都需要一个VIP,对于VIP的要求是:它必须与公共网络属于同一个子网。每个VIP也需要一个对应的主机名,而且对客户端来说,这个主机名应该能够被解析为VIP。 19. SCAN:即Single Client Access Name。SCAN是一个代表IP地址的名称,不过这个名称并不是对应一个节点的IP地址,而是对应一个集群。这个名称是面向客户端的,客户端应用程序也可以通过SCAN访问数据库。这个地址必须与公共网络属于同一个子网。对客户端应用程序来说,这个名称应该能够被解析为对应的IP地址。 20. 虽然客户端可以通过VIP或者SCAN访问集群数据库,但是它们的工作机制是不一样的。以前版本的RAC用的是VIP,而在Oracle RAC 11g(更准确地说,应该是11.2版本)中用的是SCAN。 21. 如果使用VIP,那么在Clusterware的所有服务启动以后,在每个节点中将产生一个额外的IP地址,即VIP。VIP一般位于公共网络的网卡上,这时在公共网卡上将有两个IP地址。客户端应用程序通过VIP连接其中一个节点,通过这个节点上的数据库实例来访问数据库。 22. 在RAC环境中,我们希望客户端的访问能够均匀地分布在各个节点上,这样就能够在节点之间实现负载均衡。如果客户端每次通过一个固定的VIP,连接到一个固定的节点,显然无法实现节点之间的负载均衡。幸运的是,在许多客户端应用程序中可以进行配置,使用户的请求能够轮流发送到不同的节点上,也就是说,多个节点之间的负载均衡是借助客户端应用程序提供的功能来实现的。例如,在Weblogic中
30 / 47
创建JDBC数据源时,可以同时指定多个VIP,这样就可以把用户的请求轮流发送到不同节点的实例上。图3.2表示VIP的用法。 (点击查看大图)图3.2 客户端通过VIP访问数据库 23. 从图3.2可以看出,RAC本身并不能实现负载均衡,客户端应用程序需要主动地把请求轮流发送到各个节点。而且如果集群中的节点增加或减少,在客户端需要重新进行配置。 24. 通过使用SCAN,RAC能够真正实现负载均衡。在Clusterware的所有服务启动以后,在集群节点中还将产生一个额外的IP地址,即SCAN,而且运行一个SCAN监听器,这个监听器负责监听客户端的用户请求。客户端的请求都发送到SCAN监听器,SCAN地址并不代表任何一个节点,而是代表一个集群。当SCAN监听器监听到客户端的请求后,将这些请求轮流转发到各个节点,监听器仍然通过VIP与每个节点进行通信。图3.3表示SCAN的使用方法。
31 / 47
(点击查看大图)图3.3 客户端通过SCAN访问数据库 25. 使用SCAN的好处是显而易见的。首先,SCAN监听器将用户请求轮流转发到各个节点,从而实现了真正的负载均衡。其次,各个节点的VIP都注册在SCAN监听器中,无论在集群中增加节点还是减少节点,SCAN监听器都能把用户请求轮流转发到各个可用的节点,在客户端应用程序中只要指定SCAN即可。 26. 为了保证SCAN的可用性,Oracle建议将SCAN映射为三个,至少映射为一个IP地址,并将这些IP地址记录在DNS中,客户端应用程序应该能够通过DNS把SCAN解析为对应的IP地址。在客户端应用程序中,只要指定SCAN的名称即可,而不需要指定它对应的IP地址。 27. 在安装RAC之前,需要为每个节点分配一个公共IP地址、一个私有IP地址和一个VIP,需要为整个RAC集群指定一个到三个SCAN地址,还需要为每个IP地址指定一个主机名,即实现IP地址的名称解析。地址分配的方法有两种:一种是利用DHCP服务自动分配,另一种是手工指定。IP地址名称解析的方法有三种:利用每个节点的/etc/hosts文件、利用DNS服务,以及利用Oracle提供的GNS服务。在本书介绍的例子中,四种地址的分配都采用手工指定的方法,SCAN的名称解析方法采用DNS,其余IP地址都记录在每个节点的/etc/hosts文件中。 28. 3.1.4 存储设备需要满足什么条件 29. 存储设备的配置是一项复杂的工作,因为在安装RAC的过程中,要多次用到存储设备,而且在安装的不同阶段,使用存储设备的方式是不同的,在不同操作系统中,配置设备的方法也是不一样的。所以,在安装RAC之前,应该先对存储设备的使用进行详细的规划。 30. 总的来说,对存储设备的使用方法有以下几种: 31. 本地文件系统。 32. 集群文件系统:如AIX系统中的GPFS、Linux系统中的OCFS。 33. ASM(Automatic Storage Management)。 34. ACFS(ASM Cluster File System)。 35. NFS。
32 / 47
36. 一般来说,Grid Infrastructure软件和Oracle数据库软件可以存放在每个节点的本地文件系统中,而共享信息必须存放在外部存储设备上,多个节点需要同时访问这些信息。 37. 从Oracle 11.2开始,完全取消了对裸设备的支持,而且减弱了对第三方集群文件系统的支持。目前Oracle强力推荐的存储方式是ASM和ACFS,其中ASM是Oracle提供的逻辑卷管理器,利用ASM技术,把多个磁盘组织在一起,构成一个磁盘组,RAC中的共享数据都存储在ASM磁盘组中。而ACFS是在ASM磁盘组中创建的集群文件系统,尽管这是刚刚出现的一种文件系统,目前还没有太大的用途,但是我们有理由相信,Oracle公司将对这种技术进行进一步的研究,使它能够代替其他的集群文件系统。 38. 表3.7列出了在RAC安装的各个阶段,可以使用的存储方式。 39. 表3.7 Oracle RAC所支持的存储方式 40. 在安装RAC的过程中,读者可以根据实际情况,选择可用的任何存储方式。我们建议这样使用存储设备:把Grid Infrastructure软件和Oracle数据库软件存储在每个节点的本地文件系统中,而把OCR和Voting信息以及数据库文件都存放在ASM磁盘组中。 3.1.5 节点的时钟需要满足什么条件 RAC集群在运行的过程中,对各个节点的时钟要求是相差越小越好,这就要求对各节点的时间进行同步。RAC可以利用两种方法对时间进行同步,一是利用操作系统提供的NTP服务;二是利用Oracle提供的集群时间同步服务。 由于NTP服务需要通过网络与一个外部时间源联系,以获取精确时间,出于安全考虑,许多服务器并不具备这种条件。Oracle提供的集群时间同步服务并没有这样的要求,它只保证各个节点之间的时间是同步的。 在默认情况下,Oracle提供的集群时间同步服务将自动启动,它对应一个进程ctssd。如果检测到操作系统中的NTP服务没有启动,进程ctssd便主动对各个节点间的时间进行同
33 / 47
步。为了使用Oracle的集群时间同步服务,需要将NTP服务关闭。以下命令序列用于关闭操作系统中的NTP服务: 1. # lssrc -s xntpd 查看NTP服务的状态 2. # stopsrc -s xntpd 关闭NTP服务 为了保证在操作系统重新启动时,NTP服务不会随之启动,需要将文件/etc/rc.tcpip中的下面一行内容: 1. start /usr/sbin/xntpd "$src_running" 改为下面一行: 1. start /usr/sbin/xntpd "$src_running" "-x" 在Grid Infrastructure软件被安装以后,要以安装者的身份登录系统,查看时间同步服务是否处于活动状态: 1. $ crsctl stat resource ora.ctssd -t -init 3.2 root用户需要完成的工作 root用户的工作主要涉及在操作系统中所做的配置,如:创建用户和用户组,配置内核参数,配置存储设备,配置网络,安装必要的系统软件,创建必要的目录,指定目录权限等。本节所介绍的工作在每个节点上都需要进行。 3.2.1 如何调整操作系统 如果硬件体系结构、内核位数或者内存大小不满足安装RAC的要求,RAC将无法安装。如果文件系统大小或SWAP空间大小不满足要求,则可以动态扩展,其条件是要有足够的硬盘空间。例如: 1. # chps -s 10 hd6 将SWAP空间hd6扩展10个逻辑分区 2. # chfs -a size=+5G /home 为文件系统/home扩展5GB的存储空间 如果发现某个系统软件没有安装,可以利用installp命令或者smit工具进行安装。例如: 1. # installp -d /mnt/installp/ppc -ac bos.adt.lib 以下命令用于调整内核参数(参数值为Oracle推荐值): 1. # chdev -l sys0 -a ncargs=128 2. # chdev -l sys0 -a maxuproc=16384 3. # chdev -P -l aio0 -a maxreqs=65536 4. 在AIX 5.3中设置内核参数maxreqs的值 5. # ioo -o aio_maxreqs=65536
34 / 47
6. 在AIX 6.1中设置内核参数maxreqs的值 以下命令用于对操作系统的虚拟内存进行调整: 1. # vmo -p -o minperm%=3 2. # vmo -p -o maxperm%=90 3. # vmo -p -o maxclient%=90 4. # vmo -p -o lru_file_repage=0 5. # vmo -p -o strict_maxclient=1 6. # vmo -p -o strict_maxperm=0 另外,还需要对操作系统的一些网络参数进行调整。调整网络参数的命令是no,这条命令根据操作系统的版本不同而有点差别。在执行这条命令之前,首先通过下面的命令查看sys0设备的pre520tune属性: 1. # lsattr -E -l sys0 -a pre520tune 如果上述命令的执行结果为: 1. pre520tune enable Pre-520 tuning compatibility mode True 那么需要将以下命令加入文件/etc/rc.net: 1. /usr/sbin/no -o udp_sendspace=65536 2. /usr/sbin/no -o udp_recvspace=655360 3. /usr/sbin/no -o tcp_sendspace=65536 4. /usr/sbin/no -o tcp_recvspace=65536 5. /usr/sbin/no -o rfc1323=1 6. /usr/sbin/no -o sb_max=1310720 7. /usr/sbin/no -o ipqmaxlen=512 如果上述命令的执行结果为: 1. pre520tune disable Pre-520 tuning compatibility mode True 那么在操作系统的命令提示符下,执行下面的命令对网络参数进行调整: 1. /usr/sbin/no -r -o ipqmaxlen=512 2. /usr/sbin/no -p -o udp_sendspace=65536 3. /usr/sbin/no -p -o udp_recvspace=655360 4. /usr/sbin/no -p -o tcp_sendspace=65536 5. /usr/sbin/no -p -o tcp_recvspace=65536 6. /usr/sbin/no -p -o rfc1323=1 7. /usr/sbin/no -p -o sb_max=1310720
35 / 47
在对网络参数进行调整之后,需要重新启动操作系统,才能使这些参数值生效。 3.2.2 如何创建用户和用户组 在安装RAC之前,需要在系统中创建若干用户组和用户。需要注意的是,因为需要在各个节点之间配置用户的对等关系,所以必须保证这些用户的名称及UID在各个节点之间是相同的,同样,要保证用户组的名称及GID在各个节点之间是相同的。以下命令序列用于创建必要的用户和用户组,并为用户指定口令: 1. # mkgroup id=500 oinstall 2. # mkgroup id=501 dba 3. # mkgroup id=502 asmadmin 4. # mkgroup id=503 asmdba 5. # mkuser id=600 pgrp=oinstall groups=dba,asmdba oracle 6. # passwd oracle 7. # mkuser id=601 pgrp=oinstall groups=asmadmin,asmdba grid 8. # passwd grid 如果希望以oracle用户完成所有的安装、配置任务,那么创建这个用户的命令为: 1. # mkuser id=600 pgrp=oinstall groups=dba,asmadmin,asmdba oracle 在每个节点上都重复执行上面的命令,在不同的节点上,这些用户和用户组的名称及ID都是相同的。如果在任何一个节点上发生UID或GID冲突的情况,那么在所有节点上都需要重新选择另外一个UID或GID。 为了对grid用户和oracle用户在SHELL中使用的资源进行限制,可以执行以下命令,按照表3.6中的推荐值对两个用户分别进行设置: 1. smit chuser 或者可以直接修改文件/etc/security/limits,在该文件中以下面的格式分别对这两个用户和root用户进行设置: 1. default: 2. fsize = -1 3. fsize_hard = -1 4. core = 2097151 5. cpu = -1 6. data = 262144 7. rss = -1 8. stack = 65536 9. nofiles = 2000
36 / 47
10. nofiles_hard = 65536 另外还需要为grid和oracle用户设置一些与RAC有关的属性。例如: 1. # chuser capabilities=CAP_NUMA_ATTACH,CAP_BYPASS_ 2. RAC_VMM,CAP_PROPAGATE grid 3. # chuser capabilities=CAP_NUMA_ATTACH,CAP_BYPASS 4. _RAC_VMM,CAP_PROPAGATE oracle 3.2.3 如何配置存储设备 在安装RAC的过程中,读者可以根据实际情况,以不同的方式使用存储设备。如果使用本地文件系统,那么需要在每个节点上创建相同的目录,而且保证软件的安装者对这些目录有写权限。一般来说,以grid用户安装Grid Infrastructure软件,以oracle用户安装Oracle数据库软件。如果以单一用户安装这两种软件,那么这些目录对这个用户都必须是可写的。以下命令用于创建必要的目录: 1. # mkdir -p /u01/app 2. # mkdir /u01/base 3. # mkdir /u01/app/oracle 4. # mkdir /u01/app/grid 5. # chown -R oracle:oinstall /u01 6. # chmod -R ug+w /u01 如果使用NFS,那么需要配置NFS服务,在NFS服务器中设置一个共享目录,然后将这个共享目录MOUNT到每个节点的名称相同的目录下,并保证软件的安装者对这些目录有写权限。 如果使用GPFS,那么需要在外部存储设备上创建这种类型的文件系统,然后将这个文件系统MOUNT到每个节点的名称相同的目录下,并保证软件的安装者对这些目录有写权限。 如果使用ASM,现在要做的工作是,指定ASM磁盘组中所要包含的磁盘,并保证软件的安装者对这些磁盘有写权限。在安装Grid Infrastructure软件时,将创建ASM实例,同时创建一个ASM磁盘组。假设希望把外部存储设备中的两块硬盘hdisk5和hdisk6作为ASM磁盘使用,那么需要对它们设置权限,例如: 1. # chown grid: asmadmin /dev/rhdisk5 2. # chown grid: asmadmin /dev/rhdisk6 3. # chmod 660 /dev/rhdisk5 4. # chmod 660 /dev/rhdisk6
37 / 47
如果Grid Infrastructure软件是以oracle用户身份安装的,那么上述命令中的前两条需要做相应的修改,例如: 1. chown oracle: asmadmin /dev/rhdisk5 2. chown oracle: asmadmin /dev/rhdisk6 注意:在ASM磁盘组中使用的磁盘名称是它的字符设备名称,如rhdisk5,而不是它的块设备名称。 需要注意的是,外部存储设备中的同一块硬盘,在不同的节点中名称可能是不一样的,如同一块硬盘,在第一个节点中的名称是hdisk5,在第二个节点中的名称可能是hdisk4。虽然ASM实例能够正确识别出这样的硬盘,但这种情况在一定程度上可能对管理员造成困惑。不管怎样,这块硬盘有一个属性在不同节点中是相同的,那就是它的PVID(即每个硬盘在系统中的ID)。通过操作系统中的lspv命令可以查看硬盘的PVID,例如: 1. # lspv 2. hdisk0 0000b37fd87e1f15 rootvg active 3. hdisk1 0000b37f10d71a65 None 4. hdisk2 0000b37f10c7c9a1 None 5. hdisk3 0000b37f9bbd33f9 None 6. hdisk4 005b31af8f0b79e0 None 7. hdisk5 005b31af8f0b7ffe None 如果发现某块硬盘的PVID是空的,可以通过下面的命令产生这个硬盘的PVID。例如: 1. # chdev -l hdisk4 -a pv=yes 需要注意的是,通过PVID虽然可以在不同节点上确认同一块硬盘,但是在安装Grid Infrastructure软件之前,应该在每个节点上将硬盘的这个属性值清除,否则在安装过程中可能会出现错误。在Grid Infrastructure软件安装之后,切记不要再为硬盘产生PVID,否则将会把硬盘中的数据破坏。以下命令用于清除硬盘的PVID: 1. # chdev -l hdisk4 -a pv=clear 有些型号的存储设备具有reserve_lock或者reserve_policy属性,这两个属性将阻止多个节点对存储设备进行并行读写。在安装Grid Infrastructure软件之前,应该检查共享存储设备的属性,并对reserve_lock或者reserve_policy属性进行修改,将reserve_lock属性值改为no,将reserve_policy属性值改为no_reserve。例如,下面的命令用于查看硬盘hdisk3是否具有这两个属性: 1. # lsattr -EH -l hdisk3 |grep reserve_ 2. reserve_lock yes RESERVE device on open True
38 / 47
下面的命令用于修改硬盘的属性(每个硬盘最多具有其中一个属性): 1. # chdev -l hdisk3 -a reserve_lock=no 2. # chdev -l hdisk3 -a reserve_policy=no_reserve 在这里再为大家介绍一个技巧。如果两个节点中的硬盘数量不同,那么共享存储设备中的同一块硬盘在两个节点中将表现为不同的名称。虽然通过硬盘的PVID可以识别这些硬盘,但是很多工程师还是希望这些硬盘具有相同的名称。例如,在两个节点中有以下几块硬盘(在每个节点上通过执行lspv命令可以获得这些信息): 从上面的对应关系可以看出,每个节点的最后三块硬盘是位于共享存储设备中的共享硬盘,每块硬盘在两个节点中的名称虽然不同,但是它们的PVID是相同的。 如果希望这些硬盘具有相同的名称,先在节点2的操作系统中删除这些位于共享存储设备中的硬盘。例如: 1. # rmdev -l hdisk1 -d 2. # rmdev -l hdisk2 -d 3. # rmdev -l hdisk3 -d 然后在这个节点上增加两个并不存在的硬盘,这两个硬盘虽然不存在,但是它们将各自占用一个名称,而且它们的状态永远都是“defined”。由于硬盘的名称是按顺序编号的,所以这两个硬盘的名称分别是hdisk1和hdisk2。下面的命令用于在操作系统中添加硬盘: 1. # mkdev -d -c disk -s scsi -t 2200mb -p scsi0 -w 5,0 2. # mkdev -d -c disk -s scsi -t 2200mb -p scsi0 -w 6,0 这两个硬盘分别占用了SCSI卡的两个接口5和6。如果在这两个接口上连接了其他设备,那么上述两条命令是不能成功执行的。 最后在这个节点的操作系统中执行cfgmgr命令,重新识别所有的硬件设备。然后在两个节点上分别执行lspv命令,检查所有的硬盘设备,结果如下: 1. hdisk0 0000b37fd87e1f15 hdisk0 005b31af320c0cf5
39 / 47
2. hdisk1 0000b37f10d71a65 hdisk1 3. hdisk2 0000b37f10c7c9a1 hdisk2 4. hdisk3 0000b37fabbd33f9 hdisk3 0000b37f9bbd33f9 5. hdisk4 005b31af8f0b79e0 hdisk4 005b31af8f0b79e0 6. hdisk5 005b31af8f0b7ffe hdisk5 005b31af8f0b7ffe 节点1中的硬盘及其PVID 节点2中的硬盘及其PVID 3.2.4 如何配置网络 在RAC集群中的每个节点上需要配置三种IP地址,即公共IP地址、私有IP地址和VIP。另外,在整个集群内还要配置SCAN。表3.8列出的IP地址是在一个实际集群环境中所使用的例子。 表3.8 IP地址的规划 在安装RAC之前,应该对网络进行详细的规划,如:选择公共网络和私有网络的子网,选择连接各个节点的交换机,并在每个节点上选择合适的网卡作为公共网卡和私有网卡,为其指定主机名称和IP地址,最后还要选择适当的域名解析方法,对这些IP地址进行解析。VIP和SCAN所代表的IP地址是不需要指定到某个网卡的,随着Clusterware中相关服务的启动,这些地址将自动被指定到各个节点的公共网卡上。 在本书介绍的RAC中,所有的IP地址都是手工指定的。其中,公共IP地址和私有IP地址都记录在每个节点的/etc/hosts文件中,通过这个文件进行解析,而VIP和SCAN都通过DNS进行解析。
40 / 47
为节点指定主机名的方法有两种,即通过smit工具,或者chdev命令。例如: 1. # smit hostname 2. # chdev -l inet0 -a hostname="server1" 为节点修改网卡IP地址的方法也有两种,即通过smit工具,或者chdev命令。例如: 1. # smit mktcpip 2. # chdev -l en0 -a netaddr="192.168.1.99" -a netmask="255.255.255.0" 3.3 oracle用户需要完成的工作 本节介绍的内容适用于所有的软件安装者。如果以grid用户安装Grid Infrastructure软件,以oracle用户安装Oracle数据库软件,那么这两个用户都需要完成本节所介绍的配置任务。 3.3.1 如何设置环境变量 oracle用户的工作主要涉及配置自己的环境变量、配置对等关系、安装RAC软件、管理数据库等。以oracle用户登录系统,编辑主目录下的文件.dtprofile,在该文件中设置以下环境变量: 1. ORACLE_BASE=/u01/base 2. ORACLE_HOME=/u01/app/oracle 3. DISPLAY=127.0.0.1:0.0 4. PATH=$PATH:$ORACLE_HOME/bin 5. export ORACLE_BASE ORACLE_HOME DISPLAY PATH 为了使环境变量生效,用户需要重新登录系统。通过下面的方式,可以检查各个变量的设置是否正确: 1. echo $ORACLE_HOME 其中,环境变量ORACLE_BASE用于设置RAC软件安装的顶层目录,而环境变量ORACLE_HOME用于指定RAC软件的安装目录。如果oracle用户在本机登录,变量DISPLAY指定本机的IP地址即可,如果用户从PC中以图形方式远程登录,那么应该将变量DISPLAY的值指定为PC的IP地址。例如: 1. DISPLAY=192.168.1.100:0.0 需要注意的是,对于软件的安装目录有这样的要求:Grid Infrastructure软件和Oracle数据库软件不能安装在相同的目录下。如果以两个不同用户安装这两个软件,那么分别将两个用户的环境变量ORACLE_HOME设置为两个软件的安装目录即可。如果以oracle用户安装这两种软件,那么需要将环境变量ORACLE_HOME和PATH的值修改两次。例如,在安装Grid Infrastructure软件之前,这两个变量的设置如下:
41 / 47
1. ORACLE_HOME=/u01/app/grid 2. PATH=$PATH:$ORACLE_HOME/bin 在安装Oracle数据库软件之前,这两个变量应该修改为以下形式: 1. ORACLE_HOME=/u01/app/oracle 2. PATH=$PATH: /u01/app/grid/bin:$ORACLE_HOME/bin 3.3.2 如何手工配置SSH(1) RAC的安装和配置过程是非常复杂的,这个过程涉及在所有节点上安装软件、创建ASM实例、创建集群数据库、对ASM磁盘组和数据库进行维护等多项复杂的任务。如果这些工作在每个节点上分别进行,不仅任务繁重,而且容易在各个节点之间造成不一致。 实际安装和管理RAC的方法是这样的:在一个节点上安装软件,这些软件将通过网络被复制到其他所有节点上;在一个节点上执行命令对RAC进行配置,然后在其他所有节点上,这些命令将被自动执行。总之,所有的安装和配置工作只在一个节点上进行,而在其他所有节点上将产生相同的结果。为此,需要在节点之间配置用户的对等关系(或者称为信任关系)。 如果在两个不同系统的同名用户之间建立了对等关系,那么任何一个用户都可以在不输入对方用户名称和口令的情况下,以对方用户的身份登录对方系统,或者执行对方系统的命令,或者在两个系统之间复制文件。在UNIX系统中,用户的对等关系可以通过r命令(即rlogin、rsh和rcp三条命令)或者SSH两种方法来建立。由于r命令存在一定的安全隐患,所以Oracle建议通过SSH建立用户间的对等关系。 SSH主要包括两条命令,即scp和ssh。当用户在一个节点上安装RAC软件时,SSH将通过scp命令,以对等用户的身份,将软件复制到其他所有节点上。当用户在一个节点上对RAC进行配置时,SSH将同时通过ssh命令,以对等用户的身份在其他所有节点上执行同样的配置工作。 为了使用SSH,需要在AIX系统中安装openssl和openssh软件,这两个软件可以从IBM网站下载。SSH软件安装以后,在系统中将运行sshd进程。通过ps命令可以查看sshd进程是否在运行。例如: 1. # ps -e | grep sshd 2. 258180 - 0:00 sshd RAC安装程序要求将scp和ssh这些命令全部复制到目录/usr/local/bin下。以root用户登录系统,创建目录/usr/local/bin,然后将这些命令复制到这个目录下。例如: 1. # mkdir -p /usr/local/bin 2. # cp /usr/bin/ssh /usr/local/bin
42 / 47
3. # cp /usr/bin/scp /usr/local/bin 4. # cp /usr/bin/ssh-add /usr/local/bin 5. # cp /usr/bin/ssh-keygen /usr/local/bin 6. # cp /usr/bin/ssh-keyscan /usr/local/bin 注意:从IBM官方网站上我们可以得到不同版本的openssh软件,虽然这些软件都可以安装到不同版本的AIX中,但是在安装RAC时会引起一些错误。因此,在下载openssh软件时,一定要注意它的版本与AIX版本是否一致。在这里,建议大家使用AIX Expansion光盘中的openssh软件,因为它们的版本是一致的。Expansion光盘不属于AIX的安装介质,而是附属于AIX的一张工具盘。 SSH是通过密钥对用户身份进行验证的。在配置用户的对等关系时,系统将为用户产生一对密钥,一个是公共密钥(简称公钥),另一个是私有密钥(简称私钥)。这对密钥是成对使用的,通过这个私钥加密的信息只能通过这个公钥解密,反过来,通过这个公钥加密的信息只能通过这个私钥解密。私钥保存在当前节点上,公钥需要传输到其他节点上。只要把当前用户的公钥从当前节点传输到其他节点上,那么他就能够以对方用户的身份登录对方系统,或者执行对方系统的命令,或者在两个系统之间复制文件,而不需要输入对方的口令。 SSH可以使用RSA和DSA两种算法对信息进行加密,用户可以选择使用任何一种算法。其中RSA是SSH 1.5中的加密算法,而DSA是在SSH 2.0中使用的默认加密算法。RSA公钥存放在文件id_rsa.pub中,私钥存放在文件id_rsa中,而DSA公钥和私钥分别存放在文件id_dsa.pub和id_dsa中,这些文件都位于用户主目录下的.ssh子目录中。 在配置用户的对等关系时,先选择其中一个节点,在这个节点上为用户产生一对密钥,然后将公钥复制到所有节点(包括当前节点)的authorized_keys文件中,以后与RAC有关的所有安装、配置工作都在这个节点上进行。如果把另外一个节点上的公钥复制到其他节点的authorized_keys文件中,那么在这个节点上也可以进行安装软件、配置RAC等工作。 需要注意的是,不要将私钥复制到任何其他节点。如果把当前节点的私钥复制到第二个节点上,那么第二个节点上的用户就能够以当前节点的用户身份登录其他节点了。包含密钥的文件,应该只对root用户和当前用户是可读的,对其他用户不可读。 在安装RAC软件之前,需要在各个节点之间为软件安装者配置对等关系。软件安装者(grid和oracle用户)在各个节点之间的名称、UID以及所属用户组的名称和GID都必须相同。如果以grid用户安装Grid Infrastructure软件,以oracle用户安装Oracle数据库软件,那么需要分别为这两个用户建立对等关系。如果以oracle用户安装这两个软件,那么只需要为oracle用户建立对等关系即可。以下命令用于检查用户的信息在各个节点中是否一致: 1. # id oracle
43 / 47
从Oracle RAC 11.2开始,我们可以通过两种方法建立用户间的对等关系,即自动方法和手工方法。如果希望通过自动方法建立用户的对等关系,那么从现在开始,以下介绍的内容都由RAC的安装程序自动完成,这无疑大大简化了RAC的安装过程。只要在系统中安装了bash、openssl和openssh软件,并且在系统中启动了sshd进程,而且软件安装者(grid或者oracle用户)的名称和id在各个节点中都是一致的,那么下面介绍的任务将在软件的安装过程中自动完成。手工配置对等关系的基本步骤是:先在一个节点上为用户产生RSA或DSA密钥,然后将公钥拷贝到authorized_keys文件中,最后将这个文件传输到其他所有节点中。 SSH是目前应用非常广泛的一种工具,它不仅是一种可以代替Telnet的远程登录工具,而且可以在两个系统之间无障碍地复制文件。SSH工具最突出的特点是安全,因为在两个系统之间交换的信息是加密的。如果读者希望了解SSH的用法,那么下面介绍的内容对读者是很有帮助的。如果用户使用的RAC版本是11.2之前的,那么必须通过下面介绍的方法对用户的对等关系进行手工配置。需要注意的是,手工配置用户对等关系的方法同样适用于Oracle RAC 11.2。 以grid或者oracle用户登录系统,分别执行一系列命令,建立对等关系。以下命令用于在用户主目录中创建子目录.ssh,并对该目录设置权限: 1. $ cd 2. $ mkdir .ssh 3. $ chmod 700 .ssh 以下命令用于在节点server1上为oracle用户产生RSA密钥: 1. $ /usr/bin/ssh-keygen -t rsa 2. Generating public/private rsa key pair. 3. Enter file in which to save the key (/home/oracle/.ssh/id_rsa): 4. Created directory '/home/oracle/.ssh'. 5. Enter passphrase (empty for no passphrase): xxxx 6. Enter same passphrase again: xxxx 7. Your identification has been saved in /home/oracle/.ssh/id_rsa. 8. Your public key has been saved in /home/oracle/.ssh/id_rsa.pub. 9. The key fingerprint is: 10. 52:17:82:33:a3:2f:12:99:b0:a0:51:29:c0:fc:3d:f7 oracle@server1 11. The key's randomart image is: 12. +--[ RSA 2048]----+ 13. |=... .. . | 14. |=o. = . . | 15. |o=.o..+. . |
44 / 47
16. |o+..oo. | 17. | . .+ S | 18. | .... E | 19. | . . | 20. | | 21. +---------------------+ 以下命令用于为该用户产生DSA密钥: 1. $ /usr/bin/ssh-keygen -t dsa 2. Generating public/private dsa key pair. 3. Enter file in which to save the key (/home/oracle/.ssh/id_dsa): 4. Enter passphrase (empty for no passphrase): xxxx 5. Enter same passphrase again: xxxx 6. Your identification has been saved in /home/oracle/.ssh/id_dsa. 7. Your public key has been saved in /home/oracle/.ssh/id_dsa.pub. 8. The key fingerprint is: 9. c6:0d:05:ae:e4:66:ea:ac:f6:ba:4e:86:69:39:56:43 oracle@server1 10. The key's randomart image is: 11. +--[ DSA 1024]---- ---------+ 12. | ... | 13. | . . | 14. | E . o | 15. | . o o o | 16. | o = S . | 17. | oo .+ . | 18. |oo=o . | 19. |oooo | 20. | o==+ | 21. +---------------------------+ 3.3.2 如何手工配置SSH(2) 密钥的存储位置都采用了默认的路径。为了保护私钥,在创建RSA密钥或者DSA密钥时,可以为私钥指定一个口令(passphrase),以后在使用私钥时都需要输入这个口令。通过指定口令,可以防止其他用户获取当前用户的私钥。 以下命令分别用于将RSA公钥和DSA公钥复制到当前节点的authorized_keys文件中,并为该文件设置权限: 1. $ cat id_rsa.pub >> authorized_keys
45 / 47
2. $ cat id_dsa.pub >> authorized_keys 3. $ chmod 600 authorized_keys 上述产生密钥的命令只需要在其中一个节点上执行。如果希望在这个节点上进行所有的安装和配置工作,那么还需要将这个节点上产生的RSA公钥或DSA公钥复制到其他节点的authorized_keys文件中。在所有节点上,authorized_keys文件都应该位于同名用户的主目录下的.ssh子目录中。例如,以下命令用于将authorized_keys文件复制到节点server2中: 1. $ scp authorized_keys server2:/home/oracle/.ssh/authorized_keys 2. The authenticity of host 'server2 (192.168.0.57)' can't be established. 3. RSA key fingerprint is e5:46:37:9c:9b:2c:29:17:06:23:c3:77:72:0c:3d:14. 4. Are you sure you want to continue connecting (yes/no)? yes 5. Warning: Permanently added 'server2,192.168.0.57' 6. (RSA) to the list of known hosts. 7. oracle@server2's password: xxxxxx 8. authorized_keys 100% 2000 2.0KB/s 00:00 由于此时还没有建立用户的对等关系,所以在执行上面的命令时,需要输入其他节点的用户口令。通过这种方法,当前节点的authorized_keys文件就可以被复制到RAC中的所有节点上了。在产生密钥的节点上,执行下面的两条命令,建立用户的对等关系(由产生密钥的用户执行): 1. $ exec /usr/bin/ssh-agent $SHELL 2. $ /usr/bin/ssh-add 其中,ssh-agent命令用于将当前SHELL作为代理,只要在当前SHELL中执行命令建立进程,都能够读当前用户的私钥。ssh-add命令的作用是将私钥读到内存中。如果在创建密钥时为私钥指定了口令,那么在执行ssh-add命令时需要输入这个口令。 为了测试用户的对等关系是否成功建立,在当前节点上,通过ssh命令,执行另外一个节点中的一条命令,这条命令是以对等用户的身份,在另外一个节点上执行的。如果执行命令时不需要输入口令,而且能够得到正确的结果,则表明这两个节点间用户的对等关系建立成功。例如,在节点server1上,通过下面的命令可以获得节点server2的系统时间: 1. $ ssh server2 date 2. Wed Jun 23 14:43:48 CDT 2010 需要注意的是,即使对当前节点,也需要进行测试。也就是说,一个节点中的用户自己也需要建立对等关系。例如,在节点server1上,执行下面的命令:
46 / 47
1. $ ssh server1 date 2. The authenticity of host 'server1 (192.168.0.56)' can't be established. 3. RSA key fingerprint is 1c:cd:b7:15:1d:32:19:31:b1:33:11:77:58:13:90:1a. 4. Are you sure you want to continue connecting (yes/no)? yes 5. Warning: Permanently added 'server1,192.168.0.56' 6. (RSA) to the list of known hosts. 7. Wed Jun 23 14:44:30 CDT 2010 在安装RAC之前,先选择其中一个节点,在这个节点上为用户创建密钥,并将密钥复制到其他所有节点上,然后按照上述方法测试用户的对等关系是否建立成功。如果测试成功,就可以在这个节点上执行安装任务了。需要注意的是,对等关系的建立是在当前节点的一个终端窗口进行的,以后所有的安装任务和管理任务都需要在这个终端窗口进行,如果离开了这个终端窗口,或者打开了另外一个终端窗口,那么需要重新执行下面两条命令,重新建立用户的对等关系: 1. $ exec /usr/bin/ssh-agent $SHELL 2. $ /usr/bin/ssh-add 在很多情况下,数据库管理员希望能够在任何一个节点上完成安装和管理RAC的工作,这时需要在每个节点上都产生密钥,并且将密钥复制到其他所有节点上。具体的做法是:先在所有节点上为用户产生密钥,并将公钥复制到每个节点自己的authorized_keys文件中。然后选择一个节点,把其他所有节点的authorized_keys文件内容复制到当前节点的authorized_keys文件中。例如: 1. $ ssh server2 cat /home/oracle/.ssh/authorized_keys >> authorized_keys 2. oracle@server2's password:xxxxxx 上述ssh命令的执行思路是:远程执行其他节点的cat命令,打开对方的authorized_keys文件,将这个文件的内容复制到当前节点的authorized_keys文件中。由于此时还没有建立用户的对等关系,所以在复制authorized_keys文件时需要输入其他节点上用户的口令。现在,在当前节点的authorized_keys文件中包含了所有节点的公钥。最后需要做的工作是,将这个authorized_keys文件再复制到其他所有节点。例如: 1. $ scp authorized_keys server2:/home/oracle/.ssh/authorized_keys 这样,在每个节点上都包含了所有节点(包括当前节点)的公钥。以后在任何一个节点上,打开一个终端窗口,并且执行下面两条命令,在这个终端窗口中就可以执行安装和管理RAC的命令了。