ITPub博客

首页 > 数据库 > Oracle > 深入理解Oracle RAC 12C

深入理解Oracle RAC 12C

原创 Oracle 作者:pentium 时间:2018-12-28 17:58:34 0 删除 编辑

深入理解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)。

[$9008E7ECB777988.jpg]


 

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/<hostname>.olr,这个路径

记录在/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堆栈.

[$8D02817356DD884.jpg]

高可用性服务堆栈

是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 </dev/null

由于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 </dev/null

文件中的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 <command><object> [<options>]

除了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/<cluster_name>目录中。使用ocrconfig -showbackup 命令可以显示备份

信息,命令如下:

$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

[$65D1187E7BEBB810.jpg]

pga_aggregate_limit, 参数pga_aggregate_target并不是硬性限制,数据库分配的PGA可能远远超过pga_aggregate_target, 但不能超过pga_aggregate_limit.

[$37C92DFEBCD3BC6A.jpg]

第4章

RAC 12c的新特性

Oracle Flex集群

多租户,可插拔数据库CDB,PDB

[$1A9C65909582C49D.jpg]

第 5 章

存储和ASM管理

如果决定用外接SAN存储配置RAID1+0, 可用选择外部冗余

[$3EC3F9C7DC0E3325.jpg]