Oracle Real Application Clusters Administration

Stone大约 88 分钟

Oracle Real Application Clusters Administration

Introduction

Overview of Oracle RAC

集群由多台互连的计算机或服务器组成,对于最终用户和应用程序来说,这些计算机或服务器看起来就像是一台服务器。Oracle RAC(Real Application Clusters ) 能够对 Oracle 数据库进行群集,使 Oracle 数据库能够跨服务器集群运行,无需更改应用即可提供容错能力、提升性能和可扩展性。Oracle RAC 通过消除单个服务器的单点故障,为应用提供高可用性。

Oracle RAC 使用 Oracle Clusterware 作为基础架构来管理多个服务器,以便它们作为单个系统运行。Oracle Clusterware 是与 Oracle 数据库集成的集群管理解决方案。Oracle Clusterware 也是使用 Oracle RAC 的必要组件。

非集群 Oracle 数据库在 Oracle 数据库和实例之间具有一对一的关系。Oracle RAC 环境在数据库和实例之间具有一对多关系。一个 Oracle RAC 数据库最多可以有100个实例,所有实例访问一个数据库。

Oracle RAC 数据库在体系结构上与非集群 Oracle 数据库的不同之处在于,每个 Oracle RAC 数据库实例还具有:

  • 每个实例至少有一个额外的重做线程

  • 实例各自的 UNDO 表空间

与单个服务器相比,多台服务器的综合处理能力可以提供更高的吞吐量。

在 Oracle RAC 中,每个 Oracle 实例都必须在单独的服务器上运行。让多个实例访问单个数据库可防止服务器成为单点故障。

Description of Figure 1-1 follows

Overview of Oracle Clusterware for Oracle RAC

Oracle Clusterware 提供管理集群数据库所需的所有功能,包括节点成员身份、组服务、全局资源管理和高可用功能。

创建 Oracle RAC 数据库时,该数据库将与其他必需组件(如 Virtual Internet Protocol(VIP) 地址、Single Client Access Name(SCAN)、SCAN 监听器、Oracle Notification Service 和 Oracle Net 侦听器)一起注册到 Oracle Clusterware 并由其管理。这些资源在 Oracle Clusterware 启动节点时自动启动,并在发生故障时自动重启。Oracle Clusterware 守护程序运行在每个节点上。

Oracle Clusterware 管理的任何组件都称为 CRS 资源。CRS 资源可以是数据库、实例、服务、监听器、VIP 地址或应用程序进程。Oracle Clusterware 根据存储在 Oracle Cluster Registry(OCR)中的资源配置信息管理 CRS 资源。可以使用 SRVCTL 命令来管理任何 Oracle 定义的 CRS 资源。

Oracle Clusterware 独立于 Oracle 数据库安装。安装 Oracle Clusterware 后,可以在集群中的任何节点上安装 Oracle Database 或 Oracle RAC。

Oracle Clusterware 有 2 个存储组件:

  • 仲裁磁盘文件(Voting Disk Files):记录节点成员身份信息
  • 集群注册文件(Oracle Cluster Registry OCR):记录集群配置信息

这两个存储组件都必须位于所有节点都可以访问的共享存储上面。

集群中的每个节点上还有 OCR 的本地副本,称为 Oracle Local Registry(OLR),在安装 Oracle Clusterware 时创建的。OLR 默认位于 Grid_home/cdata/$HOSTNAME.olr

Overview of Oracle RAC Architecture and Processing

Understanding Cluster-Aware Storage Solutions

Oracle RAC 数据库是一个共享一切(shared everything)的数据库。Oracle RAC 环境中的所有数据文件、控制文件、SPFILE 和重做日志文件都必须在共享存储上,以便集群中所有数据库实例都可以访问这些文件。

Oracle Database 为 Oracle RAC 提供了以下文件存储选项:

  • Oracle Automatic Storage Management(Oracle ASM),Oracle 建议使用此解决方案来管理共享存储。

  • 经过认证的集群文件系统,包括 OCFS2 和 Oracle Cluster File System(OCFS for Windows)

  • 经过认证的网络文件系统(NFS)

不建议将 Oracle 软件文件存放到共享存储。

Storage OptionOCR and Voting DisksOracle Grid Infrastructure HomeOracle RAC HomeOracle RAC Database FilesOracle Recovery Files
Oracle ASMYesNoNoYesYes
Local file systemNoYesYesNoNo

从 Oracle Database 11gR2 开始,Oracle Clusterware 和 Oracle ASM 将安装到一个主目录中,该目录称为 Grid 主目录。Oracle Grid Infrastructure 包括 Oracle Clusterware 和 Oracle ASM。

About Oracle Automatic Storage Management

Oracle ASM 是一个集成的高性能卷管理器和文件系统。在Oracle Database 11gR2 中,Oracle ASM 增加了对 Oracle Clusterware OCR 和仲裁磁盘文件的支持,这也是一个称为 Oracle Automatic Storage Management Cluster File System(Oracle ACFS)的通用集群文件系统。

Oracle ASM 将存储系统中的磁盘分组到一个或多个磁盘组中。

例如,存储在 Oracle ASM 中的普通冗余磁盘组包含三个故障组(显示为三个磁盘),用于存储 Oracle Clusterware 的仲裁磁盘和 OCR 文件。由于仲裁磁盘记录哪些节点当前是集群的成员,因此双节点集群普通冗余磁盘组必须至少有三个仲裁磁盘。如果 Oracle ASM 磁盘组不包含仲裁磁盘和 OCR 文件,则普通冗余磁盘组只有两个故障组。

Description of Figure 1-1 follows

Oracle ASM 是使用一种特殊的 Oracle 实例来实现,具有系统全局区(SGA)和后台进程。Oracle ASM 实例与 Oracle Clusterware 和 Oracle Database 紧密集成。使用 Oracle ASM 进行存储的数据库实例所在服务器都有一个 Oracle ASM 实例。在 Oracle RAC 环境中,每个节点都有一个 Oracle ASM 实例,并相互通信。

Description of Figure 1-2 follows

Oracle 建议使用 Oracle ASM 存储 Oracle Clusterware 和 Oracle RAC 数据文件。

Overview of Connecting to Oracle Database Using Services and VIP Addresses

Oracle RAC 环境中的所有节点都必须连接到局域网(LAN),以使用户和应用程序能够访问数据库。应用程序应使用 Oracle 数据库服务连接到 Oracle 数据库。通过服务定义规则和特性,以控制用户和应用程序连接到数据库实例的方式。这些特性包括唯一名称、负载均衡、故障转移以及高可用性。Oracle Net 服务支持在 Oracle RAC 数据库中的所有实例之间实现应用程序连接的负载均衡。

集群除了提供用于外部应用访问的公有网络外,还需要提供一套集群服务器间互相通信的内联网络,故此时每个服务器至少需要 2 个网络接口(最好 4 个)。内联网络是连接集群中所有服务器的专用(私有)网络。内联网络必须使用只有集群中的节点可以访问的交换机(最低千兆,最好万兆)进行互联。在 Linux 和 UNIX 系统上,可以将 Oracle Clusterware 配置为使用用户数据报协议(User Datagram Protocol UDP)或可靠数据套接字(Reliable Data Socket RDS)协议。在 Windows 系统上,使用 TCP 协议。

如果某个节点发生故障,则该节点的 VIP 地址将故障转移到另一个节点。通常,VIP 地址在以下情况下会进行故障转移:

  • 运行 VIP 地址的节点出现故障

  • VIP 地址的所有接口都出现故障

  • VIP 地址的所有接口都与网络断开连接

Oracle 建议在客户端连接字符串中使用 SCAN 以便在集群活动实例之间进行负载均衡。使用 SCAN,即使集群的配置发生更改(添加或删除节点),也不必更改客户端连接。

About Oracle RAC Software Components

Oracle RAC 数据库通常有两个或多个数据库实例,每个实例都包含内存结构和后台进程。Oracle RAC 数据库具有与非集群 Oracle 数据库相同的进程和内存结构,以及 Oracle RAC 专有的进程和内存结构。

每个实例在其系统全局区域(SGA)中都有一个缓冲区缓存。Oracle RAC 环境使用缓存融合(Cache Fusion)将每个实例的缓冲区缓存逻辑组合在一起,当作单个缓存使用。

为了确保每个 Oracle RAC 数据库实例都获得满足查询或事务所需的块,Oracle RAC 实例使用了两个进程,即全局缓存服务(Global Cache Service GCS)和全局队列服务(Global Enqueue Service GES)。GCS 和 GES 使用全局资源目录(Global Resource Directory GRD)维护每个数据文件和每个缓存块的状态记录。GRD 内容分布在所有活动实例中。

在一个实例缓存数据后,同一集群数据库中的任何其他实例都可以从这个实例获取块映像,这比从磁盘读取更快。因此,Cache Fusion 会在实例之间移动当前块,而不是从磁盘重新读取块。当另一个实例需要一致的块或请求更改的块时,Cache Fusion 会直接在受影响的实例之间传输块映像。Oracle RAC 使用私有网络进行实例间通信和块传输。

About Oracle RAC Background Processes

GCS 和 GES 进程以及与 GRD 协作以实现缓存融合。Oracle RAC 进程有:

  • ACMS:确保分布式 SGA 内存全局提交或全局中止。

  • GTX0-j:全局事务进程,为 Oracle RAC 环境中的 XA 全局事务提供支持。

  • LMON:全局队列服务监视器,监视集群中的全局队列和资源,并执行全局队列恢复操作。

  • LMD:全局队列服务守护进程,管理每个实例中传入的远程资源请求。

  • LMS:全局缓存服务进程,通过在全局资源目录 (GRD) 中记录信息来维护数据文件和每个缓存块的状态。LMS 进程还控制到远程实例的消息流,管理全局数据块访问,并在不同实例的缓冲区缓存之间传输块映像。

  • LCK0:实例队列进程,管理非缓存融合资源请求。

  • RMSn: 执行 Oracle RAC 的管理任务,包括在将新实例添加到集群时创建与 Oracle RAC 相关的资源。

  • RSMN:管理远程实例上的后台从属进程创建和通信。

Overview of Automatic Workload Management

自动负载管理能够管理负载的分布,为用户和应用程序提供最佳性能。这包括为数据库连接提供最高可用性、快速故障恢复以及负载均衡。采用 Oracle RAC 的 Oracle 数据库包含许多可增强自动负载管理的功能,例如连接负载均衡、快速连接故障转移、负载均衡建议和运行时连接负载均衡。

自动负载管理包括以下组件:

High Availability Framework: Oracle RAC 高可用性框架使 Oracle 数据库能够始终将组件保持在运行状态,Oracle Clusterware 会在关键组件停止时对其进行监控并重新启动。Oracle Clusterware 和 Oracle RAC 还可以在配置更改时向客户端发出警报,使客户端能够立即对更改做出反应。

Single Client Access Name (SCAN):在 DNS 或 GNS 中定义的单个网络名称和 IP 地址,所有客户端都应使用该名称和 IP 地址访问 Oracle RAC 数据库(实际环境中可能使用 VIP)。使用 SCAN,当集群配置发生更改时,不再需要修改客户端。SCAN 还允许客户端使用 Easy Connect 连接字符串实现负载均衡和故障转移。

Load Balancing Advisory:数据库可以向应用程序提供当前服务级别的信息,应用程序可以利用此信息将连接请求定向到提供最佳服务质量的实例。Oracle 数据库已集成其 Java Database Connectivity(JDBC)和 Oracle Data Provider for .NET(ODP.NETopen in new window)连接池,以处理负载均衡信息。应用程序可以使用集成的连接池,而无需更改程序。

Services:服务是可以在 Oracle RAC 数据库中定义的实体。服务能够对数据库工作负载进行分组,并路由到最佳实例。

Server Pools:服务器池使 CRS 管理员能够创建用于定义 Oracle 集群如何分配资源的策略。Oracle RAC 基于策略管理的数据库在服务器池中运行。Oracle Clusterware 尝试在服务器池中保留所需数量的服务器,从而保留所需数量的 Oracle RAC 数据库实例。

Connection Load Balancing: Oracle Net Services 为数据库连接提供负载均衡。

Tools for Installing, Configuring, and Managing Oracle RAC

安装,配置和管理 Oracle Clusterware,Oracle ASM 和 Oracle RAC 的工具有:

  • Oracle Universal Installer (OUI):OUI 安装 Oracle Grid Infrastructure(包括 Oracle Clusterware 和 Oracle ASM) 和 Oracle Database(包括 Oracle RAC)。
  • Cluster Verification Utility (CVU):CVU 是一个命令行工具,用于验证集群组件,例如共享存储、网络配置、系统要求以及操作系统组和用户。可以在安装前和安装后分别使用 CVU 对集群环境进行检查。
  • Server Control (SRVCTL):SRVCTL 是一个命令行工具,用于管理 Oracle Cluster Registry(OCR)中定义的资源。
  • Cluster Ready Services Control (CRSCTL):CRSCTL 是一个命令行工具,用于管理 Oracle Clusterware 守护进程。守护进程包括集群同步服务(Cluster Synchronization Services CSS)、集群就绪服务(Cluster-Ready Services CRS) 和事件管理器(Event Manager EVM)。可以使用 CRSCTL 启动和停止 Oracle Clusterware,并确定 Oracle Clusterware 的当前状态。
  • Database Configuration Assistant (DBCA):DBCA 用于创建和配置 Oracle 数据库。DBCA 可以通过 OUI 启动,也可以在安装 Oracle 数据库后单独启动。可以在交互模式或非交互/静默模式下运行 DBCA。
  • Oracle Automatic Storage Management Configuration Assistant (ASMCA):ASMCA 用于安装和配置 Oracle ASM 实例、磁盘组、卷和 Oracle Automatic Storage Management Cluster File System (Oracle ACFS)。ASMCA 同时提供 GUI 和非 GUI 界面。
  • Oracle Automatic Storage Management Command Line utility (ASMCMD):ASMCMD 是一个命令行工具,用于管理 Oracle ASM 实例、Oracle ASM 磁盘组、磁盘组的文件访问控制、Oracle ASM 磁盘组中的文件和目录、磁盘组模板以及 Oracle ASM 卷。
  • Listener Control (LSNRCTL):LSNRCTL是用于管理监听的命令行工具。
  • SQL*Plus:管理数据库的命令行工具。
  • Oracle Interface Configuration Tool (OIFCFG):OIFCFG 是一个命令行工具,用于为组件分配和取消分配网络接口。
  • Oracle Cluster Registry Configuration Tool (OCRCONFIG):OCRCONFIG 是用于 OCR 管理的命令行工具。还可以使用 OCRCHECK 和 OCRDUMP 解决 OCR 的配置问题。
  • Cluster Health Monitor (CHM):CHM 检测并分析与操作系统和集群资源相关的故障,提供 Oracle Clusterware 和 Oracle RAC 问题(如节点逐出)的详细信息。

安装 Oracle Grid Infrastructure 后,使用以上工具的时候需要注意其所在的用户及 ORACLE_HOME 环境变量:

  • 如果使用 ASMCA,ASMCMD,SRVCTL,SQL*Plus 或 LSNRCTL 管理 Oracle ASM 及其监听时,需要在 Grid 用户下,并设置 ORACLE_HOME 为 Grid 软件的安装目录。
  • 如果使用 SRVCTL,SQL*Plus 或 LSNRCTL 管理 Oracle Database 及其监听时,需要在 Oracle 用户下,并设置 ORACLE_HOME 为 Oracle 软件的安装目录。

The Oracle Clusterware Stack

Oracle Clusterware 包括Oracle High Availability Services Stack(ohasd) 和 Cluster Ready Services Stack(crsd)。

The Oracle High Availability Services Stack

构成 Oracle High Availability Services Stack 的进程有:

  • Cluster Logger Service (ologgerd):从集群中的所有节点接收信息,并保留在 CHM 存储库中。此服务仅在集群中的两个节点上运行。
  • System Monitor Service (osysmond):在集群的每个节点运行,将收集到的系统信息发送给 Cluster Logger Service。
  • Grid Plug and Play (GPNPD):提供对网格即插即用配置文件的访问,并在集群的节点之间协调配置文件的更新,以确保所有节点都具有最新的配置文件。
  • Grid Interprocess Communication (GIPC):启用 Redundant Interconnect Usage 的守护进程。
  • Multicast Domain Name Service (mDNS):用于查找集群中的配置文件,以及由 GNS 来执行名称解析。
  • Oracle Grid Naming Service (GNS):处理外部 DNS 服务器发送的请求,对集群定义的名称进行解析。

The Cluster Ready Services Stack

