深入理解Oracle RAC 12C
第1 章
Oracle RAC 概述
在 Oracle12cR1 的集群件中则提供了另外一个新特性,叫作Flex 集群。如果使用此选
项,叶节点不需要直接访问共享存储,而中心节点则需要直接读写共享存储,中心节点就
像在旧版本11gR2 中的集群节点一样。在图1-2 中描述了Flex 集群的架构,其中服务器1
到服务器3 是直接访问存储的中心节点,而服务器4 是叶节点,它不连接到共享存储,并
依赖于一个中心节点来执行I/O 操作。在Oracle12.1 中,所有叶节点都需要和中心节点处
于同一个公共和私有网络中。
建议使用下面三个工具来验证硬件和软件配置是否满足 Oracle 集群件和RAC 的要求。
对于一个常规的 RAC 系统,使用RACCheck,这是RAC 配置审计工具,可以用来
审计RAC、CRS、ASM 以及GI 中各种重要的配置(My Oracle Support,MOS 文档
ID:1268927.1)。(译者注:MOS 文档可以从https://support.oracle.com 网站中查到,
下同。)
对于 OracleExadata 数据库服务器,运行Exachk,这是对OracleExadata 数据库服务
器进行健康检查的工具(MOS 文档ID: 1070954.1)。
对于 Oracle Database Appliance(一体机),使用ODAchk,它是用于ODA 一体机配
置审计的工具(MOS 文档ID:1485630)。
Oracle RAC 的缓存融合 如果一个 RAC 节点无法从其他RAC 节点获得心跳响应,并超过预定的时间阈值(默认为30 秒),Oracle 集群件会确定在这两个RAC 节点之间互联网络存在了问题,因此在这 两个节点的RAC 实例之间的通信可能会失败,在集群中可能发生裂脑(split-brain)的情况 。其结果是,集群件将触发 节点驱逐事件 ,其中的一个RAC 节点将会重新启动, 这样就能防止RAC 实例在与其他RAC 节点上的实例在没有通信的情况下,独立做任何磁盘的I/O操作。这种方法我们称之为I/O 保护(Fencing) 。 在 Oracle RAC 环境中,数据库的所有实例都访问一个共同的全局数据缓冲区,每个实例上的查询都可以得到一个数据块的最新副本,被称为“主副本”,即使这个数据块刚刚被另一个RAC 实例修改过。这就是所谓的全局缓存的一致性。在全局缓存中,因为数据块是由所有RAC 实例共享的,所以就必须协调所有实例进行数据块访问。 在RAC 实例内部协调访问的这些资源是由闩锁(latch)和锁完成的,这点与单实例数据库相同。对于不同RAC实例之间共享资源的同步和协调,由Oracle 的缓存融合负责,它来实现全局缓存的一致性。 1. 全局锁协调不同实例对共享资源的访问。 2. 虽然实际上每个实例的数据缓冲区是分开的,但是每个RAC 实例都可以通过私有互联网络传输数据块的方式,从其他实例的数据缓冲区中获得数据块的主副本。 自从引入了缓存融合第二个版本,Oracle RAC 数据库使用这两个RAC 服务来协调和同步实例的请求: 全局缓存服务(GCS)和全局队列服务(GES) ,其中 GES 使用全局资源目录(GRD)作为中央存储库,GRD 中记录了数据块的锁状态信息 。这两个服务是OracleRAC 的组成部分,它们也依赖于集群件和私有互联网络进行RAC 实例之间的通信。GES和GCS 都协调着RAC 实例访问数据库的共享资源。 GES 管理队列相关的资源,如在RAC实例之间的全局锁,GCS 控制着数据块资源的全局访问,保证全局的数据缓存一致性。 在 Oracle RAC 中,多个数据库实例共享访问系统资源,如数据缓冲区中的数据块和队列信息。RAC 实例之间的对这些共享资源的访问需要进行协调,以避免冲突。为了协调和管理共享这些资源的访问,诸如数据块的ID、哪个RAC 实例保存了该数据块的最新版本、这个 数据块在每个数据库实例中被持有的锁定模式,这类信息都被记录在一个叫作全局资源目录(GRD)的地方 。这些信息由GCS 和GES 维护和使用,保证全局数据缓存的一致,同时协调对数据块和锁等资源的访问。 GCS 是RAC 上实现Oracle RAC 缓存融合的服务之一。在Oracle RAC 环境中,一个实例的数据块可以由另一个实例请求和共享。 GCS 就负责管理RAC 实例之间的数据块共享。它利用记录在GRD 条目中的数据块的状态信息,协调RAC 实例对数据块的访问。GCS负责RAC 实例之间的数据块传输 。就像为 GCS 管理数据块的资源一样,GES 管理着全局队列的资源。由GES 管理的队列资源包括库缓存锁、字典缓存锁、事务锁及表锁等。
RAC 的后台进程 从后台进程结构的角度来看,每个RAC 数据库实例都是一个单节点实例的超集。它们具有相同的后台进程和相同的共享内存结构,如系统全局区(SGA)和程序全局区(PGA)。除了这些,RAC 实例还有着其他一些专门用于GCS、GES 和全局缓存目录的后台进程和内存结构。这些进程如下所述。 LMS:锁管理服务器进程 LMON:锁定监控进程 LMD:锁监视器守护进程 LCK:锁进程 DIAG:诊断守护进程 另外,Oracle 11gR2 引入了一些新的RAC 进程,这些进程包括如下几项。 ACMS :内存服务器原子控制文件。 GTXn :全局事务进程。 LMHB :LM 心跳监视器进程(监视 LMON、LMD、LMSn 等进程)。 PING :检查集群中各个实例间的私有网络通信状况。 RMS0 :RAC 管理服务,完成对RAC 的一些管理任务,比如当一个新的实例加入集群后,给这个实例创建相关的资源。 RSMN :远程从(Slave)进程监视器。
在网格架构软件的安装期间,需要配置以下资源:ASM 实例、数据库服务、虚拟IP, (VIP)服务、SCAN 、SCAN 监听、Oracle 通知服务(ONS),以及Oracle 网络监听,并将它们在Oracle 集群件中注册为集群资源并由集群件管理。在创建完RAC 数据库的时候,该数据库也同样注册为集群资源并由Oracle 集群件管理。当Oracle 集群件启动的时候,它会同时启动数据库;在运行期间,一旦数据库发生故障,集群件会尝试再次启动数据库。 |
|
Oracle Cluster Software 包括下列组件:Event Management (EVM)、Cluster Synchronization Services (CSS)、Cluster Ready Service (CRS) ,即对应着Clusterware若干进程中最重要的3个:CRSD、CSSD、EVMD。在安装clusterware的最后阶段,会要求在每个节点执行root.sh脚本, 这个脚本会在/etc/inittab文件的最后把这3个进程加入启动项,这样以后每次系统启动时,Clusterware也会自动启动,其中EVMD和CRSD两个进程如果出现异常,则系统会自动重启这两个进程,如果是CSSD进程异常,系统会立即重启。
节点层:
olsnodes
参数 -n -i -p
网络层:
oifcfg
四个子命令可以通过 oifcfg -help 查看下
iflist 显示网口列表
getif 可以获得单个网口信息
setif 配置单个网口
delif 删除网口
集群层:
crstcl 、 orccheck 、 ocrdump 、 ocrconfig
应用层:
srvctl 、 onsctl 、 crs_stat
Oracle 集群件同时会监控它管理的资源的状态,包括 RAC 数据库、 ASM 实例、数据
库服务、监听、 VIP 地址、 ASM 磁盘组和应用程序。 它们都作为集群就绪服务( CRS )的
资源存在于集群中 。 Oracle 集群件会周期性地检查这些资源的状态,如果发现有资源失败
是离线状态,就会尝试一定次数来重新启动它们(取决于资源的类型)。 Oracle 集群件将这
些 CRS 资源的状态存储在共享存储的 OCR 上,这样集群中的每个 RAC 节点都可以访问到
它 。 Oracle 集群件通过这些资源配置和状态信息来管理相应的资源。我们可以使用以下的
crsctl 命令来检查这些资源的状态:
CRSCTL 是用于集群层的管理 , cluster control 用的,它管理的是 cluster level 的内容,如 crsd cssd css 等进程和配置的管理
CRSCTL is an interface between you and Oracle Clusterware, parsing and calling Oracle Clusterware APIs for Oracle Clusterware objects.
You can use CRSCTL commands to perform several operations on Oracle Clusterware, such as:
Starting and stopping Oracle Clusterware resources
Enabling and disabling Oracle Clusterware daemons
Checking the health of the cluster
Managing resources that represent third-party applications
Integrating Intelligent Platform Management Interface (IPMI) with Oracle Clusterware to provide failure isolation support and to ensure cluster integrity
Debugging Oracle Clusterware components
[grid@k2r720n1 ~]$ crsctl stat res -ts
SRVCTL 用来管理每个单独的资源 . 比如 instance asm listener vip ons gsd service .....
还可以使用 srvctl 命令来管理每个单独的资源。例如,要检查 RAC 数据库的状态:
grid@k2r720n1 ~]$ srvctl status database -d khdb
Instance khdb1 isrunning on node k2r720n1
Instance khdb2 is running on node k2r720n2
Use SRVCTL to manage configuration information. You can use SRVCTL commands to add, remove, start, stop, modify, enable, and disable a number of entities, such as databases, instances, listeners, SCAN listeners, services, grid naming service (GNS), and Oracle ASM.
Some SRVCTL operations modify the configuration data stored in the Oracle Cluster Registry (OCR). SRVCTL performs other operations, such as starting and stopping instances, by sending requests to the Oracle Clusterware process (CRSD), which then starts or stops the Oracle Clusterware resources.
第2 章
Oracle 集群件堆栈的管理和故障诊断
最早在Oracle 9i 中,Oracle 就在Linux 平台上推出了集群管理软件,叫作Oracle 集群件管
理服务(Oracle Clusterware Management Service)。在Oracle 10.1 中,所有平台上都发布了通用
的集群管理软件,叫作集群就绪服务(CRS),这个名字在Oracle 10.2 中被改为Oracle Clusterware
并沿用至今.
Oracle 集群件把多个服务器组合成集群,为它们之间提供通信,于是这些服务器就可以像单个逻辑服务器一样一起工作,对外提供服务。Oracle 集群件管理集群资源,为Oracle RAC 数据库提供基础服务。这些资源包括Oracle ASM 实例、数据库实例、Oracle 数据库、虚拟IP(VIP)、单客户端访问名称(SCAN)、SCAN 监听、Oracle 通知服务(ONS),以及Oracle 网络监听。Oracle 集群件负责资源的启动和故障转移。
Oracle 集群件的存储组件
Oracle 集群件包括它的存储结构和在每个集群节点上运行的一组进程。存储结构由两
部分组成:Oracle 集群注册表(OCR)和表决磁盘(Voting Disk,简称VD)外加两个本地
文件——Oracle 本地注册表(OLR)和网格即插即用(GPnP)配置文件。
OCR 用于存储集群配置的详细信息。它存储Oracle 集群件控制的资源的相关信息。这些
资源包括Oracle RAC 数据库和实例、监听和虚拟IP 地址(VIP),如SCAN VIP 和本地的VIP。
表决磁盘(VD)记录了集群的成员信息。Oracle 集群件使用VD 确定哪些节点是集群
的成员。每一秒集群节点上的Oracle 集群同步服务守护进程(OCSSD)在VD 中更新节点
的状态。当RAC 节点之间的互联心跳网络发生故障时,集群使用VD 来确定哪些RAC 节
点应该留在集群中。
为了避免单点故障,Oracle建议应该配置多个OCR,最多可以同时有5 个OCR。此外,应该至少有3 个VD,并始终保持VD 的个数为单数。在Linux 中,/etc/oracle/ocr.loc 文件记录了OCR 的位置:
$ cat /etc/oracle/ocr.loc
ocrconfig_loc=+VOCR
local_only=FALSE
此外,可以使用下面的命令得到VD 的位置:
$ ./crsctl query css votedisk
Oracle 集群件的两个文件:OLR 和GPnP 配置文件。都存储在本地文件系统中,放在
每个RAC 节点的网格主目录中。OLR 是OCR 的本地版本,它存储了本地节点元数据,由
Oracle 高可用性服务守护进程(OHASD)来管理。OLR 存储的信息比OCR 少,但OLR
可以从本地存储中直接提供元数据,而不需要访问存储在ASM 磁盘组中的OCR。每个节
点都有自己的OLR 配置文件,它的默认路径为$GIHOME/cdata/
记录在/etc/oracle/olr.loc 文件中,也可以通过ocrcheck 命令来得到:
$ cat /etc/oracle/olr.loc
olrconfig_loc=/u01/app/12.1.0/grid/cdata/knewracn1.olr
crs_home=/u01/app/12.1.0/grid
$ ocrcheck -local -config
Oracle Local Registry configuration is :
Device/File Name: /u01/app/12.1.0/grid/cdata/knewracn1.olr
GPnP 配置文件记录了很多有关集群的重要信息,比如网络配置文件和VD。当在集群
中添加节点的时候,集群需要使用到GPnP 配置文件中的信息.
集群软件堆栈
从11gR2开始, 重新划分为两个软件堆栈, 高可用服务堆栈和CRS堆栈.
高可用性服务堆栈
是Oracle集群件的底层服务堆栈, 基于OHASD 守护进程. OHASD负责启动集群中的所有其它进程. OHASD维护并使用存放在OLR中的信息. (OCR存放在ASM中, OHASD先于ASM, 是负责启动ASM的, 所以要有本地版本)
高可用性服务堆栈包括下面守护进程和服务:
GPnP 守护进程(GPnPD):这个守护进程访问并维护GPnP 配置文件,并确保所有节
点都有当前的配置文件。在集群的初始化准备启动的过程中,由于此时ASM 并不可用,
所以存放在ASM 磁盘组中的OCR 也是不可用的,这时GPnP 配置文件就提供了用于启动
集群的足够信息。
Oracle 网格命名服务(GNS):这个进程提供了集群的命名解析。在12cR1 版本中,相
比较单个集群而言,GNS 可用于多个集群。
网格进程间通信(GIPC):这个守护进程支持网格架构使用冗余的互联网络通信。
多播域名服务(mDNS):这个守护进程与GNS 一起进行名称解析。
另外还有系统监控服务守护进程(osysmond)和集群日志记录器服务守护进程
(ologgerd)。
CRS 堆栈
CRS 堆栈是Oracle 集群件的上层堆栈,依赖于高可用性集群服务堆栈的支持。CRS 堆
栈包括下列守护进程和服务。
CRS:此服务主要负责管理高可用性的操作。CRS 的守护进程(CRSD)管理集群资源
的启动、停止、监视和故障切换操作。CRS 维护OCR 中的配置信息。对于集群中的Oracle
RAC 数据库,CRS 管理着这个数据库的相关资源,包括Oracle 数据库及其实例、监听、
ASM 实例及虚拟IP 等。在Linux/UNIX 中运行此服务的进程是crs.bin,在Windows 中是
OracleOHService 服务。
CSS:此服务管理和监控集群中的节点成员信息,并在VD 中更新节点的状态信息。
在Linux/UNIX 中运行此服务的进程是ocssd.bin,在Windows 中是OracleOHService 服务
(ocssd.exe)。
CSS 代理:这个进程负责监控、启动和停止CSS 服务。在Linux/UNIX 中运行此服务
的进程是cssdagent,在Windows 中是cssdagent.exe 进程。
CSS 监视器:当CSS 服务出现问题或者出现CPU 饥饿(starvation)、OS 挂起,CSS
监视进程将和cssdagent 进程一起提供I/O 保护(Fencing),通过重新启动的方式保证数据
的完整性。在Linux/UNIX 中运行此服务的进程是cssdmonitor 进程,在Windows 中是
cssdmonitor.exe 进程。cssdagent 和cssdmonitor 两个进程都是11gR2 中引入的新功能,取代
了以前在11gR1 中的Oracle 监视器守护进程(oprocd)。
集群时间同步服务(CTSS):这是11gR2 中引入的新的守护进程,负责处理集群中所
有节点之间的时间同步。
octssd.bin,在Windows 中是octssd.exe 进程。
事件管理(EVM):这个后台进程发布事件给集群中的所有成员。在Linux/UNIX 中该
进程的名称是evmd.bin,而在Windows 中是evmd.exe。
Oracle 通知服务(ONS):这是一个发布和订阅服务,负责快速应用通知(FAN)事件
的通知。这项服务在Linux/UNIX中的进程名称是ons,在Windows 中进程的名称是ons.exe。
Oracle ASM:为Oracle 集群件和Oracle 数据库提供卷管理器和共享存储管理的功能。
集群件代理进程:包括 Oracle 代理(oraagent)和Oracle 根代理进程(orarootagent)。
其中,oraagent 负责管理所有属于Oracle 用户的ohasd 资源,orarootagent 负责管理所有属
于root 用户的ohasd 资源。
集群件启动顺序
当 RAC 节点启动时,Oracle 集群件随之自动启动。这个启动过程经历了若干阶段。图
2-3 显示了在启动整个网格架构堆栈和集群件管理的资源的时候,所经过的不同阶段和启动
的顺序。
图 2-312cR1 集群件进程的启动顺序
第0 级:通过操作系统的init 进程,集群件自动启动。init 进程仅派生init.ohasd 进程,
init.ohasd 再启动OHASD 进程。这个派生的配置写在/etc/inittab 文件里:
$cat /etc/inittab|grep init.d | grep -v grep
h1:35:respawn:/etc/init.d/init.ohasd run >/dev/null 2>&1
由于Oracle Linux 6.x 和Red Hat Linux 6.x 弃用了inittab 文件,所以用来配置和启动
init.ohasd 进程的文件是/etc/init/oracle-ohasd.conf:
$ cat /etc/init/oracle-ohasd.conf
......
start on runlevel [35]
stop on runlevel [!35]
respawn
exec /etc/init.d/init.ohasd run >/dev/null 2>&1
文件中的init.ohasd run 部分启动了ohasd.bin 后台进程:
$ ps -ef | grep ohasd | grep -v grep
root 4056 1 1 Feb19 ? 01:54:34 /u01/app/12.1.0/grid/bin/ohasd.bin reboot
root 22715 1 0 Feb19 ? 00:00:00 /bin/sh /etc/init.d/init.ohasd run
一旦OHASD 进程在第0 级启动以后,在接下来的第1~4 级,OHASD 会直接或间接
地启动集群件的其他进程,以及该集群件管理的其他资源。以下内容解释了集群在这4 个
等级中的启动顺序,如图2-3 中所示。
第 1 级:OHASD 直接派生4 个代理进程。
cssdmonitor:CSS 监视器进程
OHASD orarootagent:高可用性服务堆栈的Oracle root 代理进程
OHASD oraagent:高可用性服务堆栈的Oracle 代理进程
cssdagent:CSS 的代理进程
第 2 级:在这个阶段,OHASD oraagent 将派生5 个进程。
mDNSD:mDNS 守护进程
GIPCD:网格进程间通信进程
GPnPD:GPnP 配置守护进程
EVMD:事件监视器守护进程
ASM:监测ASM 实例的资源
然后,OHASDoraclerootagent 派生以下进程。
CRSD:CRS 守护进程
CTSSD:CTSS 守护进程
Diskmon:磁盘监视器守护进程(Exadata 存储服务器的存储)
ACFS:(ASM 集群文件系统)驱动程序
接下来,cssdagent 启动CSSD(CSS 守护程序)进程。
第 3 级:CRSD 派生两个CRSD 代理进程:CRSD orarootagent 和CRSD oracleagent。
第 4 级:在这个阶段,CRSD orarootagent 负责启动以下资源。
网络资源:公共网络
SCAN VIP
节点 VIP:每个节点的虚拟IP 地址
ACFS 注册表
GNS VIP:如果使用GNS 选项,对应的GNS 的虚拟IP 地址
然后,CRSD orarootagent 负责启动其他资源,包括如下项目。
ASM 资源:ASM 实例资源
磁盘组:用来管理/监控ASM 磁盘组。
数据库资源:用于监控和管理数据库和实例
SCAN 监听:SCAN 监听的地址是SCAN 的IP 地址
扫描 VIP:(单客户端访问名称)对应的虚拟IP 地址
监听:监听的地址是节点的虚拟 IP 地址
服务:数据库服务
ONS
eONS:ONS 增强
GSD:为了保持9i 的向后兼容性
GNS(可选):进行名称解析
因为集群配置和集群的成员信息存储在OCR 和表决磁盘中,当ASM 实例没有启动的时候,集群件是如何得到这些信息的?
在高可用性堆栈的启动过程中,Oracle 集群件并不是从OCR 中获取的集群配置,而是从OLR 和GPnP 中得到的。
两个组件存放在本地磁盘的$GRID_HOME 目录中,所以高可用性堆栈启动的时候,并不需
要ASM 实例和ASM 磁盘组。Oracle 集群件也不依赖于ASM 实例访问表决磁盘。
集群件管理
集群件的管理工具和实用程序
最常用的工具是集群件控制工具crsctl,这是一个命令行工具,用于管理Oracle 集群件。
$ crsctl -help
Usage: crsctl add - add a resource, type, or other entity
crsctl backup - back up voting disk for CSS
crsctl check - check a service, resource, or other entity
…
另一系列的命令行工具是基于srvctl 的实用程序。这些命令用于管理集群件中的Oracle 资
源。
srvctl 命令由4 个部分组成:
$ srvctl
除了crsctl 和srvctl 之外,还有其他一些工具:
oifcfg 是用来配置网络接口的命令行工具。
ocrconfig 是用来管理OCR 和OLR 的命令行工具。
ocrcheck 是用来检查OCR 状态的OCR 检查工具。
ocrdump 是Oracle 集群注册表的转储工具,可以用来转储内容的OCR。
OracleEM DB Control 11g 和OracleEM Grid Control 11g/12c 可以用来管理Oracle 集
群件环境。
crsctl 工具提供了手动启动Oracle 集群件的功能:可以启动集群中所有服务器或某几个
服务器的集群件堆栈。
$ crsctl start cluster [-all | - n server1[,..]]
例如:
$crsctl start cluster -all
$ crsctl start cluster -n k2r720n1
启动本机的Oracle 高可用性服务守护进程(OHASD)和集群件服务堆栈:
$crsctl start crs
在Linux / UNIX 平台上,这两个crsctl 启动命令都需要root 权限运行。如果OHASD
已经启动,crsctl start crs 命令会返回失败。
可以使用下面的命令来检查集群的状态:
$ crsctl check cluster {-all}
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
用下面的命令可以检查CRS 的状态(CRS包括OHAS和Cluster):
$ 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
下面的命令可以检查OHASD 的状态:
$GRID_HOME/bin/crsctl check has
CRS-4638: Oracle High Availability Services is online
使用下面的命令可以检查所有资源的当前状态。它取代了在11gR1 中和更早版本中的
crs_stat -t 命令。
[grid@knewracn1 ~]$ crsctl status resource -t
管理OCR 和表决磁盘
Oracle 提供了3 个工具来管理OCR:ocrconfig、ocrdump 和ocrcheck。ocrcheck 命令列
出了OCR 及其镜像的路径和状态。
在下面的例子中,OCR 文件存放在名为+VOCR 的ASM 磁盘组中,它的镜像文件存放
在+DATA1 磁盘组中。在11gR2 和12cR1 中,OCR 可以有多达5 个镜像副本。每份副本
都可以放在ASM 磁盘组或者集群文件系统中。
每4 个小时,集群中至少有一个节点会自动进行OCR 备份。备份文件存储在
$GRID_HOME/cdata/
信息,命令如下:
$GRID_HOME/bin/ocrconfig -showbackup
knewracn1 2013/03/02 07:01:37 /u01/app/12.1.0/grid/cdata/knewrac/backup00.ocr
knewracn1 2013/03/02 03:01:33 /u01/app/12.1.0/grid/cdata/knewrac/backup01.ocr
knewracn1 2013/03/01 23:01:32 /u01/app/12.1.0/grid/cdata/knewrac/backup02.ocr
knewracn1 2013/03/01 03:01:21 /u01/app/12.1.0/grid/cdata/knewrac/day.ocr
knewracn1 2013/02/20 02:58:55 /u01/app/12.1.0/grid/cdata/knewrac/week.ocr
knewracn1 2013/02/19 23:15:34
/u01/app/12.1.0/grid/cdata/knewrac/backup_20130219_231534.ocr
knewracn1 2013/02/19 23:05:26
/u01/app/12.1.0/grid/cdata/knewrac/backup_20130219_230526.ocr
.....
从备份文件中还原OCR 的步骤如下:
1. 使用ocrconfig –showbackup 命令确认备份信息。
2. 停止所有节点上的集群件。
3. 使用下面的命令进行OCR 的还原:
ocrconfig -restore file_name
4. 重启CRS,并使用cluvfy comp ocr 来检查OCR 的完整性。
使用下面的命令可得到表决磁盘的路径:
$ crsctl query css votedisk
## STATEFile Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 7141f13f99734febbf94c73148c35a85 (/dev/dm-8) [VOCR]
Located 1 voting disk(s).
管理 CRS 资源
查看节点应用状态:
srvctl status nodeapps –n server_name
添加节点:
在集群的一个节点上,执行cluvfy -pre完整性检查命令:
addNode.sh命令:
root用户新节点上执行 root.sh脚本,这个脚本初始化新节点的集群配置,并启动集群堆栈。
并用下面的命令来验证新节点(任一节点)
cluvfy stage –post nodeadd –n rac2
crsctl check cluster –all
olsnodes –n 列出集群中所有的节点
执行cluvfy -post完整性检查命令
删除节点:
crsctl unpin css –n rac3
deinstall -local
常见集群件启动问题的解决办法
OHASD启动失败
crsctl check cluster, 出现ohas高可用服务启动失败
看对应的守护进程启动是否失败 ohasd, /etc.init, /etc/inittab
检查自动启动配置:
crsctl config has
crsctl config crs
crsctl enable has
crsctl enable crs
检查守护进程是否存在
ps –ef|grep init.ohasd
检查日志:
$GRID_HOME/log/hostname/ohasd/ohasd.log
如果OLR损坏,用ocrconfig –local –restore $backup_location/…
CSSD启动问题
$GRID_HOME/log/hostname/cssd/ocssd.log
检查ocssd.log文件,查看cssd进程
ps –ef|grep cssd.bin
手动启动离线的资源:
crsctl start res ora.cssd -init
CRSD启动问题
$GRID_HOME/log/hostname/cssd/crsd.log
检查crsd.log文件,查看crsd进程, ocrcheck命令确认节点可以访问OCR文件。
ps –ef|grep crsd.bin
集群件的独占模式, crctl start crs –excl, 不需要表决磁盘和网络,就能启动到独占模式
诊断OCR问题
ocrcheck 完整性检查
ocrcheck –config 列出ocr磁盘的位置和名称
ocrcheck –local –config 列出LOR位置和名称
ocrdump转存到文本文件
检查操作系统日志
Linux: /var/log/message
/etc, /var/tmp目录下有./oracle的隐藏目录,有个大小为的套接字文件。
cluvfy进行集群健康检查
第3章
Oracle RAC运行实践
SCAN监听会分配最佳服务质量的实例,然后SCAN把连接重定向到本地VIP监听上。
参数remote_listener指定了SCAN监听的地址
参数local_listener指定了VIP监听的地址。
SCAN和SCAN监听
提高工作负载的管理,更快的故障切换
RAC中的故障切换
透明应用程序故障切换(TAF)
被动的故障运行时故障切换方法,如果当前实例失败,数据库自动切换到剩余的实例上.
快速连接故障切换(Fast Connection Failover FCF)
是一种主动的运行时故障切换技术,节点发生故障时,会转播到应用程序, 然后应用程序在遇到连接的相关错误前,会主动收回数据库连接.
TAF:
FAILOVER_MODE项分析
FAILOVER_MODE项是实现TAF的主要配置内容,下面对其进行描述.
METHOD: 用户定义何时创建到其实例的连接,有BASIC 和 PRECONNECT 两种可选值
BASIC: 客户端通过地址列表成功建立连接后,即仅当客户端感知到节点故障时才创建到其他实例的连接
PRECONNECT: 预连接模式,是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上
上述两种方式各有优劣,前者建立连接的开销相对较小,但failover时会产生延迟,而后者正好与前者相反
TYPE: 用于定义发生故障时对完成的SQL 语句如何处理,其中有2种类型:session 和select
select:使用select方式,Oracle net会跟踪事务期间的所有select语句,并跟踪每一个与当前select相关的游标已返回多少行给客户端。此时,假定select查询已返回500行,客户端当前连接的节点出现故障,Oracle Net自动建立连接到幸存的实例上并继续返回剩余的行数给客户端。假定总行数为1500,行,则1000行从剩余节点返回。
session: 使用session方式,所有select查询相关的结果在重新建立新的连接后将全部丢失,需要重新发布select命令。
上述两种方式适用于不同的情形,对于select方式,通常使用与OLAP数据库,而对于session方式则使用与OLTP数据库。因为selec方式,Oracle 必须为每个session保存更多的内容,包括游标,用户上下文等,需要更多的资源。
其次,两种方式期间所有未提交的DML事务将自动回滚且必须重启启动。alter session语句不会failover。
临时对象不会failover也不能被重新启动。
RETRIES: 表示重试的次数
DELAY:表示重试的间隔时间
#客户端tnsnames配置 (如果用srvctl add service添加了服务端的service,就不需要在客户端配)
GOBO4_TAF =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(rac-scan)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = GOBO4)
(FAILOVER_MODE = #FAILOVER_MODE项参数
(TYPE = session)
(METHOD = basic)
(RETRIES = 180
(DELAY = 5)
)
)
)
SQL> select name, failover_method,failover_type, failover_retries,goal, clb_goal,aq_ha_notifications from dba_services;
srvctl config service -d ccbperf
srvctl add service
In an Oracle Real Application Clusters (Oracle RAC) environment, a service can span one or more instances and facilitate workload balancing based on transaction performance. This provides end-to-end unattended recovery, rolling changes by workload, and full location transparency. Oracle RAC also enables you to manage several service features with Enterprise Manager, the DBCA, and the Server Control utility (SRVCTL).
这个添加的service是Failover中的service服务,也就是你在DBCA建库的过程中可以同时使用DBCA工具创建的service服务。
这个服务实质就是TAF(Transparent Application Failover),不过它与TAF的区别是不用在客户端的tnsnames.ora文件中配置,而是在服务端配置好了。功能其实就是当RAC集群中的一个节点宕了,可以自动转移到另外一个节点上去。
Examples
Use this example syntax to add the gl.example.com service to the my_rac database with Fast Application Notification enabled for OCI connections, a failover method of BASIC, a Connection Load Balancing Goal of LONG, a failover type of SELECT, and 180 failover retries with a failover delay of 5 seconds:
srvctl add service -db my_rac -service gl.example.com -notification TRUE -failovermethod BASIC -failovertype SELECT -failoverretry 180 -failoverdelay 5 -clbgoal LONG
Use this example syntax to add a named service to a database with preferred instances and available instances and enabled for TAF:
srvctl add service -db crm -service sales -preferred crm01,crm02 -available crm03 -tafpolicy BASIC
Policy-Managed数据库
理论上的例子
例如,如果1个集群,总共有8个节点组成,并且支持3个RAC数据库。每个数据库将定义服务器的最小和最大数目。
假设DB1定义最小4台、最多6台服务器(重要性为10),
假设DB2定义最小2台、最多3台服务器(重要性为7),
假设DB3定义最小2台、最多3台服务器(重要性为5)。
初始8节点将被配置成节点1-4被分配给DB1,节点5-6被分配给DB2,节点7-8被分配给DB3。如果节点3由于某种原因发生故障,系统将分配节点7或8给DB1,因为其比DB3有更高的重要性而且最小需要4台服务器,即使将导致DB3降到最小服务器水平以下。如果节点3被重新激活,将被立即分配给DB3以使数据库恢复到最小所需的服务器数。
如果第9个节点被添加到集群,将被分配给DB1,因为其重要性最高而且未满足最大服务器数。
临时表空间
在创建临时文件时,应该创建和实例数目一样多的临时文件
select inst_id,file_id, extents_cached,extents_used form gv$temp_extent_pool;
INST_ID FILE_ID EXTENTS_CACHED EXTENTS_USED
---------- ---------- -------------- ------------
1 1 366257 7
2 1 157932 26
pga_aggregate_limit, 参数pga_aggregate_target并不是硬性限制,数据库分配的PGA可能远远超过pga_aggregate_target, 但不能超过pga_aggregate_limit.
第4章
RAC 12c的新特性
Oracle Flex集群
多租户,可插拔数据库CDB,PDB
第 5 章
存储和ASM管理
如果决定用外接SAN存储配置RAID1+0, 可用选择外部冗余
旧存储迁移到新存储
ASM集群文件系统
第6章
设计应用上的问题
一些在设计上的小错误在单实例数据库上造成的性能问题很小,但是在RAC环境下会很棘手. 例如,不恰当的序列缓存值设置, 单实例数据库上造成影响很小,但是在RAC环境下可能会导致整个集群挂起.
局部性插入操作
大量的同步插入操作是RAC环境中最常见的问题之一. 索引热块竞争. 在单实例环境中, 叶块分裂会有等待事件buffer busy wait, cache buffer chain等待. 在RAC环境中, 当前最右边的叶块必须在不同实例之间被调动, 导致全局缓存数据调动增加. 另外, 用户会话要不停获取释放全局缓存锁导致gc buffer busy acquire和gc buffer busy等待事件而受到影响. 在RAC环境下,全局等待事件引发的等待量级远远大于单实例实数据库上的等待,往往会导致整个应用失败. 这种现象叫做右边索引增长竞争.
解决:
以索引的一个或多个列作为分区键,用哈希分区方式将索引分区. 这样一个索引会产生多个索引树.竞争被分散.
用哈希分区方式将表分区.
反向索引…
…
大量的TRUNCATE和DROP命令
在RAC环境下,由DDL命令引发的全局等待会导致严重的性能问题.
序列缓存
…
空闲块链表和自动段空间管理
…
过多的提交
需要避免过多的提交, 避免自动提交, 提交必须在逻辑事务边界上.
gc buffer busy wait等待事件
长时间没有提交的事务
RAC环境中, 事务可能在任何一个实例中产生, 所以当数据块被另一个实例访问时, 回滚块头和回滚块必须在不同的实例间调动. 这会导致更多的全局缓存工作量. 如果在一个很繁忙的表中有一个长时间没有提交的事务, 会很快上升到集群挂起.
除此之外,一个块如果被认为是很繁忙的,这个块并不能马上被调动到另一个实例. 全局缓存调动的延迟会引发更多的gc buffer busy等待事件.
本地访问
gc buffer busy等待事件
小表的更新
gc buffer busy等待事件
索引设计
DML, 很多重要的表尽量少建索引. 只要块里有空闲空间,新的行数据就会被加到这个堆表的块里, 但是索引里的新数据必须被加到指定的索引块里. 如果一个表有许多索引, 而且更新表的会话来自不同的实例, 索引就会变成热块, 导致过多全局缓存活动.
低效的执行计划
过多的平行扫描
…
全表扫描
…
应用之间的关联性
…
应用改变的实施
在RAC数据库中,因为library cache lock和library cache pin等待被全局定义为队列, 更改频繁使用的包(或是相关联事务)会导致全局队列等待. 会话会在全局缓存锁上排队等待导致数据库挂掉.
第7章
管理和调优一个复杂的RAC环境
共享Oracle主目录优缺点
实例锁定
脑裂案例和如果避免
节点驱逐, 自我防御 ….
减少, 避免脑裂的一些方法:
理解, 解决, 防止节点驱逐
节点驱逐---最重要/普遍的原因
RAC数 据 库 性能 调 优: 一个迅速简单的途径
第8章
RAC的备份与恢复
第9章
网 络 实 践
第10章
优化RAC数据库
在RAC中,一个实例的问题可能影响到其它实例,除了单实例的等待事件,RAC引入了大量RAC特定的等待事件. RAC数据库的优化也基于时间模型.
缓存融合介绍
Cache Fusion: 所有实例高速缓存区的内存共享出来,以便创造一个融合缓冲区.