构成 Cluster Ready Services Stack 的进程有:

  • Cluster Ready Services (CRS):用于管理集群中高可用性操作的主程序。CRS 守护进程(crsd)根据存储在 OCR 中的配置信息来管理集群资源。包括启动、停止、监视和故障转移操作。crsd 进程会在资源状态变化时生成事件。安装 Oracle RAC 后,crsd 进程会监视 Oracle 数据库实例、监听等,并在发生故障时自动重启这些组件。
  • Cluster Synchronization Services (CSS):通过控制哪些节点是集群成员以及在节点加入或离开集群时通知成员来管理集群配置。cssdagent 进程监视集群并提供 I/O Fencing。cssdagent 故障可能会导致 Oracle Clusterware 重启节点。
  • Oracle ASM:为 Oracle Clusterware 和 Oracle Database 提供磁盘管理。
  • Cluster Time Synchronization Service (CTSS):为 Oracle Clusterware 提供时间管理。
  • Event Management (EVM):发布 Oracle Clusterware 创建的事件。
  • Oracle Notification Service (ONS):用于传达 Fast Application Notification(FAN)事件的发布和订阅服务。
  • Oracle Agent (oraagent):支持特定于 Oracle 的需求和复杂的资源。在发生 FAN 事件时运行此进程。
  • Oracle Root Agent (orarootagent):一个专门的 oraagent 进程,帮助 crsd 管理 root 拥有的资源,例如网络和 Grid VIP 地址。

Cluster Synchronization Service(CSS)、Event Management(EVM) 和 Oracle Notification Services(ONS) 组件与同一集群环境中其他节点上的其他集群组件层进行通信。这些组件也是 Oracle 数据库、应用程序和 Oracle Clusterware 高可用性组件之间的主要通信链路。此外,这些后台进程监视和管理数据库操作。

与 Oracle Clusterware 组件相关的进程和服务如下表,其中 (r) 表示以 root 用户运行:

Oracle Clusterware ComponentLinux/UNIX ProcessWindows ServicesWindows Processes
CRScrsd.bin (r)OracleOHServicecrsd.exe
CSSocssd.bin, cssdmonitor, cssdagentOracleOHServicecssdagent.exe, cssdmonitor.exe ocssd.exe
CTSSoctssd.bin (r)octssd.exe
EVMevmd.bin, evmlogger.binOracleOHServiceevmd.exe
GIPCgipcd.bin
GNSgnsd (r)gnsd.exe
Grid Plug and Playgpnpd.binOracleOHServicegpnpd.exe
LOGGERologgerd.bin (r)ologgerd.exe
Master Diskmondiskmon.bin
mDNSmdnsd.binmDNSResponder.exe
Oracle agentoraagent.bin (11.2), or racgmain and racgimon (11.1)oraagent.exe
Oracle High Availability Servicesohasd.bin (r)OracleOHServiceohasd.exe
ONSonsons.exe
Oracle root agentorarootagent (r)orarootagent.exe
SYSMONosysmond.bin (r)osysmond.exe

集群启动流程如下图:

Description of Figure 1-2 follows

Installing

Planning

Installation Steps for Oracle RAC

安装 Oracle RAC 的步骤如下:

  • 选择 Oracle RAC 版本

  • 准备服务器(包括操作系统,网络,存储等)

    • 安装操作系统及相关依赖包
    • 配置网络
    • 配置共享存储
    • 创建用户组,用户及软件目录
    • 准备安装程序
  • 安装 Oracle Grid Infrastructure

  • 安装 Oracle RAC

About Oracle RAC Version

选择 Oracle 11gR2 的最后一个版本 11.2.0.4,这个版本需要在 My Oracle Supportopen in new window 下载。

具体信息如下:

序号名称用途
1p13390677_112040_Linux-x86-64_1of7.zipOracle Database
2p13390677_112040_Linux-x86-64_2of7.zipOracle Database
3p13390677_112040_Linux-x86-64_3of7.zipOracle Grid Infrastructure
4p13390677_112040_Linux-x86-64_4of7.zipOracle Database Client
5p13390677_112040_Linux-x86-64_5of7.zipOracle Gateways
6p13390677_112040_Linux-x86-64_6of7.zipOracle Examples
7p13390677_112040_Linux-x86-64_7of7.zipDeinstall
11.2.0.4.0 PATCH SET FOR ORACLE DATABASE SERVER (补丁程序集)
p13390677_112040_Linux-x86-64_1of7.zip	1.3 GB	(1395582860 字节)
MD5	1616F61789891A56EAFD40DE79F58F28
SHA-256	0B399A6593804C04B4BD65F61E73575341A49F8A273ACABA0DCDA2DFEC4979E0
SHA-1	983461D6442B0833630475EC4885278588585651
p13390677_112040_Linux-x86-64_2of7.zip	1.1 GB	(1151304589 字节)
SHA-1	2E628D8CAC5D1C6FFF15E728B1F227747BF2DED8
SHA-256	73E04957EE0BF6F3B3E6CFCF659BDF647800FE52A377FB8521BA7E3105CCC8DD
MD5	67BA1E68A4F581B305885114768443D3
p13390677_112040_Linux-x86-64_3of7.zip	1.1 GB	(1205251894 字节)
SHA-1	8C0CD2D7BB2DD73E965A90CD053828D7A52AE7E7
SHA-256	09C08AD3E1EE03DB1707F01C6221C7E3E75EC295316D0046CC5D82A65C7B928C
MD5	04CEF37991DB18F8190F7D4A19B26912
p13390677_112040_Linux-x86-64_4of7.zip	625.6 MB	(656026876 字节)
MD5	18B988B1450DDBA102D557DFF80D7ABE
SHA-1	1ACF8F785313D3C5CF631A0077416C22348B9DF8
SHA-256	88B4A4ABB57F7E94941FE21FA99F8481868BADF2E1E0749522BBA53450F880C2
p13390677_112040_Linux-x86-64_5of7.zip	571.4 MB	(599170344 字节)
SHA-1	8D68764AB38804A9B9C9E80BF5AE0F3D6C397151
SHA-256	F9C9D077549EFA10689804B3B07E3EFD56C655A4ABA51EC307114B46B8EAFC5F
MD5	A5B610B8B8B839DFF36102E2BB658DDD
p13390677_112040_Linux-x86-64_6of7.zip	465.7 MB	(488372844 字节)
MD5	2DB69CD15DB335758228D91182263C5E
SHA-1	79533E2FF40664A4640616BD559903ED616F2633
SHA-256	B2E08F605D7A4F8ECE2A15636A65C922933C7EF29F7AD8B8F71B23FE1ECBACA8
p13390677_112040_Linux-x86-64_7of7.zip	114.0 MB	(119521122 字节)
SHA-256	1CB47B7C0B437D7D25D497ED49719167A9FB8F97A434E93E4663CFA07590E2BA
MD5	CE5D4820B5CF01E70ECFB2078078EBEF
SHA-1	B23A8CED6D47664F20C116ABA9A2C77D65B2DD6D

Hardware Requirements

最小硬件需求如下:

  • 至少 1.5 GB 物理内存,最好 2 GB 以上。
  • 与物理内存相等的 Swap,如果物理内存超过 16 GB,则 Swap 为 16 GB 即可。
Available RAMSwap Space Required
Between 2 GB and 16 GBEqual to the size of RAM
More than 16 GB16 GB
  • /tmp 至少 1 GB 可用空间。
  • 所有节点的处理器架构相同。
  • 至少 5.5 GB 的 Oracle Grid Infrastructure 安装空间,至少 4 GB 的 Oracle Database 安装空间。

使用 VMware Workstation 创建 2 台虚拟机来安装 Oracle RAC,硬件配置如下:

节点内存硬盘
节点14 GB40 GB
节点24 GB40 GB

About Setting the Time on All Nodes

对于 Linux 上的 Oracle RAC,可以使用 Network Time Protocol(NTP)或 Oracle Cluster Time Synchronization Service 来同步所有节点的时间。

如果使用 NTP,则必须使用 -x 标志对其进行配置。此时 Oracle Cluster Time Synchronization 守护程序 (ctssd) 将以观察者模式启动。

如果未配置 NTP,Oracle 将配置并使用 Cluster Time Synchronization Service(CTSS),此时 ctssd 将以活动模式启动。CTSS 将集群中的第一个节点指定为主节点,然后同步集群中的所有其他节点,使其与主节点具有相同的时间。CTSS 不使用任何外部时钟进行同步。

Software Requirements

使用最常用的 Red Hat Enterprise Linuxopen in new window 这个 Linux 发行版本。

如果无法下载,可使用 CentOS 替代,可在清华镜像open in new window下载。

支持的内核版本如下:

Linux DistributionRequirements
Red Hat Enterprise Linux DistributionsRed Hat Enterprise Linux 4, Update 7, kernel 2.6.9 or later
Red Hat Enterprise Linux 5, Update 5, 2.6.18 or later
Red Hat Enterprise Linux 6, 2.6.32-71.el6.x86_64 or later
Red Hat Enterprise Linux 7, kernel 3.10.0-54.0.1.el7.x86_64 or later

使用 Red Hat Enterprise Linux 6,需要安装的依赖包如下:

ItemRequirements
Red Hat Enterprise Linux 6The following packages (or later versions) must be installed:
binutils-2.20.51.0.2-5.11.el6 (x86_64)
compat-libcap1-1.10-1 (x86_64)
compat-libstdc++-33-3.2.3-69.el6 (x86_64)
compat-libstdc++-33-3.2.3-69.el6.i686
gcc-4.4.4-13.el6 (x86_64)
gcc-c++-4.4.4-13.el6 (x86_64)
glibc-2.12-1.7.el6 (i686)
glibc-2.12-1.7.el6 (x86_64)
glibc-devel-2.12-1.7.el6 (x86_64)
glibc-devel-2.12-1.7.el6.i686
ksh
libgcc-4.4.4-13.el6 (i686)
libgcc-4.4.4-13.el6 (x86_64)
libstdc++-4.4.4-13.el6 (x86_64)
libstdc++-4.4.4-13.el6.i686
libstdc++-devel-4.4.4-13.el6 (x86_64)
libstdc++-devel-4.4.4-13.el6.i686
libaio-0.3.107-10.el6 (x86_64)
libaio-0.3.107-10.el6.i686
libaio-devel-0.3.107-10.el6 (x86_64)
libaio-devel-0.3.107-10.el6.i686
make-3.81-19.el6
sysstat-9.0.4-11.el6 (x86_64)

操作系统信息如下:

序号操作系统主机名版本swap用途
1RHELrac16.7-x86_642 GB节点1
2RHELrac26.7-x86_642 GB节点2

注意:根据 RFC 952 标准,主机名不能包含下划线("_")

Network Requirements

Network Hardware Requirements
  • 每个节点必须至少有两个网络接口:一个用于公网(处理外部业务请求),一个用于私网(处理内部集群通信)。基于高可用考虑,一般都会进行冗余配置,也就是两个公网网络接口,两个私网网络接口。公网使用网卡绑定技术进行高可用配置,私网除了使用网卡绑定技术外,还可以使用 HAIP。这里统一使用网卡绑定。
  • 如果使用 OUI 安装 Oracle Clusterware,所有节点的网络接口的名称必须相同。例如节点 1 的公网网络接口和私网网络接口分别为 eth0 和 eth1,则节点 2 的公网网络接口和私网网络接口同样分别为 eth0 和 eth1。
  • 公网网络接口必须支持 TCP/IP。
  • 私有网络接口速率至少千兆,最好万兆,支持 TCP/IP 和 UDP。使用对应速率的专用交换机相连。
  • 每个节点的私有网络接口必须位于同一子网上。
IP Address Requirements

每个节点需要配置如下 IP 地址:

  • 公网 IP 地址,配置为静态 IP 地址,与虚拟 IP 地址(VIP)同一子网。
  • 虚拟 IP 地址,配置为静态 IP 地址,与公网 IP 地址同一子网。
  • 私有 IP 地址,配置为静态 IP 地址,单独一个子网,与公网 IP 地址和虚拟 IP 地址在不同子网。
  • SCAN IP 地址,配置为静态 IP 地址,与公网 IP 地址和虚拟 IP 地址同一子网。

注意:

  • 虽然配置了 SCAN IP,但是不使用 SCAN IP来连接数据库,是因为在实际环境中,基于性能考虑,不使用 Oracle RAC 的负载均衡而只使用故障转移,避免节点之间的 GC 等待。
  • 为避免 DNS 故障导致解析失败,所有地址都配置为本地解析。
  • 集群中的任何节点的任何网络设备都不应该分配 169.254.x.x 这个网段的 IP,否则将导致集群路由被破坏,节点驱逐的故障。

具体网络规划如下:

NodeHostnameTypeIP AddressInterfaceResolved by
rac1rac1Public IP192.168.247.131bond0HOST FILE
rac1rac1-vipVirtual IP192.168.247.133bond0:1HOST FILE
rac1rac1-privPrivate IP172.16.0.11bond1HOST FILE
rac2rac2Public IP192.168.247.132bond0HOST FILE
rac2rac2-vipVirtual IP192.168.247.134bond0:1HOST FILE
rac2rac2-privPrivate IP172.16.0.12bond1HOST FILE
rac-scanSCAN IP192.168.247.135bond0:2HOST FILE

About Shared Storage

Oracle RAC 安装一般使用 Oracle ASM 作为 Oracle Clusterware 和Oracle Database 文件的共享存储。

Oracle Clusterware 组件在共享文件系统上需要以下磁盘空间:

  • 三个 Oracle Clusterware Registry(OCR)文件,每个文件 300 MB 或总共 900 MB 磁盘空间。

  • 三个仲裁磁盘文件,每个 300 MB 或总共 900 MB 磁盘空间。

共享存储规划如下:

序号用途文件系统大小名称冗余方式共享磁盘路径
1数据盘ASM20 GBDATAExternalE:\vmware\SHAREDISK
2恢复盘ASM8 GBFRAExternalE:\vmware\SHAREDISK
3仲裁盘ASM2 GBOCRExternalE:\vmware\SHAREDISK

注意:生产环境应该将仲裁盘的冗余方式设置为 Normal,需要分配 3 块磁盘,大小根据需要进行调整。

About Groups, Users and Paths

安装 Oracle Grid Infrastructure 和 Oracle RAC,必须创建以下操作系统组和用户:

  • Oracle Inventory 组(通常为 oinstall)。Oracle Inventory 组必须是 Oracle 软件安装所有者的主要组。Oracle Inventory 组的成员有权访问 Oracle Inventory 目录。此目录是服务器上所有 Oracle 软件安装的中央清单记录,以及每个安装的安装日志和跟踪文件。
  • 用于 Oracle 数据库身份验证的 OSDBA 组(通常为 dba)。OSDBA 组是一个系统权限组,其成员被授予管理 Oracle Database 的 SYSDBA 权限和管理 Oracle Clusterware 及 Oracle ASM 的 SYSASM 权限。
  • 软件所有者用户,Oracle Grid Infrastructure 软件所有者用户为 grid,Oracle RAC 软件所有者用户为 oracle。

如果需要对管理权限进行精细控制,可以创建多个操作系统组:

  • Oracle Automatic Storage Management Group 或 OSASM 组(通常为 asmadmin)。如果要为 Oracle ASM 和 Oracle Database 管理员提供单独的管理权限组,需创建此组。OSASM 组的成员可以使用 SQL 通过操作系统身份验证以 SYSASM 的权限连接到 Oracle ASM 实例。SYSASM 权限允许挂载和卸载磁盘组以及进行其他存储管理任务。SYSASM 权限不提供对 Oracle Database 实例的访问权限。如果未创建单独的 OSASM 组,则 OSDBA 组 (dba) 是 OSASM 组。

  • ASM Database Administrator 组(通常为 asmdba)。Oracle ASM OSDBA 组的成员被授予对 Oracle ASM 管理的文件的读写访问权限。Oracle Grid Infrastructure 软件所有者(例如 grid)和 Oracle Database 软件所有者(例如 oracle)必须是此组的成员。

  • 用于 Oracle Database 的 OSOPER 组(通常为 oper)。如果希望某些操作系统用户具有一组有限的数据库管理权限(SYSOPER 权限),可创建此组。OSDBA 组的成员自动拥有 SYSOPER 授予的所有权限。

  • 用于 Oracle ASM 的 OSOPER 组(通常为 asmoper)。此组成员被授予对 SYSASM 权限子集的访问权限,例如启动和停止 Oracle ASM 实例。

注意:集群中所有节点上的组 ID 和用户 ID 必须相同。

在安装的时候需要指定 Oracle Base。对于 grid 用户和 oracle 用户,需要有各自的 Oracle Base:

  • /u01/app/grid:grid 用户的 Oracle Base,存放诊断和管理日志以及与 Oracle ASM 和 Oracle Clusterware 相关的其他日志。
  • /u01/app/oracle:oracle 用户的 Oracle Base,存放 Oracle Database 程序文件。

对于 Oracle Grid Infrastructure 安装,其程序文件目录(Oracle Home)有以下限制:

  • 不得位于 Oracle Base 目录之下,一般另外创建目录 /u01/app/11.2.0/grid
  • 不得位于安装所有者(grid 用户)的主目录中。

必须采用 u[00-99]/app 的形式,并且必须可由 oraInventory(oinstall)组的任何成员写入,OUI 才能将该路径识别为 Oracle 软件路径。Oracle Base 的 OFA 路径是 /u01/app/user,其中 user 是软件安装所有者的名称。

Oracle 建议手动创建 Oracle Grid Infrastructure 的 Oracle Home 和 Oracle Base。

组,用户及目录规划如下:

序号软件组件用户主组次要组Base_homeOracle_home
1Grid infrastructuregridoinstallasmadmin
asmdba
asmoper
dba
/u01/app/grid/u01/app/11.2.0/grid
2Oracle RACoracleoinstallasmdba
dba
oper
/u01/app/oracle/u01/app/oracle/product/11.2.0/dbhome_1

Preparing

Preparing System

(1)创建虚拟机:使用 VMWare Workstation 创建 2 个虚拟机,注意内存,磁盘以及网卡的配置。

(2)安装虚拟机:安装 2 个虚拟机,选择兼容的操作系统。

(3)修改主机名:分别修改两个节点的主机名。

#节点1
[root@bogon ~]# vim /etc/sysconfig/network
HOSTNAME=rac1
[root@bogon ~]# init 6

#节点2
[root@bogon ~]# vim /etc/sysconfig/network
HOSTNAME=rac2
[root@bogon ~]# init 6

(4)关闭防火墙:分别关闭两个节点的防火墙。

#节点1
[root@rac1 ~]# /etc/init.d/iptables stop
[root@rac1 ~]# chkconfig iptables off

#节点2
[root@rac2 ~]# /etc/init.d/iptables stop
[root@rac2 ~]# chkconfig iptables off

(5)关闭 SELinux:分别关闭两个节点的 SELinux。

修改文件 /etc/selinux/config,将 SELINUX=enforcing 修改为 SELINUX=disabled,并重启。

#节点1
[root@rac1 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[root@rac1 ~]# init 6

#节点2
[root@rac2 ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[root@rac2 ~]# init 6

(6)关闭 NetworkManager:分别关闭两个节点的 NetworkManager。

#节点1
[root@rac1 ~]# /etc/init.d/NetworkManager stop
[root@rac1 ~]# chkconfig NetworkManager off

#节点2
[root@rac2 ~]# /etc/init.d/NetworkManager stop
[root@rac2 ~]# chkconfig NetworkManager off

(7)配置 tmpfs:分别调整 tmpfs 为物理内存的 90%。

#节点1
[root@rac1 ~]# vim /etc/fstab
tmpfs                   /dev/shm                tmpfs   defaults,size=3.6G       0 0
[root@rac1 ~]# mount -o remount /dev/shm

#节点2
[root@rac2 ~]# vim /etc/fstab
tmpfs                   /dev/shm                tmpfs   defaults,size=3.6G       0 0
[root@rac2 ~]# mount -o remount /dev/shm

(8)禁用透明大页内存:分别禁用两个节点的透明大页内存。

#节点1
[root@rac1 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
[always] madvise never
[root@rac1 ~]# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
[root@rac1 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always madvise [never]
[root@rac1 ~]# vi /etc/rc.local
if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/redhat_transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
fi

#节点2
[root@rac2 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
[always] madvise never
[root@rac2 ~]# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
[root@rac2 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always madvise [never]
[root@rac2 ~]# vi /etc/rc.local
if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/redhat_transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
fi

(9)停止并禁用其他的 mDNS 软件:

#节点1
[root@rac1 ~]# /etc/rc.d/init.d/avahi-dnsconfd stop
[root@rac1 ~]# /etc/rc.d/init.d/avahi-daemon stop
[root@rac1 ~]# chkconfig avahi-dnsconfd off
[root@rac1 ~]# chkconfig avahi-daemon off

#节点2
[root@rac2 ~]# /etc/rc.d/init.d/avahi-dnsconfd stop
[root@rac2 ~]# /etc/rc.d/init.d/avahi-daemon stop
[root@rac2 ~]# chkconfig avahi-dnsconfd off
[root@rac2 ~]# chkconfig avahi-daemon off

(10)配置时间同步:

禁用 NTP 并同步时间:

#节点1
[root@rac1 ~]# /etc/init.d/ntpd stop
[root@rac1 ~]# chkconfig ntpd off
[root@rac1 ~]# mv /etc/ntp.conf /etc/ntp.conf.bak
[root@rac1 ~]# ntpdate 192.168.247.2
[root@rac1 ~]# crontab -l
*/15 * * * * /usr/sbin/ntpdate 192.168.247.2 >/dev/null 2 >&


#节点2
[root@rac2 ~]# /etc/init.d/ntpd stop
[root@rac2 ~]# chkconfig ntpd off
[root@rac2 ~]# mv /etc/ntp.conf /etc/ntp.conf.bak
[root@rac2 ~]# ntpdate 192.168.247.2
[root@rac2 ~]# crontab -l
*/15 * * * * /usr/sbin/ntpdate 192.168.247.2 >/dev/null 2 >&

Preparing Software

(1)配置YUM:分别在两个节点挂载光盘本配置本地YUM。

#节点1
[root@rac1 ~]# mount /dev/cdrom /media/
[root@rac1 ~]# cd /etc/yum.repos.d/
[root@rac1 ~]# mkdir bak
[root@rac1 ~]# mv *.repo bak/
[root@rac1 ~]# vi local.repo
[Local]
baseurl=file:///media/Server
gpgcheck=0
enabled=1
EOF
[root@rac1 ~]# yum clean all
[root@rac1 ~]# yum makecache

#节点2
[root@rac2 ~]# mount /dev/cdrom /media/
[root@rac2 ~]# cd /etc/yum.repos.d/
[root@rac2 ~]# mkdir bak
[root@rac2 ~]# mv *.repo bak/
[root@rac2 ~]# vi local.repo
[Local]
baseurl=file:///media/Server
gpgcheck=0
enabled=1
EOF
[root@rac2 ~]# yum clean all
[root@rac2 ~]# yum makecache

(2)安装依赖包:分别在两个节点安装依赖包。

#节点1
[root@rac1 ~]# yum install gcc compat-libstdc++-33 elfutils-libelf-devel gcc-c++ libaio-devel libstdc++-devel ksh libcap.so.1 –y
[root@rac1 ~]# cd /lib64
[root@rac1 lib64]# ln -s libcap.so.2.16 libcap.so.1

#节点2
[root@rac2 ~]# yum install gcc compat-libstdc++-33 elfutils-libelf-devel gcc-c++ libaio-devel libstdc++-devel ksh libcap.so.1 –y
[root@rac2 ~]# cd /lib64
[root@rac2 lib64]# ln -s libcap.so.2.16 libcap.so.1

Preparing Network

(1)节点 1 网络配置:配置网卡,网卡绑定以及地址映射。

[root@rac1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
SLAVE=yes
MASTER=bond0
HOTPLUG=no

[root@rac1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
SLAVE=yes
MASTER=bond0
USERCTL=NO
HOTPLUG=no

[root@rac1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
SLAVE=yes
MASTER=bond1
HOTPLUG=no

[root@rac1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
SLAVE=yes
MASTER=bond1
HOTPLUG=no

[root@rac1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=192.168.247.131
NETMASK=255.255.255.0
GATEWAY=192.168.247.2
ARPCHECK=no
HOTPLUG=no
BONDING_OPTS="mode=1 miimon=200"
USERCTL=NO

[root@rac1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=bond1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=172.16.0.11
NETMASK=255.255.255.0
ARPCHECK=no
HOTPLUG=no
BONDING_OPTS="mode=1 miimon=200"
USERCTL=NO

[root@rac1 ~]# tail -2 /etc/modprobe.d/dist.conf
alias bond0 binding
alias bond1 binding

[root@rac1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rac1

[root@rac1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#Public
192.168.247.131   rac1
192.168.247.132   rac2
#Virtual
192.168.247.133   rac1-vip
192.168.247.134   rac2-vip
#Private
172.16.0.11   rac1-priv
172.16.0.12   rac2-priv
#SCAN
192.168.247.135   rac-scan

#重启网络并查看工作状态
[root@rac1 ~]# /etc/init.d/network restart
[root@rac1 ~]# cat /proc/net/bonding/bond0
[root@rac1 ~]# cat /proc/net/bonding/bond1

(2)节点 2 网络配置:配置网卡,网卡绑定以及地址映射。

[root@rac2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
SLAVE=yes
MASTER=bond0
HOTPLUG=no

[root@rac2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
SLAVE=yes
MASTER=bond0
USERCTL=NO
HOTPLUG=no

[root@rac2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
SLAVE=yes
MASTER=bond1
HOTPLUG=no

[root@rac2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
SLAVE=yes
MASTER=bond1
HOTPLUG=no

[root@rac2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=192.168.247.132
NETMASK=255.255.255.0
GATEWAY=192.168.247.2
ARPCHECK=no
HOTPLUG=no
BONDING_OPTS="mode=1 miimon=200"
USERCTL=NO

[root@rac2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=bond1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=172.16.0.12
NETMASK=255.255.255.0
ARPCHECK=no
HOTPLUG=no
BONDING_OPTS="mode=1 miimon=200"
USERCTL=NO

[root@rac2 ~]# tail -2 /etc/modprobe.d/dist.conf
alias bond0 binding
alias bond1 binding

[root@rac2 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rac2

[root@rac2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#Public
192.168.247.131   rac1
192.168.247.132   rac2
#Virtual
192.168.247.133   rac1-vip
192.168.247.134   rac2-vip
#Private
172.16.0.11   rac1-priv
172.16.0.12   rac2-priv
#SCAN
192.168.247.135   rac-scan

#重启网络并查看工作状态
[root@rac2 ~]# /etc/init.d/network restart
[root@rac2 ~]# cat /proc/net/bonding/bond0
[root@rac2 ~]# cat /proc/net/bonding/bond1

Preparing Shared Storage

(1)为节点 1 添加数据盘:

在 “虚拟机设置” 页面,点击 “添加”。

image-20230123205847102

选择 “硬盘”。

image-20230123210343984

此处需要勾选 “独立”。

image-20230123210437006

选择 “创建新虚拟磁盘”。

image-20230123210524087

设置 “最大磁盘大小”,勾选 “立即分配所有磁盘空间”,选择 “将虚拟磁盘存储为单个文件”。

image-20230123210601063

指定 “文件名”

image-20230123210704409

开始创建。

image-20230123210727452

创建完成。

image-20230123210744438

选择 “高级”,指定 “虚拟设备节点”。

image-20230123210813025

(2)为节点 2 添加刚才创建的数据盘:

image-20230123205847102

image-20230123211035574

这里不要勾选 “独立”。

image-20230123211146019

选择 “使用现有虚拟磁盘”。

image-20230123211523192

指定文件名为先前创建的磁盘文件。

image-20230123211601942

指定 “虚拟设备节点” 与节点 1 的磁盘一致。

image-20230123211644976

(3)修改虚拟机配置文件:

分别为两个节点的虚拟机配置文件增加如下内容:

disk.locking = "FALSE"
scsi1.SharedBus = "Virtual"
diskLib.dataCacheMaxSize = "0" 
diskLib.dataCacheMaxReadAheadSize = "0" 
diskLib.DataCacheMinReadAheadSize = "0" 
diskLib.dataCachePageSize = "4096" 
diskLib.maxUnsyncedWrites = "0" 

(4)创建恢复盘和仲裁盘:参考数据盘,创建恢复盘和仲裁盘,不需要再更改配置文件了。

(5)创建 raw 设备:

在节点 1 上对三块共享盘进行分区:

[root@rac1 ~]# fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0007b4fb

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         536     4096000   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             536        5222    37641216   83  Linux

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/sdc: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/sdd: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

[root@rac1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x675c8c27.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 
Using default value 2610

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@rac1 ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xf8c80158.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): 
Using default value 1044

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@rac1 ~]# fdisk /dev/sdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x685927b7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261): 
Using default value 261

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@rac1 ~]# partprobe 
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
[root@rac1 ~]# fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0007b4fb

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         536     4096000   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             536        5222    37641216   83  Linux

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x675c8c27

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2610    20964793+  83  Linux

Disk /dev/sdc: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf8c80158

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1044     8385898+  83  Linux

Disk /dev/sdd: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x685927b7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         261     2096451   83  Linux

#分区结果
[root@rac1 ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   41943040 sda
   8        1     204800 sda1
   8        2    4096000 sda2
   8        3   37641216 sda3
   8       16   20971520 sdb
   8       17   20964793 sdb1
   8       32    8388608 sdc
   8       33    8385898 sdc1
   8       48    2097152 sdd
   8       49    2096451 sdd1

在节点1 上将分区映射为 raw 设备:

[root@rac1 ~]# vim /etc/udev/rules.d/60-raw.rules
# Enter raw device bindings here.
#
# An example would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
KERNEL=="raw1", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
KERNEL=="raw2", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
KERNEL=="raw3", OWNER="grid",GROUP="asmadmin", MODE="0660"

[root@rac1 ~]# ls /dev/raw/
rawctl
[root@rac1 ~]# start_udev 
Starting udev:                                             [  OK  ]
[root@rac1 ~]# ll /dev/raw/
total 0
crw-rw---- 1 grid asmadmin 162, 1 Apr  6 00:23 raw1
crw-rw---- 1 grid asmadmin 162, 2 Apr  6 00:23 raw2
crw-rw---- 1 grid asmadmin 162, 3 Apr  6 00:23 raw3
crw-rw---- 1 root disk     162, 0 Apr  6  2016 rawctl

节点 2 无需再进行分区,但需要执行 partprobe 命令使节点 2 内核识别到分区:

[root@rac2 ~]# partprobe 
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
[root@rac2 ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   41943040 sda
   8        1     204800 sda1
   8        2    4096000 sda2
   8        3   37641216 sda3
   8       16   20971520 sdb
   8       17   20964793 sdb1
   8       32    8388608 sdc
   8       33    8385898 sdc1
   8       48    2097152 sdd
   8       49    2096451 sdd1

在节点 2 上将分区映射为 raw 设备:

[root@rac2 ~]# vim /etc/udev/rules.d/60-raw.rules 
# Enter raw device bindings here.
#
# An example would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
KERNEL=="raw1", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
KERNEL=="raw2", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
KERNEL=="raw3", OWNER="grid",GROUP="asmadmin", MODE="0660"

[root@rac2 ~]# ls /dev/raw/
rawctl
[root@rac2 ~]# start_udev 
Starting udev:                                             [  OK  ]
[root@rac2 ~]# ll /dev/raw/
total 0
crw-rw---- 1 grid asmadmin 162, 1 Apr  6 00:24 raw1
crw-rw---- 1 grid asmadmin 162, 2 Apr  6 00:24 raw2
crw-rw---- 1 grid asmadmin 162, 3 Apr  6 00:24 raw3
crw-rw---- 1 root disk     162, 0 Apr  6 00:24 rawctl

Preparing Groups, Users and Paths

(1)创建脚本:

创建组,用户和目录的脚本并执行:

#节点1
[root@rac1 ~]# vim group_user_path.sh
#!/bin/bash
groupadd -g 5000 asmadmin
groupadd -g 5001 asmdba
groupadd -g 5002 asmoper
groupadd -g 6000 oinstall
groupadd -g 6001 dba
groupadd -g 6002 oper
useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba -d /home/grid -s /bin/bash -c "Grid Infrastructure Owner" grid
useradd -m -u 1101 -g oinstall -G dba,oper,asmdba -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0/grid
chown -R grid:oinstall /u01
mkdir -p /u01/app/oracle
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01
echo "123456" | passwd --stdin grid
echo "123456" | passwd --stdin oracle

[root@rac1 ~]# sh group_user_path.sh

#节点2
[root@rac1 ~]# vim group_user_path.sh
#!/bin/bash
groupadd -g 5000 asmadmin
groupadd -g 5001 asmdba
groupadd -g 5002 asmoper
groupadd -g 6000 oinstall
groupadd -g 6001 dba
groupadd -g 6002 oper
useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba -d /home/grid -s /bin/bash -c "Grid Infrastructure Owner" grid
useradd -m -u 1101 -g oinstall -G dba,oper,asmdba -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0/grid
chown -R grid:oinstall /u01
mkdir -p /u01/app/oracle
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01
echo "123456" | passwd --stdin grid
echo "123456" | passwd --stdin oracle

[root@rac1 ~]# sh group_user_path.sh

(2)配置环境变量:

grid 用户环境变量:

#节点1
[grid@rac1 ~]$ vim .bash_profile
#Grid Settings
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/11.2.0/grid
ORACLE_SID=+ASM1
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
[grid@rac1 ~]$ source .bash_profile

#节点2
[grid@rac2 ~]$ vim .bash_profile
#Grid Settings
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/11.2.0/grid
ORACLE_SID=+ASM2
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
[grid@rac2 ~]$ source .bash_profile

oracle 用户环境变量:

#节点1
[oracle@rac1 ~]$ vim .bash_profile
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_HOSTNAME=rac1; export ORACLE_HOSTNAME
ORACLE_UNQNAME=stone; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=stone1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
BASE_PATH=/usr/sbin:$PATH; export BASE_PATH
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
[oracle@rac1 ~]$ source .bash_profile

#节点2
[oracle@rac2 ~]$ vim .bash_profile
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_HOSTNAME=rac2; export ORACLE_HOSTNAME
ORACLE_UNQNAME=stone; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=stone2; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
BASE_PATH=/usr/sbin:$PATH; export BASE_PATH
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
[oracle@rac1 ~]$ source .bash_profile

(3)安装 cvuqdisk:

分别在两个节点解压 Oracle Grid Infrastructure 安装包,安装 cvuqdisk:

#节点1:
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ unzip p13390677_112040_Linux-x86-64_3of7.zip
[grid@rac1 ~]$ logout
[root@rac1 ~]# cd /home/grid/grid/rpm/
[root@rac1 rpm]# rpm -ivh cvuqdisk-1.0.9-1.rpm
Preparing...                ########################################### [100%]
Using default group oinstall to install package
   1:cvuqdisk               ########################################### [100%]

节点2:
[root@rac2 ~]# su - grid
[grid@rac2 ~]$ unzip p13390677_112040_Linux-x86-64_3of7.zip
[grid@rac2 ~]$ logout
[root@rac2 ~]# cd /home/grid/grid/rpm/
[root@rac2 rpm]# rpm -ivh cvuqdisk-1.0.9-1.rpm
Preparing...                ########################################### [100%]
Using default group oinstall to install package
   1:cvuqdisk               ########################################### [100%]

Installing Oracle Grid Infrastructure

在宿主机(IP:192.168.247.1)上启动 Xmanager Passive,在节点 1 设置 DISPLAY 环境变量,然后启动安装程序。

#节点1:
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ export DISPLAY=192.168.247.1:0.0
[grid@rac1 ~]$ cd grid/
[grid@rac1 grid]$ ./runInstaller

选择 “Skip software update”,跳过软件更新。

image-20230124113315092

选择 “Install and Configure Oracle Grid Infrastructure for a Cluster”。

image-20230124113425540

选择 “Advanced Installation”。

image-20230124113536590

选择语言为 “English”。

image-20230124113617351

指定 “Cluster Name" 和 ”SCAN Name“,以字母开头,可包含数字和连字符,不超过 15 个字符。

image-20230124113654956

点击 ”Add“,增加节点。

image-20230124114026815

点击 ”SSH Connectivity" 和 “Setup”,配置两个节点 grid 用户的 SSH 无密码连接。

image-20230124114416231

点击 “Test” 进行测试。

image-20230124114656525

自动获取到前面配置的网络。

image-20230124114737094

选择 ”Oracle ASM“。

image-20230124114807339

选择 /dev/raw/raw3 这个磁盘,创建 OCR 磁盘组,此处只能创建一个,用于 OCR 和仲裁磁盘文件。生产环境需要将 ”Redundancy“ 选择为 ”Normal“,并选择 3 个磁盘。Oracle 建议将磁盘组的分配单元(AU)设置为 4 MB。

image-20230124114907637

指定 ASM 实例用户的密码。

image-20230124115937257

image-20230124120316542

选择 ”Do not use Intelligent Platform Management Interface (IPMI)"。

image-20230124120342083

选择管理 ASM 的操作系统用户组。

image-20230124120617911

指定 ”Oracle Base“ 和 ”Software Location"。

image-20230124120702359

指定 “Inventory Directory”。

image-20230124120822979

先决条件检查后,列出检查失败项,点击 Fix&Check Again 进行修复和再次检查。

image-20230124121027946

生成修复脚本。

image-20230124121123965

运行脚本进行修复。

#节点1
[root@rac1 ~]# /tmp/CVU_11.2.0.4.0_grid/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.4.0_grid/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.4.0_grid/fixup.enable
Log file location: /tmp/CVU_11.2.0.4.0_grid/orarun.log
Setting Kernel Parameters...
The value for shmmni in response file is not greater than value of shmmni for current session. Hence not changing it.
The value for semmsl in response file is not greater than value of semmsl for current session. Hence not changing it.
The value for semmns in response file is not greater than value of semmns for current session. Hence not changing it.
The value for semmni in response file is not greater than value of semmni for current session. Hence not changing it.
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
uid=1100(grid) gid=6000(oinstall) groups=6000(oinstall),5000(asmadmin),5001(asmdba),5002(asmoper)

#节点2
[root@rac2 ~]# /tmp/CVU_11.2.0.4.0_grid/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.4.0_grid/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.4.0_grid/fixup.enable
Log file location: /tmp/CVU_11.2.0.4.0_grid/orarun.log
Setting Kernel Parameters...
The value for shmmni in response file is not greater than value of shmmni for current session. Hence not changing it.
The value for semmsl in response file is not greater than value of semmsl for current session. Hence not changing it.
The value for semmns in response file is not greater than value of semmns for current session. Hence not changing it.
The value for semmni in response file is not greater than value of semmni for current session. Hence not changing it.
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
uid=1100(grid) gid=6000(oinstall) groups=6000(oinstall),5000(asmadmin),5001(asmdba),5002(asmoper)

运行完成后,点击Ok,系统再次进行检查。

image-20230124121318397

image-20230124121636937

忽略以上问题。

image-20230124121937645

点击 “Save Response File”,保存响应文件。

image-20230124122104444

image-20230124122117261

点击 “Install”,进行安装。

image-20230124122149320

image-20230124122136532

提示执行脚本,按照步骤执行。

image-20230124122314143

执行 /u01/app/oraInventory/orainstRoot.sh 脚本:

#节点1
[root@rac1 ~]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

#节点2
[root@rac2 ~]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

执行 /u01/app/11.2.0/grid/root.sh 脚本:

#节点1
[root@rac1 ~]# /u01/app/11.2.0/grid/root.sh
Performing root user operation for Oracle 11g 

The following environment variables are set as:
    ORACLE_OWNER= grid
    ORACLE_HOME=  /u01/app/11.2.0/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
Installing Trace File Analyzer
OLR initialization - successful
  root wallet
  root wallet cert
  root cert export
  peer wallet
  profile reader wallet
  pa wallet
  peer wallet keys
  pa wallet keys
  peer cert request
  pa cert request
  peer cert
  pa cert
  peer root cert TP
  profile reader root cert TP
  pa root cert TP
  peer pa cert TP
  pa peer cert TP
  profile reader pa cert TP
  profile reader peer cert TP
  peer user cert
  pa user cert
Adding Clusterware entries to upstart
CRS-2672: Attempting to start 'ora.mdnsd' on 'rac1'
CRS-2676: Start of 'ora.mdnsd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'rac1'
CRS-2676: Start of 'ora.gpnpd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'rac1'
CRS-2672: Attempting to start 'ora.gipcd' on 'rac1'
CRS-2676: Start of 'ora.gipcd' on 'rac1' succeeded
CRS-2676: Start of 'ora.cssdmonitor' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'rac1'
CRS-2672: Attempting to start 'ora.diskmon' on 'rac1'
CRS-2676: Start of 'ora.diskmon' on 'rac1' succeeded
CRS-2676: Start of 'ora.cssd' on 'rac1' succeeded

ASM created and started successfully.

Disk Group OCR created successfully.

clscfg: -install mode specified
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4256: Updating the profile
Successful addition of voting disk 1c1ccc38f4c84f90bf3e0ef493a26c07.
Successfully replaced voting disk group with +OCR.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   1c1ccc38f4c84f90bf3e0ef493a26c07 (/dev/raw/raw3) [OCR]
Located 1 voting disk(s).
CRS-2672: Attempting to start 'ora.asm' on 'rac1'
CRS-2676: Start of 'ora.asm' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.OCR.dg' on 'rac1'
CRS-2676: Start of 'ora.OCR.dg' on 'rac1' succeeded
Configure Oracle Grid Infrastructure for a Cluster ... succeeded

#节点2
[root@rac2 ~]# /u01/app/11.2.0/grid/root.sh
Performing root user operation for Oracle 11g 

The following environment variables are set as:
    ORACLE_OWNER= grid
    ORACLE_HOME=  /u01/app/11.2.0/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
Installing Trace File Analyzer
OLR initialization - successful
Adding Clusterware entries to upstart
CRS-4402: The CSS daemon was started in exclusive mode but found an active CSS daemon on node rac1, number 1, and is terminating
An active cluster was found during exclusive startup, restarting to join the cluster
Configure Oracle Grid Infrastructure for a Cluster ... succeeded

执行完成后,点击 “Ok”。

image-20230124130010074

忽略最后的验证错误。导致这个错误的原因是在 /etc/hosts 中配置了 SCAN 的地址,尝试 ping 这个地址信息,如果可以成功,则这个错误可以忽略。

[root@rac1 ~]# ping 192.168.247.135
PING 192.168.247.135 (192.168.247.135) 56(84) bytes of data.
64 bytes from 192.168.247.135: icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from 192.168.247.135: icmp_seq=2 ttl=64 time=0.024 ms
64 bytes from 192.168.247.135: icmp_seq=3 ttl=64 time=0.026 ms
^C
--- 192.168.247.135 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2440ms
rtt min/avg/max/mdev = 0.024/0.025/0.027/0.006 ms
[root@rac1 ~]# ping rac-scan
PING rac-scan (192.168.247.135) 56(84) bytes of data.
64 bytes from rac-scan (192.168.247.135): icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from rac-scan (192.168.247.135): icmp_seq=2 ttl=64 time=0.045 ms
64 bytes from rac-scan (192.168.247.135): icmp_seq=3 ttl=64 time=0.024 ms
^C
--- rac-scan ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2613ms
rtt min/avg/max/mdev = 0.024/0.036/0.045/0.010 ms

image-20230124130148079

image-20230124130212605

image-20230124130222726

安装完成后,查看网卡信息:

#节点1
[root@rac1 ~]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:34:18:7F  
          inet addr:192.168.247.131  Bcast:192.168.247.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe34:187f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:432887 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3263990 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:90814550 (86.6 MiB)  TX bytes:4532033830 (4.2 GiB)

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:34:18:7F  
          inet addr:192.168.247.133  Bcast:192.168.247.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth0:2    Link encap:Ethernet  HWaddr 00:0C:29:34:18:7F  
          inet addr:192.168.247.135  Bcast:192.168.247.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr 00:0C:29:34:18:89  
          inet addr:172.16.0.11  Bcast:172.16.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe34:1889/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18394 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11100 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7050353 (6.7 MiB)  TX bytes:6464637 (6.1 MiB)

eth1:1    Link encap:Ethernet  HWaddr 00:0C:29:34:18:89  
          inet addr:169.254.79.136  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:11345 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11345 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:7553556 (7.2 MiB)  TX bytes:7553556 (7.2 MiB)

#节点2
[root@rac2 ~]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:81:1B:75  
          inet addr:192.168.247.132  Bcast:192.168.247.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe81:1b75/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2951098 errors:0 dropped:0 overruns:0 frame:0
          TX packets:135794 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4364502330 (4.0 GiB)  TX bytes:12461499 (11.8 MiB)

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:81:1B:75  
          inet addr:192.168.247.134  Bcast:192.168.247.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr 00:0C:29:81:1B:7F  
          inet addr:172.16.0.12  Bcast:172.16.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe81:1b7f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20222 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14903 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8860272 (8.4 MiB)  TX bytes:8624753 (8.2 MiB)

eth1:1    Link encap:Ethernet  HWaddr 00:0C:29:81:1B:7F  
          inet addr:169.254.9.250  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:5787 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5787 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2521811 (2.4 MiB)  TX bytes:2521811 (2.4 MiB)

查看后台进程:

[grid@rac1 grid]$ ps -ef|egrep -i "asm|listener"
grid     42014     1  0 19:51 ?        00:00:00 asm_pmon_+ASM1
grid     42016     1  0 19:51 ?        00:00:00 asm_psp0_+ASM1
grid     42018     1  1 19:51 ?        00:01:11 asm_vktm_+ASM1
grid     42022     1  0 19:51 ?        00:00:00 asm_gen0_+ASM1
grid     42024     1  0 19:51 ?        00:00:03 asm_diag_+ASM1
grid     42026     1  0 19:51 ?        00:00:00 asm_ping_+ASM1
grid     42028     1  0 19:51 ?        00:00:06 asm_dia0_+ASM1
grid     42030     1  0 19:51 ?        00:00:08 asm_lmon_+ASM1
grid     42032     1  0 19:51 ?        00:00:05 asm_lmd0_+ASM1
grid     42034     1  0 19:51 ?        00:00:13 asm_lms0_+ASM1
grid     42038     1  0 19:51 ?        00:00:00 asm_lmhb_+ASM1
grid     42040     1  0 19:51 ?        00:00:00 asm_mman_+ASM1
grid     42042     1  0 19:51 ?        00:00:00 asm_dbw0_+ASM1
grid     42044     1  0 19:51 ?        00:00:00 asm_lgwr_+ASM1
grid     42046     1  0 19:51 ?        00:00:00 asm_ckpt_+ASM1
grid     42048     1  0 19:51 ?        00:00:00 asm_smon_+ASM1
grid     42050     1  0 19:51 ?        00:00:01 asm_rbal_+ASM1
grid     42052     1  0 19:51 ?        00:00:00 asm_gmon_+ASM1
grid     42054     1  0 19:51 ?        00:00:00 asm_mmon_+ASM1
grid     42056     1  0 19:51 ?        00:00:00 asm_mmnl_+ASM1
grid     42058     1  0 19:51 ?        00:00:00 asm_lck0_+ASM1
grid     42108     1  0 19:51 ?        00:00:00 oracle+ASM1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
grid     42133     1  0 19:51 ?        00:00:01 oracle+ASM1_ocr (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
grid     42138     1  0 19:51 ?        00:00:00 asm_asmb_+ASM1
grid     42140     1  0 19:51 ?        00:00:00 oracle+ASM1_asmb_+asm1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
grid     42645     1  0 19:52 ?        00:00:00 oracle+ASM1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
grid     43130     1  0 19:53 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
grid     46617     1  0 20:12 ?        00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
grid     58540 53617  0 21:05 pts/0    00:00:00 egrep -i asm|listener

查看集群状态:

[grid@rac1 grid]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

查看资源状态:

[grid@rac1 grid]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
ora.gsd
               OFFLINE OFFLINE      rac1
               OFFLINE OFFLINE      rac2
ora.net1.network
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.ons
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.registry.acfs
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac1
ora.cvu
      1        ONLINE  ONLINE       rac1
ora.oc4j
      1        ONLINE  ONLINE       rac1
ora.rac1.vip
      1        ONLINE  ONLINE       rac1
ora.rac2.vip
      1        ONLINE  ONLINE       rac2
ora.scan1.vip
      1        ONLINE  ONLINE       rac1

查看集群节点:

[grid@rac1 grid]$ olsnodes -n
rac1    1
rac2    2

查看集群版本:

[grid@rac1 grid]$ crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [11.2.0.4.0]

查看集群注册文件:

[grid@rac1 grid]$ ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          3
         Total space (kbytes)     :     262120
         Used space (kbytes)      :       2744
         Available space (kbytes) :     259376
         ID                       :  760182332
         Device/File Name         :      +OCR
                                    Device/File integrity check succeeded

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

         Cluster registry integrity check succeeded

         Logical corruption check bypassed due to non-privileged user

检查 votedisk:

[grid@dbrac10 ~]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   52fa7d2361e24ff1bf64a866225383c4 (/dev/raw/raw3) [OCR]
Located 1 voting disk(s).

检查 ASM:

[grid@rac1 grid]$ srvctl config asm -a
ASM home: /u01/app/11.2.0/grid
ASM listener: LISTENER
ASM is enabled.

[grid@rac1 ~]$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.4.0 Production on Sat Jul 11 21:22:44 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +OCR/rac-cluster/asmparameterf
                                                 ile/registry.253.908412843
SQL> select path from v$asm_disk;

PATH
--------------------------------------------------------------------------------
/dev/raw/raw2
/dev/raw/raw1
/dev/raw/raw3

Creating Disk Group

使用 grid 用户执行 asmca,创建名为 FRA 和 DATA 的 ASM 磁盘组.

[grid@rac1 ~]$ export DISPLAY=192.168.247.1:0.0
[grid@rac1 ~]$ asmca

image-20230124131929590

点击 "Create",进入 “Create Disk Group” 界面,创建DATA磁盘组:

image-20230124132012191

创建FRA磁盘组:

image-20230124132210241

最终磁盘组如下:

image-20230124132237206

Installing Oracle RAC Database

在 oracle 用户的主目录下解压安装包并启动安装程序。

[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ unzip p13390677_112040_Linux-x86-64_1of7.zip
[oracle@rac1 ~]$ unzip p13390677_112040_Linux-x86-64_2of7.zip
[oracle@rac1 ~]$ export DISPLAY=192.168.247.1:0.0
[oracle@rac1 ~]$ cd database/
[oracle@rac1 database]$ ./runInstaller

跳过安全更新。

image-20230124200757911

跳过软件更新。

image-20230124200907376

选择 “Install database software only”,先只安装数据库。

image-20230124200924188

选择 “Oracle Real Application Clusters database installation",配置两个节点 oracle 用户的 SSH 无密码连接。

image-20230124201004314

配置完成后点击 ”Test“ 进行测试。

image-20230124201254704

选择语言 ”English“。

image-20230124201348582

选择 ”Enterprise Edition“。

image-20230124201415571

指定 ”Oracle Base“ 和 ”software Location“。

image-20230124201437381

选择管理数据库的操作系统用户组。

image-20230124201509427

先决条件检查,列出检查失败项,点击 Fix&Check Again 进行修复和再次检查。

image-20230124201826223

image-20230124201842001

执行修复脚本:

#节点1
[root@rac1 ~]# /tmp/CVU_11.2.0.4.0_oracle/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.4.0_oracle/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.4.0_oracle/fixup.enable
Log file location: /tmp/CVU_11.2.0.4.0_oracle/orarun.log
uid=1101(oracle) gid=6000(oinstall) groups=6000(oinstall),5001(asmdba),6001(dba),6002(oper)

#节点2
[root@rac2 ~]# /tmp/CVU_11.2.0.4.0_oracle/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.4.0_oracle/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.4.0_oracle/fixup.enable
Log file location: /tmp/CVU_11.2.0.4.0_oracle/orarun.log
uid=1101(oracle) gid=6000(oinstall) groups=6000(oinstall),5001(asmdba),6001(dba),6002(oper)

忽略 Single Client Access Name (SCAN) 警告。

image-20230124202301011

Single Client Access Name (SCAN) - This test verifies the Single Client Access Name configuration.  Error: 
 - 
PRVF-4657 : Name resolution setup check for "rac-scan" (IP address: 221.204.244.41) failed  - Cause:  Inconsistent IP address definitions found for the SCAN name identified using DNS and configured name resolution mechanism(s).  - Action:  Look up the SCAN name with nslookup, and make sure the returned IP addresses are consistent with those defined in NIS and /etc/hosts as configured in /etc/nsswitch.conf by reconfiguring the latter. Check the Name Service Cache Daemon (/usr/sbin/nscd) by clearing its cache and restarting it. 
 - 
PRVF-4657 : Name resolution setup check for "rac-scan" (IP address: 192.168.247.135) failed  - Cause:  Inconsistent IP address definitions found for the SCAN name identified using DNS and configured name resolution mechanism(s).  - Action:  Look up the SCAN name with nslookup, and make sure the returned IP addresses are consistent with those defined in NIS and /etc/hosts as configured in /etc/nsswitch.conf by reconfiguring the latter. Check the Name Service Cache Daemon (/usr/sbin/nscd) by clearing its cache and restarting it. 

  Check Failed on Nodes: [rac2,  rac1]  
Verification result of failed node: rac2 

 Details: 
 - 
PRVF-4664 : Found inconsistent name resolution entries for SCAN name "rac-scan"  - Cause:  The nslookup utility and the configured name resolution mechanism(s), as defined in /etc/nsswitch.conf, returned inconsistent IP address information for the SCAN name identified.  - Action:  Check the Name Service Cache Daemon (/usr/sbin/nscd), the Domain Name Server (nslookup) and the /etc/hosts file to make sure the IP address for the SCAN names are registered correctly. 
Back to Top  
Verification result of failed node: rac1 

 Details: 
 - 
PRVF-4664 : Found inconsistent name resolution entries for SCAN name "rac-scan"  - Cause:  The nslookup utility and the configured name resolution mechanism(s), as defined in /etc/nsswitch.conf, returned inconsistent IP address information for the SCAN name identified.  - Action:  Check the Name Service Cache Daemon (/usr/sbin/nscd), the Domain Name Server (nslookup) and the /etc/hosts file to make sure the IP address for the SCAN names are registered correctly. 
Back to Top

image-20230124202310789

保存响应文件,然后开始安装。

image-20230124202350468

image-20230124202406851

提示执行脚本.

image-20230124202424605

执行 /u01/app/oracle/product/11.2.0/dbhome_1/root.sh 脚本:

#节点1
[root@rac1 ~]# /u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

#节点2
[root@rac2 ~]# /u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

安装完成。

image-20230124202539161

Creating Oracle RAC Database

[oracle@rac1 database]$ export DISPLAY=192.168.247.1:0.0
[oracle@rac1 database]$ dbca

选择 ”Oracle Real Application Clusters (RAC) database"。

image-20230124202723561

选择 “Create a Database”。

image-20230124202823956

选择 “General Purpose or Transaction Processing”。

image-20230124202839596

选择配置类型为 “Admin-Managed”,指定 “Global Database Name” 和 “SID Prefix”,点击 “Select All”,选择所有节点。

image-20230124202919570

根据需要选择 “Configure Enterprise Manager”。

image-20230124203129873

指定数据库用户名密码。

image-20230124203234909

存储类型选择 ASM,存储位置选择 ”Use Oracle-Managed Files",指定 “Database Area” 为 “+DATA”。

image-20230124203300063

输入安装 GI 时指定的 ASM 实例用户的密码。

image-20230124203450369

勾选 “Specify Fast Recovery Area",指定 ”Fast Recovery Area" 为 “+FRA”,指定 “Fast Recovery Area Size” 大小,勾选 “Enable Archiving” 启用归档。

image-20230124203745955

如果需要使用 HR 等模式进行测试,勾选 “Sample Schemas”。

image-20230124203914490

如果是测试环境,可以选择 “Use Automatic Memory Management” 管理内存。

image-20230124204058367

根据需要指定 “Processes”。

image-20230124204231629

选择 “Use Unicode (AL32UTF8)” 字符集。

image-20230124204331904

连接模式选择 “Dedicated Server Mode”。

image-20230124204438140

可以调整 “Redo Log Groups” 的数量和大小。

image-20230124204533002

勾选 “Create Database”,根据需要选择 “Generate Database Creation Scripts”。

image-20230124204734417

查看创建数据库摘要。

image-20230124204844781

开始创建数据库。

image-20230124204903522

创建完成。

image-20230124204950686

创建完成后进行检查。

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.OCR.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.DATA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.FRA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
ora.gsd
               OFFLINE OFFLINE      rac1
               OFFLINE OFFLINE      rac2
ora.net1.network
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.ons
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.registry.acfs
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac1
ora.cvu
      1        ONLINE  ONLINE       rac1
ora.oc4j
      1        ONLINE  ONLINE       rac1
ora.rac1.vip
      1        ONLINE  ONLINE       rac1
ora.rac2.vip
      1        ONLINE  ONLINE       rac2
ora.scan1.vip
      1        ONLINE  ONLINE       rac1
ora.stone.db
      1        ONLINE  ONLINE       rac1                     Open
      2        ONLINE  ONLINE       rac2                     Open

Adding Disk to Disk Group

随着业务的发展,数据量越来越大,则需要为 DATA 磁盘组增加磁盘,具体步骤如下:

(1)分别为两个节点添加磁盘

(2)节点 1 配置:

[root@rac1 ~]# fdisk /dev/sde
[root@rac1 ~]# partprobe
[root@rac1 ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   41943040 sda
   8        1     204800 sda1
   8        2    4096000 sda2
   8        3   37641216 sda3
   8       16   20971520 sdb
   8       17   20964793 sdb1
   8       48    2097152 sdd
   8       49    2096451 sdd1
   8       32    8388608 sdc
   8       33    8385898 sdc1
   8       64   20971520 sde
   8       65   20964793 sde1

[root@rac1 ~]# vim /etc/udev/rules.d/60-raw.rules 
# Enter raw device bindings here.
#
# An example would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
KERNEL=="raw1", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
KERNEL=="raw2", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
KERNEL=="raw3", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw4 %N"
KERNEL=="raw4", OWNER="grid",GROUP="asmadmin", MODE="0660"

[root@rac1 ~]# start_udev 
Starting udev:                                             [  OK  ]
[root@rac1 ~]# ll /dev/raw/
total 0
crw-rw---- 1 grid asmadmin 162, 1 Aug 27 08:45 raw1
crw-rw---- 1 grid asmadmin 162, 2 Aug 27 08:45 raw2
crw-rw---- 1 grid asmadmin 162, 3 Aug 27 08:45 raw3
crw-rw---- 1 grid asmadmin 162, 4 Aug 27 08:45 raw4

(3)节点 2 配置:

[root@rac2 ~]# partprobe
[root@rac2 ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   41943040 sda
   8        1     204800 sda1
   8        2    4096000 sda2
   8        3   37641216 sda3
   8       16   20971520 sdb
   8       17   20964793 sdb1
   8       32    8388608 sdc
   8       33    8385898 sdc1
   8       48    2097152 sdd
   8       49    2096451 sdd1
   8       64   20971520 sde
   8       65   20964793 sde

[root@rac2 ~]# vim /etc/udev/rules.d/60-raw.rules 
# Enter raw device bindings here.
#
# An example would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
KERNEL=="raw1", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
KERNEL=="raw2", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
KERNEL=="raw3", OWNER="grid",GROUP="asmadmin", MODE="0660"
ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw4 %N"
KERNEL=="raw4", OWNER="grid",GROUP="asmadmin", MODE="0660"

[root@rac2 ~]# udevadm control --reload-rules
#注意:此处可以先使用这个命令进行配置文件的重载,如果重载后可以在 /dev/raw/ 下看到新增加的裸设备,则不需要执行 start_udev 来重启 udev,因为如果没有在网卡配置文件中添加 HOTPLUG=no,则执行 start_udev 会导致网卡重启从而因为监听、服务以及 VIP 漂移。

[root@rac2 ~]# start_udev 
Starting udev:                                             [  OK  ]
[root@rac2 ~]# ls /dev/raw/
raw1  raw2  raw3  raw4  rawctl

(4)添加磁盘到磁盘组

[grid@rac1 ~]$ sqlplus / as sysasm

SQL> select name,path from v$asm_disk;

NAME                           PATH
------------------------------ ----------------------------------------
                               /dev/raw/raw4
OCR_0000                       /dev/raw/raw3
FRA_0000                       /dev/raw/raw2
DATA_0000                      /dev/raw/raw1

SQL> select name,total_mb,free_mb from v$asm_diskgroup where name='DATA';

NAME                             TOTAL_MB    FREE_MB
------------------------------ ---------- ----------
DATA                                20473      18074

SQL> alter diskgroup data add disk '/dev/raw/raw4';

Diskgroup altered.

SQL> select name,path from v$asm_disk;

NAME                           PATH
------------------------------ ----------------------------------------
DATA_0001                      /dev/raw/raw4
OCR_0000                       /dev/raw/raw3
FRA_0000                       /dev/raw/raw2
DATA_0000                      /dev/raw/raw1

SQL> select name,total_mb,free_mb from v$asm_diskgroup where name='DATA';

NAME                             TOTAL_MB    FREE_MB
------------------------------ ---------- ----------
DATA                                40946      38545

Adding and Deleting Cluster Nodes

Deleting a Cluster Node

模拟节点 2 主机磁盘物理故障,不能启动,在节点 1 强制删除节点 2。

(1)关闭节点 2:

[root@rac2 ~]# init 0

(2)配置服务:

如果数据库配置了SERVICE,那么首先处理 SERVICE,让其只能在集群中剩余节点上运行。

  • 配置服务,假设数据库配置了如下服务,优先在节点 2 运行,如果节点 2 出现问题,自动故障转移到节点 1 运行。
[oracle@rac1 ~]# su - oracle
[oracle@rac1 ~]$ srvctl add service -d stone -s testsrv -r stone2 -a stone1
[oracle@rac1 ~]$ srvctl start service -d stone -s testsrv
[oracle@rac1 ~]$ srvctl config service -d stone
Service name: testsrv
Service is enabled
Server pool: stone_testsrv
Cardinality: 1
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: NONE
Failover method: NONE
TAF failover retries: 0
TAF failover delay: 0
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: NONE
Edition: 
Preferred instances: stone2
Available instances: stone1
  • 解除实例与 SERVICE 的关联,如果数据库实例跟某个 SERVICE 进行了关联,那么使用 SRVCTL 先对 SERVICE 进行 RELOCATE 操作,然后修改 SERVICE,使其只在不计划删除的节点上运行。确保要删除的实例既不是某个 SERVICE 的 preferred 实例,也不是 Available 实例。
[oracle@rac1 ~]$ srvctl modify service -d stone -s testsrv -n -i stone1 -f
[oracle@rac1 ~]$ srvctl config service -d stone
Service name: testsrv
Service is enabled
Server pool: stone_testsrv
Cardinality: 1
Disconnect: true
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: NONE
Failover method: NONE
TAF failover retries: 0
TAF failover delay: 0
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: NONE
Edition: 
Preferred instances: stone1
Available instances: 
[oracle@dbrac10 ~]$ srvctl start service -d stone -s testsrv
[oracle@dbrac10 ~]$ srvctl status service -d stone -s testsrv
Service testsrv is running on instance(s) stone1

(3)备份 OCR:

在节点 1 看是否有 OCR 的自动备份,如果没有,以root用户执行:ocrconfig -manualbackup 手动进行备份。

[oracle@rac1 ~]$ logout
[root@rac1 ~]# cd /u01/app/11.2.0/grid/bin/
[root@rac1 bin]# ./ocrconfig -showbackup

rac1     2019/10/28 13:18:37     /u01/app/11.2.0/grid/cdata/rac-cluster/backup00.ocr

rac1     2019/10/28 09:18:37     /u01/app/11.2.0/grid/cdata/rac-cluster/backup01.ocr

rac1     2019/10/28 05:18:36     /u01/app/11.2.0/grid/cdata/rac-cluster/backup02.ocr

rac1     2019/10/27 05:18:35     /u01/app/11.2.0/grid/cdata/rac-cluster/day.ocr

rac1     2019/10/16 05:18:22     /u01/app/11.2.0/grid/cdata/rac-cluster/week.ocr
PROT-25: Manual backups for the Oracle Cluster Registry are not available

(4)删除节点:

  • 删除实例

语法:

dbca -silent -deleteInstance [-nodeList node_name] -gdbName gdb_name -instanceName instance_name -sysDBAUserName sysdba -sysDBAPassword password

执行:

[root@rac1 ~]# su - oracle
[oracle@rac1 ~]# dbca -silent -deleteInstance -nodelist rac2 -gdbName stone -instanceName stone2 -sysDBAUserName sys -sysDBAPassword Abcd1234

执行完成后查看确认:

[oracle@rac1 ~]$ srvctl config database -d stone

Database unique name: stone
Database name: stone
Oracle home: /u01/app/oracle/product/11.2.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/stone/spfilestone.ora
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: stone
Database instances: stone1
Disk Groups: DATA,FRA
Mount point paths: 
Services: testsrv
Type: RAC
Database is administrator managed

[oracle@rac1 ~]$ logout
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ crsctl stat res -t

--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.OCR.dg
               ONLINE  ONLINE       rac1                                      
ora.FRA.dg
               ONLINE  ONLINE       rac1                                      
ora.DATA.dg
               ONLINE  ONLINE       rac1                                      
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1                                      
ora.asm
               ONLINE  ONLINE       rac1                  Started             
ora.gsd
               OFFLINE OFFLINE      rac1                                      
ora.net1.network
               ONLINE  ONLINE       rac1                                      
ora.ons
               ONLINE  ONLINE       rac1                                      
ora.registry.acfs
               ONLINE  ONLINE       rac1                                      
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac1                                      
ora.cvu
      1        ONLINE  ONLINE       rac1                                      
ora.rac1.vip
      1        ONLINE  ONLINE       rac1                                      
ora.rac2.vip
      1        ONLINE  INTERMEDIATE rac1                  FAILED OVER         
ora.oc4j
      1        ONLINE  ONLINE       rac1                                      
ora.stone.db
      1        ONLINE  ONLINE       rac1                  Open                
ora.stone.testsrv.svc
      1        ONLINE  ONLINE       rac1                                      
ora.scan1.vip
      1        ONLINE  ONLINE       rac1

(5)更新 Oracle Inventory:

语法:

./runInstaller -updateNodeList ORACLE_HOME=${ORACLE_HOME} "CLUSTER_NODES={remainnode1,remainnode2,....}"

执行:

[grid@rac1 ~]$ logout
[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ cd $ORACLE_HOME/oui/bin
[oracle@rac1 bin]$ ./runInstaller -updateNodeList ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 "CLUSTER_NODES={rac1}"

Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 16383 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
The inventory is located at /u01/app/oraInventory
'UpdateNodeList' was successful.

如果执行失败,则需要查看日志。一般是由于 /etc/oraInst.loc 中的 inventory_loc 不正确导致。

(6)删除节点:

停止并删除节点 2 的 VIP,在节点 1 上以 root 用户执行:

[oracle@rac1 bin]$ logout
[root@rac1 bin]# /u01/app/11.2.0/grid/bin/srvctl stop vip -i rac2-vip
[root@rac1 bin]# /u01/app/11.2.0/grid/bin/srvctl remove vip -i rac2-vip -f
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ crsctl stat res -t

--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.OCR.dg
               ONLINE  ONLINE       rac1                                      
ora.FRA.dg
               ONLINE  ONLINE       rac1                                      
ora.DATA.dg
               ONLINE  ONLINE       rac1                                      
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1                                      
ora.asm
               ONLINE  ONLINE       rac1                  Started             
ora.gsd
               OFFLINE OFFLINE      rac1                                      
ora.net1.network
               ONLINE  ONLINE       rac1                                      
ora.ons
               ONLINE  ONLINE       rac1                                      
ora.registry.acfs
               ONLINE  ONLINE       rac1                                      
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac1                                      
ora.cvu
      1        ONLINE  ONLINE       rac1                                      
ora.rac1.vip
      1        ONLINE  ONLINE       rac1                                              
ora.oc4j
      1        ONLINE  ONLINE       rac1                                      
ora.stone.db
      1        ONLINE  ONLINE       rac1                  Open                
ora.stone.testsrv.svc
      1        ONLINE  ONLINE       rac1                                      
ora.scan1.vip
      1        ONLINE  ONLINE       rac1

查看节点 1 的状态是否为 Unpinned,如果不是 Unpinned,则以 root 用户执行:crsctl unpin css -n <node> 将其 Unpin。

[grid@rac1 ~]$ olsnodes -s -t
rac1 Active    Unpinned
rac2 Inactive  Unpinned

删除节点 2,在节点 1 上以 root 用户执行:

[grid@rac1 ~]$ logout
[root@rac1 bin]# /u01/app/11.2.0/grid/bin/crsctl delete node -n rac2
CRS-4661: Node rac2 successfully deleted.

(7)更新 GI inventory:

在节点 1 上以 grid 用户更新 Grid Infrastructure Inventory:

[root@rac1 ~]# su – grid
[grid@rac1 ~]$ cd $ORACLE_HOME/oui/bin
[grid@rac1 bin]$ ./runInstaller -updateNodeList ORACLE_HOME=/u01/app/11.2.0/grid "CLUSTER_NODES={rac1}" CRS=TRUE –silent

Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 16383 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
The inventory is located at /u01/app/oraInventory
'UpdateNodeList' was successful.

在节点 1 上查询集群成员及状态:

[grid@rac1 bin]$ olsnodes -s
rac1 Active

Adding a Cluster Node

假设前面删除节点的主机更换硬盘,重新安装系统后,参考前面的准备工作,配置系统,依赖,网络,共享存储,用户,组及目录。其余步骤如下:

(1)配置 SSH 互信:

[root@rac1 ~]# cd /home/grid/grid/sshsetup/
[root@rac1 sshsetup]#./sshUserSetup.sh -user grid -hosts "rac1 rac2" -advanced -noPromptPassphrase
[root@rac1 sshsetup]#./sshUserSetup.sh -user oracle -hosts "rac1 rac2" -advanced -noPromptPassphrase

(2)检查环境:

节点2安装 cvuqdisk

[grid@rac2 ~]$ scp grid@rac1:/home/grid/grid/rpm/cvuqdisk-1.0.9-1.rpm .
[root@rac2 ~]# rpm -ivh /home/grid/cvuqdisk-1.0.9-1.rpm

在现有任意 RAC 节点上,以 GRID_HOME 的 OWNER 用户,执行下面的三个命令:

cluvfy stage -post hwos -n node_list | all [-verbose]
cluvfy comp peer [-refnode ref_node] -n node_list [-orainv orainventory_group] [-osdba osdba_group] [-verbose]
cluvfy stage -pre nodeadd -n node3 [-fixup [-fixupdir fixup_dir]] [-verbose]

在节点 1 以 grid 用户执行:

[grid@rac1 ~]$ cluvfy stage -post hwos -n rac2 -verbose
[grid@rac1 ~]$ cluvfy comp peer -refnode rac1 -n rac2 -orainv oinstall -osdba asmdba -verbose
[grid@rac1 ~]$ cluvfy stage -pre nodeadd -n rac2 -fixup -verbose

节点 2 修复问题:

[root@rac2 ~]# /tmp/CVU_11.2.0.4.0_grid/runfixup.sh

检查未通过的内容为:节点间互联和共享存储访问,如果确认没有问题后,可以忽略报错和警告:

[grid@rac1 ~]$ export IGNORE_PREADDNODE_CHECKS=Y

(3)扩展 GI:

在节点 1 以 grid 用户运行以下命令添加节点:

./addNode.sh -silent "CLUSTER_NEW_NODES={new_node_list}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={new_node_viphostname_list}"

执行:

[grid@rac1 ~]$ cd $ORACLE_HOME/oui/bin
[grid@rac1 bin]$ ./addNode.sh -silent "CLUSTER_NEW_NODES={rac2}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={rac2-vip}"

注意:此处如果没有使用 CLUSTER_NEW_PRIVATE_NODE_NAMES={rac2-priv} 指定私网,则是自动生成私网地址。

根据提示执行脚本,需要注意的是只能顺序执行,不能同时执行,也就是说如果添加多个节点,需要一个节点执行完成后再在下一个节点执行,否则会造成整个集群的分裂。

[root@rac2 ~]# /u01/app/11.2.0/grid/root.sh

完成后进程检查,在节点 1 上执行:

[grid@rac1 bin]$ cluvfy stage -post nodeadd -n rac2 -verbose

除 SCAN 检查失败外,其余全部通过,SCAN 检查失败可以忽略。

最后,需要在 2 个节点上,看一下所有资源列表是否完全一致,且除 gsd 外其余所有资源是否都 ONLINE,如果一致,且都 ONLINE 可以继续往下进行。

在节点 2 查看集群资源情况:

[grid@rac2 ~]$ crsctl stat res -t

经过检查,节点 2 上看到的资源信息与节点 1 上看到的一致,且除 gsd 外所有资源均 ONLINE,表明集群节点添加成功。

(4)扩展 DB:

在添加完集群节点后,数据库依然是一个 1 节点的 RAC,还不是 2 节点的 RAC,需要先在节点 2 上扩展 ORACLE HOME,相当于安装 ORACLE DATABASE 软件,然后再对数据库进行 ”实例” 扩展,使其真正成为一个 2 节点的 RAC 数据库。

在节点 1 以 oracle 用户运行以下命令扩展 ORACLE HOME 到新节点 2:

[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ cd $ORACLE_HOME/oui/bin
[oracle@rac1 bin]$ ./addNode.sh -silent "CLUSTER_NEW_NODES={rac2}"

在节点 2 以 root 用户执行脚本:

[root@rac2 ~]# /u01/app/oracle/product/11.2.0/dbhome_1/root.sh

(5)添加实例:

在节点 1 使用 oracle 用户运行以下命令为新添加节点创建数据库(耐心等待,这一步有点久):

[oracle@rac1 bin]$ dbca -silent -addInstance -nodeList rac2 -gdbName stone -instanceName stone2 -sysDBAUserName sys -sysDBAPassword Abcd1234

查看数据库配置:

[oracle@rac1 bin]$ srvctl config database -d stone

(6)检查确认:

[root@rac2 ~]# su - grid
[grid@rac2 ~]$ olsnodes -s
rac1 Active
rac2 Active
[grid@rac2 ~]$ olsnodes -n
rac1 1
rac2 2
[grid@rac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.OCR.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.DATA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.FRA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
ora.gsd
               OFFLINE OFFLINE      rac1
               OFFLINE OFFLINE      rac2
ora.net1.network
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.ons
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.registry.acfs
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac1
ora.cvu
      1        ONLINE  ONLINE       rac1
ora.oc4j
      1        ONLINE  ONLINE       rac1
ora.rac1.vip
      1        ONLINE  ONLINE       rac1
ora.rac2.vip
      1        ONLINE  ONLINE       rac2
ora.scan1.vip
      1        ONLINE  ONLINE       rac1
ora.stone.db
      1        ONLINE  ONLINE       rac1                     Open
      2        ONLINE  ONLINE       rac2                     Open

Administering Database Instances and Cluster Databases

Overview of Starting and Stopping Oracle RAC Instances

关闭 Oracle RAC 实例与关闭非集群 Oracle 数据库实例有以下不同:

  • 关闭一个实例不会影响其他 Oracle RAC 实例。
  • 关闭所有实例才能完全关闭 Oracle RAC 数据库。

Starting Up and Shutting Down with SQL*Plus

如果只想启动或停止某个 Oracle RAC 实例,并且已连接到该节点,则应首先确保当前环境变量包含此实例的 SID。启动 SQL*Plus 会话并使用 SYSDBA 或 SYSOPER 权限进行连接,然后发出所需的命令。

例子:使用 SQL*Plus 在本地节点启动实例

[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ echo $ORACLE_SID
stone1
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL> startup

Starting Up and Shutting Down with SRVCTL

可以使用 SRVCTL 启动或关闭数据库和实例,管理服务等。

启动实例的语法:

[oracle@rac1 ~]$ srvctl start instance -d db_unique_name -i instance_name_list [-o start_options]

启动或者关闭整个数据库的语法:

[oracle@rac1 ~]$ srvctl start database -d db_unique_name [-o start_options]
[oracle@rac1 ~]$ srvctl stop database -d db_unique_name [-o stop_options]

查看运行的实例:

SQL> SELECT * FROM V$ACTIVE_INSTANCES;

INST_NUMBER INST_NAME
----------- --------------------
          1 rac1:stone1
          2 rac2:stone2
ColumnDescription
INST_NUMBERIdentifies the instance number.
INST_NAMEIdentifies the host name and instance name as host_name:instance_name.

Terminating Sessions On a Specific Cluster Instance

使用 ALTER SYSTEM KILL SESSION 语句终止特定实例上的会话。

步骤:

  1. 查询 GV$SESSION 视图获取会话的 SID,SERIAL#,INST_ID。
  2. 使用语句终止会话:
ALTER SYSTEM KILL SESSION 'SID, SERIAL#[, @INST_ID]';

例子:在实例 1 上终止实例 2 的会话,此会话处于活动状态,需等待释放资源

SQL> SELECT SID, SERIAL#, INST_ID FROM GV$SESSION WHERE USERNAME='SCOTT';
 
       SID    SERIAL#    INST_ID
---------- ---------- ----------
        80          4          2
 
SQL> ALTER SYSTEM KILL SESSION '80, 4, @2';
alter system kill session '80, 4, @2'
*
ERROR at line 1:
ORA-00031: session marked for kill

例子:在实例 1 上终止实例 2 的会话,此会话处于空闲状态

SQL> SELECT SID, SERIAL#, INST_ID FROM GV$SESSION WHERE USERNAME='SCOTT';
 
       SID    SERIAL#    INST_ID
---------- ---------- ----------
        80          6          2
 
SQL> ALTER SYSTEM KILL SESSION '80, 6, @2';

System altered.

例子:使用 IMMEDIATE 立即终止会话

SQL> SELECT SID, SERIAL#, INST_ID FROM GV$SESSION WHERE USERNAME='SCOTT';
 
       SID    SERIAL#    INST_ID
---------- ---------- ----------
        80          8          2
 
SQL> ALTER SYSTEM KILL SESSION '80, 8, @2' IMMEDIATE;
 
System altered.

Setting SPFILE Parameter Values for Oracle RAC

在文本参数文件中,参数前面的星号(*)表示适用于所有实例。如果后面此参数又指定了具体实例,则该实例使用此参数值,例如:

*.OPEN_CURSORS=500
stone1.OPEN_CURSORS=1000

例子:为所有实例设置参数

SQL> ALTER SYSTEM SET OPEN_CURSORS=1500 sid='*';

例子:恢复节点参数为默认值

SQL> ALTER SYSTEM RESET OPEN_CURSORS SCOPE=SPFILE SID='prod1';

Administering Oracle Clusterware Components

Managing the Oracle Clusterware Stack

默认情况下,Oracle Clusterware 在服务器重启后会自动启动,也可以使用命令手动启动或关闭 Oracle Clusterware 。

Starting Oracle Clusterware

如果 Oracle High Availability Services 守护进程(OHASD)在集群所有节点上正常运行,则执行以下命令启动整个 Oracle Clusterware(包括所有进程及其管理的资源):

[root@rac1 ~]# cd /u01/app/11.2.0/grid/bin/
[root@rac1 bin]# ./crsctl start cluster -all

启动指定节点的 Oracle Clusterware:

[root@rac1 bin]# ./crsctl start cluster -n rac1

或者直接在该节点执行:

[root@rac1 bin]# ./crsctl start cluster

启动节点的 Oracle Clusterware,包括 OHASD 进程:

[root@rac1 bin]# ./crsctl start crs

Stopping Oracle Clusterware

在所有节点关闭 Oracle Clusterware(包括 Oracle ASM 实例),除了 OHASD 及其相关进程:

[root@rac1 ~]# cd /u01/app/11.2.0/grid/bin/
[root@rac1 bin]# ./crsctl stop cluster -all

在指定节点关闭 Oracle Clusterware(包括 Oracle ASM 实例):

[root@rac1 bin]# ./crsctl stop cluster -n rac1

或者直接在该节点执行:

[root@rac1 bin]# ./crsctl stop cluster

关闭节点的 Oracle Clusterware,包括 OHASD 进程:

[root@rac1 bin]# ./crsctl stop crs

如果此命令执行失败,则需要加上 -f 选项。

Administering Oracle ASM

ASM Instance

ASM 实例同样也是由进程和内存组成。

img

ASM 的 SGA 包括:

  • Shared Pool:用于元数据信息
  • Large Pool:用于并行操作
  • ASM Cache:在重平衡操作中用于读写块
  • Free Memory:未分配可用内存

ASM 实例默认使用自动内存管理,动态调整 SGA 各个内存组件的大小,内存总大小取决于 ASM 管理的磁盘空间。

ASM实例有很多进程,有的和数据库实例的进程名称一样,但是可能功能不一样。主要的进程如下:

ProcessDescription
RBALOpens all device files as part of discovery and coordinates the rebalance activity
ARBnOne or more slave processes that do the rebalance activity
GMONResponsible for managing the disk-level activities such as drop or offline and advancing the ASM disk group compatibility
MARKMarks ASM allocation units as stale when needed
OnnnOne or more ASM slave processes forming a pool of connections to the ASM instance for exchanging messages
PZ9nOne or more parallel slave processes used in fetching data on clustered ASM installation from GV$ views

Initialization Parameters

主要有以下参数:

INSTANCE_TYPE = ASM
ASM_POWER_LIMIT = 1
ASM_DISKSTRING = '/dev/sda1','/dev/sdb*'
ASM_DISKGROUPS = DATA2, FRA
ASM_PREFERRED_READ_FAILURE_GROUPS = DATA.FailGroup2
DIAGNOSTIC_DEST = /u01/app/oracle
LARGE_POOL_SIZE = 12M
REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE

ASM 实例由参数文件控制,其方式与常规数据库实例相同。通常设置的参数包括:

  • INSTANCE_TYPE:应该设置且必须为 ASM,表示 ASM 实例,标识要启动的实例是 ASM,而不是数据库实例。这是唯一一个必须定义的参数。对于数据库实例,该参数值设置为 RDBMS。
  • ASM_POWER_LIMIT:控制重平衡操作的速度。值的范围从1 到 11,11 表示最快。如果省略,该值默认为1。指定的级别越高,则 Rebalance 的操作就会越快被完成,当然这也意味着这个时间段内将占用更多的资源,指定级别较低的话,则 Rebalance 操作会耗时更久,但对当前系统的 IO 及负载影响会更少,这需要根据实际情况衡量。另外,这个参数指定的只是一个默认值,在操作过程中,即可以随时动态更改,也可以在语句级命令行时指定 Power,覆盖该默认值。
  • ASM_DISKSTRING:是一个与操作系统相关的值,ASM 使用它来指定搜索的磁盘,该选项可以同时指定多个值,并且支持通配符。比如只检查 /DEV/SD*。默认值为空字符串,为空的话,表示 ASM 将查找系统中所有 ASM 拥有读写权限的设备。这在大多数情况下就足够了。如上所示的约束性更强的值可以减少 ASM 执行搜索所需的时间。
  • ASM_DISKGROUPS:ASM 实例启动时或使用 ALTER DISKGROUP ALL MOUNT 命令时,ASM 实例要挂载的磁盘组的名称列表。Oracle Restart 会挂载没有与 ASM_DISKGROUPS 参数列在一起的从属磁盘组。该参数没有默认值。
  • ASM_PREFERRED_READ_FAILURE_GROUPS:指定包含优先读取磁盘的故障组。可以将性能好的磁盘放入某个故障组,并指定优先读取。
  • DIAGNOSTIC_DEST:指定自动诊断知识库(ADR)主目录的位置。此参数的默认值来源于 ORACLE_BASE。
  • LARGE_POOL_SIZE:指定大池的大小。
  • REMOTE_LOGIN_PASSWORDFILE:指定否检查口令文件。默认值为 EXCLUSIVE。

上面列出的八个参数是需要为 ASM 实例指定的唯一几个非默认参数。ASM 实例与数据库实例不同,因为并不是所有的数据库参数都对 ASM 实例有效。在全部 344 个数据库实例参数中,大约有 74 个参数可以用于ASM 实例。对于上面未列出的其它参数,虽然其默认值对于大多数安装来说应该已经足够了,但也可以根据需要进行设置。

例子:查看 ASM 参数文件的位置

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ sqlplus / as sysasm

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +OCR/rac-cluster/asmparameterf
                                                 ile/registry.253.908412843

例子:查看参数文件的内容

SQL> create pfile='/home/grid/pfile.ora' from spfile;

File created.

SQL> get /home/grid/pfile.ora
  1  +ASM.__oracle_base='/u01/app/grid'#ORACLE_BASE set from in memory value
  2  +ASM.asm_diskgroups='FRA'#Manual Mount
  3  *.asm_power_limit=1
  4  *.diagnostic_dest='/u01/app/grid'
  5  *.instance_type='asm'
  6  *.large_pool_size=12M
  7* *.remote_login_passwordfile='EXCLUSIVE'

Dynamic Performance Views

ASM 实例有许多专用的 ASM 相关视图,通过 SQL 语句进行查询。

V$ASM_ALIAS 
V$ASM_ATTRIBUTE 
V$ASM_CLIENT
V$ASM_DISK
V$ASM_DISK_IOSTAT 
V$ASM_DISK_STAT
V$ASM_DISKGROUP
V$ASM_DISKGROUP_STAT 
V$ASM_FILE
V$ASM_OPERATION
V$ASM_TEMPLATE

例子:查看与 ASM 相关的动态性能视图有哪些

SQL>  select * from dict where table_name like 'V$ASM_%';

TABLE_NAME                     COMMENTS
------------------------------ --------------------------------------------------
V$ASM_ACFSSNAPSHOTS            Synonym for V_$ASM_ACFSSNAPSHOTS
V$ASM_ACFSVOLUMES              Synonym for V_$ASM_ACFSVOLUMES
V$ASM_ACFS_ENCRYPTION_INFO     Synonym for V_$ASM_ACFS_ENCRYPTION_INFO
V$ASM_ACFS_SECURITY_INFO       Synonym for V_$ASM_ACFS_SECURITY_INFO
V$ASM_ALIAS                    Synonym for V_$ASM_ALIAS
V$ASM_ATTRIBUTE                Synonym for V_$ASM_ATTRIBUTE
V$ASM_CLIENT                   Synonym for V_$ASM_CLIENT
V$ASM_DISK                     Synonym for V_$ASM_DISK
V$ASM_DISKGROUP                Synonym for V_$ASM_DISKGROUP
V$ASM_DISKGROUP_STAT           Synonym for V_$ASM_DISKGROUP_STAT
V$ASM_DISK_IOSTAT              Synonym for V_$ASM_DISK_IOSTAT
V$ASM_DISK_STAT                Synonym for V_$ASM_DISK_STAT
V$ASM_FILE                     Synonym for V_$ASM_FILE
V$ASM_FILESYSTEM               Synonym for V_$ASM_FILESYSTEM
V$ASM_OPERATION                Synonym for V_$ASM_OPERATION
V$ASM_TEMPLATE                 Synonym for V_$ASM_TEMPLATE
V$ASM_USER                     Synonym for V_$ASM_USER
V$ASM_USERGROUP                Synonym for V_$ASM_USERGROUP
V$ASM_USERGROUP_MEMBER         Synonym for V_$ASM_USERGROUP_MEMBER
V$ASM_VOLUME                   Synonym for V_$ASM_VOLUME
V$ASM_VOLUME_STAT              Synonym for V_$ASM_VOLUME_STAT

例子:查看 ASM 文件别名信息

SQL> select name,group_number,file_number,alias_directory,system_created from v$asm_alias;

NAME                                               GROUP_NUMBER FILE_NUMBER A S
-------------------------------------------------- ------------ ----------- - -
ASM                                                           1  4294967295 Y Y
ASMPARAMETERFILE                                              1  4294967295 Y Y
REGISTRY.253.893366739                                        1         253 N Y
STONE                                                         1  4294967295 Y Y
DATAFILE                                                      1  4294967295 Y Y

例子:查看 ASM 磁盘组属性

SQL> select name,value,group_number,system_created from v$asm_attribute;

NAME                                     VALUE                GROUP_NUMBER SYSTEM_
---------------------------------------- -------------------- ------------ -------
disk_repair_time                         3.6h                            1 Y
au_size                                  1048576                         1 Y
sector_size                              512                             1 Y
compatible.asm                           11.2.0.0.0                      1 Y
compatible.rdbms                         10.1.0.0.0                      1 Y

例子:查看连接到 ASM 实例的客户机信息

SQL> select group_number,instance_name,db_name,status from v$asm_client;

GROUP_NUMBER INSTANCE_NAME        DB_NAME  STATUS
------------ -------------------- -------- ------------
           2 +ASM1                +ASM     CONNECTED
           3 +ASM1                +ASM     CONNECTED
           3 stone1               stone    CONNECTED
           1 stone1               stone    CONNECTED

例子:查看 ASM 磁盘信息

SQL> select group_number,disk_number,name,TOTAL_MB,FREE_MB from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME                                       TOTAL_MB    FREE_MB
------------ ----------- ---------------------------------------- ---------- ----------
           0           0                                                   0          0
           0           3                                                   0          0
           1           0 DATA_0000                                      2047        950
           1           1 DATA_0001                                      2047        948
           2           0 FRA_0000                                       2047       1147
           2           1 FRA_0001                                       2047       1152

例子:查看 ASM 磁盘 I/O 情况

SQL> select instname,dbname,group_number,disk_number,reads,writes,hot_reads,hot_writes from v$asm_disk_iostat;

INSTNAME   DBNAME   GROUP_NUMBER DISK_NUMBER      READS     WRITES  HOT_READS HOT_WRITES
---------- -------- ------------ ----------- ---------- ---------- ---------- ----------
+ASM1      +ASM                3           0          0          0          0          0
+ASM1      +ASM                2           0          0          0          0          0
stone1     stone               1           0      73626    5907391          0          0
stone1     stone               3           0   15380513    9978469          0          0

例子:查看 ASM 磁盘状态

SQL>  select group_number,disk_number,name,mount_status,create_date,mount_date from v$asm_disk_stat;

GROUP_NUMBER DISK_NUMBER NAME              MOUNT_S CREATE_DA MOUNT_DAT
------------ ----------- ----------------- ------- --------- ---------
           1           0 DATA_0000         CACHED  17-OCT-15 15-DEC-15
           1           1 DATA_0001         CACHED  17-OCT-15 15-DEC-15
           2           0 FRA_0000          CACHED  17-OCT-15 15-DEC-15
           2           1 FRA_0001          CACHED  17-OCT-15 15-DEC-15

例子:查看 ASM 磁盘组信息,查询 v$asm_diskgroup 会强制 Oracle 重新扫描磁盘,速度慢且影响性能。

SQL> select group_number,name,sector_size,block_size,allocation_unit_size,total_mb,free_mb from v$asm_diskgroup;

GROUP_NUMBER NAME       SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE   TOTAL_MB    FREE_MB
------------ ---------- ----------- ---------- -------------------- ---------- ----------
           1 DATA               512       4096              1048576       4094       1898
           2 FRA                512       4096              1048576       4094       2299

例子:查看 ASM 磁盘组状态,查询 v$asm_diskgroup_stat 返回与 v$asm_diskgroup 完全相同的数据,而无需重新扫描磁盘。

SQL>  select group_number,name,sector_size,block_size,allocation_unit_size,total_mb,free_mb from v$asm_diskgroup_stat;

GROUP_NUMBER NAME       SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE   TOTAL_MB    FREE_MB
------------ ---------- ----------- ---------- -------------------- ---------- ----------
           1 DATA               512       4096              1048576       4094       1898
           2 FRA                512       4096              1048576       4094       2299

例子:查看 ASM 文件信息

SQL> select group_number,file_number,block_size,blocks,bytes,space,type from v$asm_file;

GROUP_NUMBER FILE_NUMBER BLOCK_SIZE     BLOCKS      BYTES      SPACE TYPE
------------ ----------- ---------- ---------- ---------- ---------- --------------------
           1         253        512          3       1536    1048576 ASMPARAMETERFILE
           1         256       8192      97281  796925952  799014912 DATAFILE

System Privileges

ASM 实例没有数据字典,所以连接 ASM 只能使用下列系统权限:

ASM PrivilegePrivilege Group
(Suggested)
Privilege
SYSASMOSASM
(asmadmin)
Full administrative privilege
SYSDBAOSDBA
(asmdba)
Access to data stored on ASM, and SYSASM in the current release
SYSOPEROSOPER
(asmoper)
Limited privileges to start and stop the ASM instance along with a set of nondestructive ALTER DISKGROUP commands
  • SYSASM:该权限提供对 ASM 实例的全部管理权限
  • SYSDBA:该权限授予对 ASM 中存储的数据的访问权限,在当前版本中还授予 SYSASM 管理权限
  • SYSOPER:该权限授予使用一组非破坏性 ALTER DISKGROUP 命令以及启动和停止 ASM 实例的权限。不允许使用 CREATE DISKGROUP 等其它命令

安装 ASM 时,使用操作系统组对 SYSASM、SYSDBA 和 SYSOPER 权限进行验证。Oracle Universal Installer (OUI)将这些组分别称为 OSASM、OSDBA 和 OSOPER 组,即 OSASM 组是授予了 SYSASM 权限的操作系统组。Oracle建议 OSASM、OSDBA 和 OSOPER 组名称分别为 asmadmin、asmdba 和 asmoper。因此,SYSASM 是数据库使用的名称,OSASM 是OUI使用的名称,而 asmadmin 是操作系统使用的名称。它们都是指同一组用户。当创建 ASM 实例时,只创建 SYS 和 ASMSNMP 这两个 ASM 用户。创建 SYS 用户时,会自动为其分配SYSASM 权限。

Starting and Stopping ASM Instances Using SQL*Plus

使用 SQL*Plus 启动和停止 ASM 实例与启动和停止数据库实例的方式相似。

当启动 ASM 实例时,需注意以下几点:

  • 要使用 SQL*Plus 连接 ASM 实例,请将 ORACLE_SID 环境变量设置为 ASM SID。单实例数据库的默认 ASM SID为 +ASM,Oracle RAC 节点的默认ASM SID是 +ASMnode_number,其中 node_number 是节点的编号。可以使用 oraenv 脚本设置 ORACLE_BASE、ORACLE_SID、ORACLE_HOME 和 PATH 变量。
  • 初始化参数文件必须包含:INSTANCE_TYPE = ASM ,该参数指示正在启动 ASM 实例,而不是数据库实例。
  • 运行 STARTUP 命令时,该命令尝试挂载初始化参数 ASM_DISKGROUPS 指定的磁盘组,而不是尝试挂载和打开某个数据库。如果尚未为 ASM_DISKGROUPS 指定值,后面可以通过 ALTER DISKGROUP...MOUNT 命令挂载磁盘组。

与 ASM 相关的 STARTUP 命令参数:

  • FORCE:在重新启动 ASM 实例之前发出 SHUTDOWN ABORT。
  • MOUNT 或 OPEN:挂载 ASM_DISKGROUPS 初始化参数中指定的磁盘组。这是未指定命令参数时的默认值。
  • NOMOUNT:启动 ASM 实例而不挂载任何磁盘组。
  • RESTRICT:在受限模式下启动实例。RESTRICT 可以与 MOUNT、NOMOUNT 和 OPEN 组合使用。在受限模式下,数据库实例不能使用磁盘组。即,数据库无法打开磁盘组中的文件。另外,如果磁盘组是由某个实例在受限模式下挂载的,则该磁盘组无法由集群中的任何其它实例挂载。通过受限模式,可以在磁盘组上执行维护任务,而不会受到客户机的干扰。在磁盘组处于受限模式下时执行重平衡操作,就不再需要在集群环境中的ASM 实例之间传递锁定和取消锁定区映射消息。这样可以提高重新平衡操作的整体吞吐量。在维护期间结束时,必须显式卸载该磁盘组并在正常模式下重新挂载该磁盘组。

在 SQL*Plus 中运行 SHUTDOWN 命令将关闭 ASM 进程。在运行此命令之前,确保已设置 ORACLE_SID 和 ORACLE_HOME 环境变量,以便可以连接到 ASM 实例。

Oracle 强烈建议在关闭 ASM 实例之前关闭使用该 ASM 实例的所有数据库实例。

与 ASM 相关的 SHUTDOWN 命令参数:

  • NORMAL:ASM 在卸载所有磁盘组并关闭 ASM 实例之前,将等待任何正在进行的 SQL 完成执行。在关闭实例之前,ASM 将等待所有当前连接的用户从该实例断开。如果任何数据库实例与 ASM 实例连接,则 SHUTDOWN 命令将返回错误并保持 ASM 实例继续运行。NORMAL 是默认关闭模式。
  • IMMEDIATE 或 TRANSACTIONAL:ASM 在卸载所有磁盘组并关闭 ASM 实例之前,将等待任何正在进行的 SQL 完成执行。ASM 不等待当前与实例连接的用户断开连接。如果任何数据库实例与 ASM实例连接,则 SHUTDOWN 命令将返回错误并保持 ASM 实例继续运行。
  • ABORT:ASM 实例立即关闭,而不按顺序卸载磁盘组。这将导致下次启动 ASM 时进行恢复操作。如果有任何数据库实例与 ASM 实例连接,则该数据库实例也将中止。

ASM 是依赖于 CSS 守护进程的,因此在启动 ASM 实例前要确保 CSS 守护进程已经启动。CSS(Cluster Synchronization Services)守护进程用来维持 ASM 及客户端数据库实例间的一致性,如果是通过 DBCA 建库的话,那么 CSS 守护进程默认即会启动。

例子:连接到 ASM 实例,关闭并启动 ASM 实例

[grid@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM1] ? 
The Oracle base remains unchanged with value /u01/app/grid
[grid@rac1 ~]$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.4.0 Production on Tue Dec 15 16:30:39 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Automatic Storage Management option

SQL> shutdown
ORA-15097: cannot SHUTDOWN ASM instance with connected client (process 61836)
SQL> shutdown abort
ASM instance shutdown
SQL> startup
ASM instance started

Total System Global Area 1135747072 bytes
Fixed Size                  2260728 bytes
Variable Size            1108320520 bytes
ASM Cache                  25165824 bytes
ASM diskgroups mounted

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
+ASM1            STARTED

SQL> select name,state from v$asm_diskgroup;

NAME                           STATE
------------------------------ -----------
DATA                           MOUNTED
FRA                            MOUNTED
OCR                            MOUNTED

Starting and Stopping ASM Instances Using SRVCTL

可以使用 SRVCTL 启动和停止 ASM 实例。SRVCTL 位于 Grid Infrastructure 的 ORACLE_HOME/bin 位置下和 Oracle Database 的 ORACLE_HOME/bin 位置下。管理 ASM、监听或 Oracle Restart 时,应该使用位于Grid Infrastructure ORACLE_HOME 中的 SRVCTL。

使用 SRVCTL 管理 ASM:

  • 启动ASM 实例。

  • srvctl start asm [-o <start_option>]
    
    • <start_option> 是有效的实例启动选项(FORCE、MOUNT、OPEN、NOMOUNT 或 RESTRICT)之一(可选)
  • 停止ASM 实例。

  • srvctl stop asm [-o <stop_option>] -f
    
    • <stop_option> 是有效的实例关闭选项(NORMAL、IMMEDIATE、TRANSACTIONAL 或 ABORT)之一(可选),–f 表示强制。
  • 查看ASM 实例的状态。

  • srvctl status asm
    

例子:使用 SRVCTL 关闭和启动 ASM 实例并查看状态

[grid@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM1] ? 
[grid@rac1 ~]$ srvctl stop asm -f
[grid@rac1 ~]$ srvctl status asm
ASM is not running.
[grid@rac1 ~]$ srvctl start asm -o mount  #数据库只会被mount,如果使用open,则数据库会open
[grid@rac1 ~]$ srvctl status asm
ASM is running on rac1
[oracle@rac1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Dec 15 16:57:31 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL> alter database open;

Database altered.

Starting and Stopping ASM Instances Using ASMCMD

ASMCMD 提供了一个访问 ASM 的命令行界面,无需使用 SQL 语言。ASMCMD 提供了一个类似伪 Shell 的环境,可以接受 UNIX 格式的语法执行常用的 ASM 管理任务。可以用于管理 ASM 实例、磁盘组、磁盘组的文件访问控制、磁盘组内的文件和目录、磁盘组的模板以及卷。

可以使用 ASMCMD 启动和关闭 ASM 实例。支持的启动选项包括:

  • --nomount(在不挂载磁盘组的情况下启动 ASM 实例)
  • --restrict(启动 ASM 实例并限制数据库使用)
  • --pfile <pfile.ora>(使用定制 pfile 启动 ASM 实例)

支持的关闭选项包括:

  • --immediate(立即执行关闭)
  • --abort(中止所有现有操作)

例子:使用 ASMCMD 关闭和启动 ASM 实例

[grid@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM1] ? 
[grid@rac1 ~]$ asmcmd
ASMCMD> shutdown --abort
ASM instance shutdown
Connected to an idle instance.
ASMCMD> startup
ASM instance started

Total System Global Area 1135747072 bytes
Fixed Size                  2260728 bytes
Variable Size            1108320520 bytes
ASM Cache                  25165824 bytes
ASM diskgroups mounted

Disk Group

磁盘组是一个或多个磁盘的逻辑分组,ASM 将其作为一个集合来管理。每个磁盘组都包含与自身相关联的元数据。在概念上,ASM 磁盘组类似于存储区域网络(SAN)中的逻辑卷。

从磁盘组内分配文件空间。磁盘组中存储的文件的内容将在该磁盘组的磁盘中平均分布或条带化,以便消除热点并在各磁盘上提供一致的性能。每个ASM 文件都完全包含在一个磁盘组中。但是,一个磁盘组可以包含属于多个数据库的文件,而一个数据库可以使用来自多个磁盘组的不同文件。

磁盘组的关键属性是其冗余设置。有三种可能的磁盘组冗余设置:

  • 外部冗余(External),ASM 不提供任何镜像,磁盘都假设为高度可靠。
  • 正常冗余(Normal),ASM 默认支持镜像,从而保证在较不可靠的存储上实现数据完整性。
  • 高冗余(High),ASM 默认支持三重镜像,从而更好地保证数据完整性。

ASM 最多支持创建 63 个磁盘组。

ASM Disks

ASM 磁盘组包含一个或多个 ASM 磁盘。ASM 磁盘必须可由集群中所有节点的 ASM 所有者读取和写入。

ASM 磁盘可以是磁盘上的分区,但是 Oracle 强烈建议不要与其它应用程序共享 ASM 使用的物理磁盘。这是因为在应用 ASM 条带化和镜像策略时,磁盘组内的各个 ASM 磁盘的 I/O 性能必须相似且一致,才能获得最佳性能。在 ASM 和其它应用程序之间共享设备会难以确保磁盘性能相似且一致。

集群中不同节点上的 ASM 磁盘的 O/S 设备名称不必相同。ASM 通过读取 ASM 磁盘的标头来识别磁盘组的成员。

通常,ASM 磁盘就是后端存储分配给主机的分区。另外,ASM 磁盘还可以是远程 NFS 文件。

Allocation Units

在 ASM 磁盘内,空间划分为分配单元(AU)。AU 默认大小是 1 MB。创建磁盘组时可以设置 AU 大小,创建后无法更改磁盘组的 AU 大小。

允许的AU 大小: 1、2、4、8、16、32 或64 MB 。

Oracle 建议将磁盘组的分配单元(AU)大小设置为 4 MB。

ASM Files

  • ASM 文件是由 AU 组成的 ASM 区的集合

  • 对数据库内核显示为普通文件

  • 每个ASM 文件都具有唯一的系统生成的名称,以 “+” 开头,格式为:+diskgroup/dbname/file_type/file_type_tag.file.incarnation,其中 +diskgroup 为磁盘组名称;dbname 为数据库的 DB_UNIQUE_NAME 参数值;file_type 为创建的文件类型,比如CONTROLFILE/DATAFILE/ONLINELOG/ARCHIVELOG/TEMPFILE/BACKUPSET/FLASHBACK 等等;file_type_tag 为文件类型的标签,比如表空间对应的通常为该表空间名称;file.incarnation 为文件编号+incarnation,用来确保文件的唯一;例如:+DATA/orcl/datafile/system.256.689832921

  • 可以与可选的文件名别名相关联,例如,+DATA/dbfiles/mydb/system01.dbf

  • 在磁盘组的磁盘中平均分布

  • 根据磁盘组中定义的策略进行镜像

完全限定的 ASM 文件名表示一个层次结构,其开头是加号与磁盘组名称的组合。磁盘组名称后是数据库名称和文件类型。最后的元素由标记名称、文件编号和化生编号组成。

ASM 本身支持大多数与数据库相关的文件类型,例如数据文件、日志文件、控制文件、RMAN 备份及其它文件。在 11gR2 之前,ASM 仅支持与 Oracle 数据库相关的文件,无法用于存储和管理跟踪文件和告警日志、Oracle 二进制文件、Oracle Cluster Registry (OCR) 和集群仲裁磁盘。Oracle 11gR2 提供在 ASM 上运行通用文件系统的方式,从而消除了上述限制。

例子:查看数据库的表空间及对应的数据文件

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- ------------------------------------------------------------
USERS      +DATA/stone/datafile/users.259.893370691
UNDOTBS1   +DATA/stone/datafile/undotbs1.258.893370691
SYSAUX     +DATA/stone/datafile/sysaux.257.893370691
SYSTEM     +DATA/stone/datafile/system.256.893370691
EXAMPLE    +DATA/stone/datafile/example.265.893370807
TS01       +DATA/stone/datafile/ts01.dbf

例子:增加一个表空间及数据文件

SQL> create tablespace ts02 datafile '+DATA';

Tablespace created.

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- ------------------------------------------------------------
USERS      +DATA/stone/datafile/users.259.893370691
UNDOTBS1   +DATA/stone/datafile/undotbs1.258.893370691
SYSAUX     +DATA/stone/datafile/sysaux.257.893370691
SYSTEM     +DATA/stone/datafile/system.256.893370691
EXAMPLE    +DATA/stone/datafile/example.265.893370807
TS01       +DATA/stone/datafile/ts01.dbf
TS02       +DATA/stone/datafile/ts02.268.898602153

Extent Maps

ASM 通过称为区映射的元数据跟踪文件的分布。区映射是一个表,将文件中的数据区映射到磁盘上的分配单元。

文件区与分配单元之间的关系如下所示:

  • 1 个 AU 用于前 20000 个区(0-19999)
  • 4 个 AU 用于接下来的 20000 个区(20000-39999)
  • 16 个 AU 用于 40000 以上的区

将可变大小的区与大型分配单元结合使用,可满足非常大的 ASM 文件的需要。

Striping Granularity

在 ASM 中,条带化主要有两个目的:

  • 在磁盘组的所有磁盘中执行 I/O 负载均衡。
  • 改善 I/O 等待时间。

粗粒度条带化在磁盘组的各磁盘中分布分配单元,为磁盘组提供负载均衡。分配文件时,ASM 会在所有磁盘中平均分布分配单元。

对于前 20000 个区,区大小等于 AU 大小。从第 20001 个区到第 40000 个区,一次分配 8 个区,区大小等于 4 倍 AU 大小。如果 AU 大小为 1 MB,这意味着 ASM 文件将一次增大 32 MB (8 * 4 * 1 MB) 。如果文件采用粗粒度条带化,则将在 8 个区中进行条带化,条带大小为 1 AU。条带化始终在 AU 级别进行,而不是在区级别。因此,无论文件多大,粗粒度文件的每个 AU 都与该文件的前一个 AU 所在的磁盘不同。在第 40000 个区之后,仍旧是每次分配 8 个区,但区大小等于 16 倍 AU 大小。

细粒度条带化将数据区拆分为 128 KB 的块,然后在许多磁盘中分布每个区的负载,从而改善特定类型文件的等待时间。默认情况下,细粒度条带化用于控制文件和联机重做日志文件。

ASM Failure Groups

在磁盘组内,可以将一些磁盘归到故障组中。故障组是指定 ASM 镜像操作的硬件边界的一种方式。

可以将连接到一个磁盘控制器的所有磁盘指定在一个故障组内。这样就可以将文件区镜像到其他控制器的磁盘上。

故障组可以用于避免单个磁盘、磁盘控制器、I/O 网络组件以及整个存储系统的故障。

例子:一个有八个磁盘的正常冗余磁盘组,其中的磁盘分布在两个故障组中

img

红块表示一个包含五个区的文件,这些区在条带化后,分布在磁盘组(共八个磁盘)的五个磁盘中。蓝块表示文件区的镜像副本。无论区在各个磁盘和故障组中如何分布,每个区在一个故障组中仅有一个副本。

分配文件时,主区的分配用于保证性能,辅助区的分配用于保证完整性。默认情况下,所有数据库读取都针对主区进行。

如果磁盘H发生故障,则将根据其镜像在正常磁盘上重新创建该磁盘包含的区。

img

区 3 和 5 的正常副本将复制到同一故障组中另一磁盘的空闲区域,区 5 将从磁盘 B 复制到磁盘 F,区 3 将从磁盘 C 复制到磁盘 G。

磁盘发生故障后的最后一步是 ASM 从磁盘组中删除故障磁盘。在删除磁盘时,要被删除磁盘上的区首先会复制到可用磁盘上。

Managing Disk Groups

ASM 实例的主要目的是管理磁盘组和保护其数据。

例子:创建磁盘组和删除磁盘组

[grid@rac1 ~]$ sqlplus / as sysasm

SQL> create diskgroup dgroupA normal redundancy
  2  failgroup controller1 disk
  3    '/dev/raw/raw5' name diskA1 size 1G,
  4    '/dev/raw/raw6'
  5  failgroup controller2 disk
  6    '/dev/raw/raw7',
  7    '/dev/raw/raw8';

Diskgroup created.

SQL> drop diskgroup dgroupA including contents;

Diskgroup dropped.

例子:创建一个磁盘组,然后向磁盘组中添加磁盘

SQL> create diskgroup dgroupA normal redundancy
  2  failgroup controller1 disk
  3    '/dev/raw/raw5' name diskA1 size 1G
  4  failgroup controller2 disk
  5    '/dev/raw/raw7';

Diskgroup created.

SQL> alter diskgroup dgroupA add disk '/dev/raw/raw8' name A8;

Diskgroup altered.

例子:从磁盘组中删除磁盘

SQL> alter diskgroup dgroupA drop disk A8;

Diskgroup altered.

例子:从磁盘组中删除磁盘,并增加一个故障组,包含一个磁盘

SQL> alter diskgroup dgroupA
  2  drop disk diskA1
  3  add failgroup controler3 disk '/dev/raw/raw6' name A6;

Diskgroup altered.

例子:取消删除磁盘组中的磁盘

SQL> alter diskgroup dgroupA undrop disks;

Diskgroup altered.

Disk Group Attributes

当创建或更改 ASM 磁盘组时,都可以使用 CREATE DISKGROUPALTER DISKGROUP 命令新增的 ATTRIBUTE 子句更改其属性:

  • ASM 允许使用在创建磁盘组时指定的不同分配单元(AU)大小。AU 大小可以是1、2、4、8、16、32 或64 MB。
  • 可以用分钟(M)、小时(H) 或天(D)为单位指定 DISK_REPAIR_TIME。如果省略单位,则使用默认值H。如果省略此属性,则使用默认值 3.6 H。可以使用 ALTER DISKGROUP ... DISK OFFLINE 语句覆盖此属性。
  • 还可以为指定的模板指定冗余属性。
  • 还可以为指定的模板指定条带化属性。
NamePropertyValuesDescription
au_sizeCreate, Alter1|2|4|8|16|32|64 MBSize of allocation units in the disk group
compatible.rdbmsCreate, AlterValid database versionFormat of messages exchanged between DB and ASM
compatible.asmCreate, AlterValid ASM instance versionFormat of ASM metadata structures on disk
compatible.advmCreate, AlterValid ASM instance versionAllows Oracle ASM volumes in disk group
disk_repair_timeCreate, Alter0 M to 2^32 DLength of time before removing a disk once OFFLINE
template.tname.redundancyAlterUNPROTECT|MIRROR|HIGHRedundancy of specified template
template.tname.stripeAlterCOARSE|FINEStriping attribute of specified template

对于每个已定义的磁盘组,可以通过 V$ASM_ATTRIBUTE 视图查看所有已定义的属性。

例子:通过 V$ASM_ATTRIBUTE 查看 ASM 磁盘组属性

SQL> select name,value from v$asm_attribute;

NAME                                               VALUE
-------------------------------------------------- ----------------------------------------
disk_repair_time                                   3.6h
au_size                                            1048576
sector_size                                        512
compatible.asm                                     11.2.0.0.0
compatible.rdbms                                   10.1.0.0.0

Troubleshooting

Oracle Clusterware Log

告警日志:CRS_home/log/hostname/alerthostname.log,其中 CRS_home 为 Oracle Clusterware 的安装目录,hostname 为主机名。

crsd 进程日志:CRS_home/log/hostname/crsd/

cssd 进程日志:CRS_home/log/hostname/cssd/

evmd 进程日志:CRS_home/log/hostname/evmd/

OCR 日志:CRS_home/log/hostname/client/

Checking the Status of the Oracle Clusterware Installation

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[grid@rac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.OCR.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.DATA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.FRA.dg
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.asm
               ONLINE  ONLINE       rac1                     Started
               ONLINE  ONLINE       rac2                     Started
ora.gsd
               OFFLINE OFFLINE      rac1
               OFFLINE OFFLINE      rac2
ora.net1.network
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.ons
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
ora.registry.acfs
               ONLINE  ONLINE       rac1
               ONLINE  ONLINE       rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac1
ora.cvu
      1        ONLINE  ONLINE       rac1
ora.oc4j
      1        ONLINE  ONLINE       rac1
ora.rac1.vip
      1        ONLINE  ONLINE       rac1
ora.rac2.vip
      1        ONLINE  ONLINE       rac2
ora.scan1.vip
      1        ONLINE  ONLINE       rac1
ora.stone.db
      1        ONLINE  ONLINE       rac1                     Open
      2        ONLINE  ONLINE       rac2                     Open
上次编辑于:
贡献者: stonebox