Oracle OCR的备份与恢复
1 BLOG文档结构图
2 前言部分
一.2.1 导读和注意事项
各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:
① rac中OCR的简介及其作用
② rac中OCR的备份和恢复
③ rac的健忘与脑裂
④ grid用户下的日志文件:$ORACLE_HOME/log文件夹内容被删除导致集群不能启动如何恢复?(重点)
⑤ 如何修复11.2 Grid权限误操作【(How to check and fix file permissions on Grid Infrastructure environment (文档 ID 1931142.1)】
⑥ 如何修复ASM实例名和节点名不一致的情况【How to Change 11.2 ASM Configuration to Match ASM Instance Name to the Node Where It Runs? (example, +ASM2 on Node2, etc) (文档 ID 1419424.1)】
⑦ permission.pl脚本的使用
2.2 相关参考文章链接
关于物理和逻辑备份比较好的一篇文章:https://gjilevski.com/2010/12/20/backup-and-restore-of-ocr-in-grid-infrastructure-11g-r2-11-2-2/
2.3 本文简介
写这篇blog的情况是这样的,rac启动有问题,但是$GRID_HOME/log下的文件太多了,我就把下边的内容清空了,结果是集群更加不能启动就连基本的日志也没有了,重启OS无效,最后在仔细的想了想查看了一下运行正常的库的$GRID_HOME/log下的文件结构,发现有的文件夹最后有个T或t的权限,由此联想到可能是权限的缘故导致的,于是上MOS搜了搜文章果然搜到几篇文章,11.2.0.3.6以上比较好解决,但是小于这个版本的就不好弄了,自己总结的方法是重新跑root.sh脚本,而跑完后集群中注册的很多资源不存在了,于是这个又涉及到OCR的备份与恢复。另外执行root.sh若是顺序不对,或者其他的原因可能导致asm实例号和主机号不一致,就是rac1上的实例名是+ASM2,这个虽然没有啥影响,但是看着着实不爽,因此更改它们直接的对应关系也比较重要,所以总体而言就引出了文章开头提出的6个问题。
3 相关知识点扫盲(摘自网络+个人总结)
Clusterware 在运行期间需要两个文件: OCR 和 Voting Disk. 这 2 个文件必须存放在共享存储上。 OCR 用于解决健忘问题, Voting Disk 用于解决脑裂问题。
3.1 OCR Disk
Oracle Clusterware把整个集群的配置信息放在共享存储上,这个存储就是OCR Disk. 在整个集群中,只有一个节点能对OCR Disk 进行读写操作,这个节点叫作Master Node,所有节点都会在内存中保留一份OCR的拷贝,同时有一个OCR Process 从这个内存中读取内容。 OCR 内容发生改变时,由Master Node的OCR Process负责同步到其他节点的OCR Process。
健忘问题是由于每个节点都有配置信息的拷贝,修改节点的配置信息不同步引起的。Oracle 采用的解决方法就是把这个配置文件放在共享的存储上, 这个文件就是 OCR Disk。OCR 中保存整个集群的配置信息,配置信息以"Key-Value" 的形式保存其中。 在 Oracle10g 以前, 这个文件叫作 Server Manageability Repository(SRVM). 在 Oracle 10g, 这部分内容被重新设计,并重名为 OCR.。在 Oracle Clusterware 安装的过程中, 安装程序会提示用户指定 OCR 位置。并且用户指定的这个位置会被记录在/etc/oracle/ocr.loc(Linux System、AIX) 或者/var/opt/oracle/ocr.loc(Solaris System)文件中。 而在 Oracle 9i RAC 中,对等的是 srvConfig.Loc文件。 Oracle Clusterware在启动时会根据这里面的内容从指定位置读入 OCR 内容。
[zfzhlhrdb3:root]:/>cd /etc/oracle
[zfzhlhrdb3:root]:/etc/oracle>ls -l
total 3160
drwxrwx--- 2 root dba 256 Dec 29 14:16 lastgasp
-rw-r--r-- 1 root dba 37 Dec 29 14:10 ocr.loc
-rw-r--r-- 1 root system 0 Dec 29 14:10 ocr.loc.orig
-rw-r--r-- 1 root dba 92 Dec 29 14:10 olr.loc
-rw-r--r-- 1 root system 0 Dec 29 14:10 olr.loc.orig
drwxrwxr-x 5 root dba 256 Dec 29 14:09 oprocd
drwxr-xr-x 3 root dba 256 Dec 29 14:09 scls_scr
-rws--x--- 1 root dba 1606037 Dec 29 14:09 setasmgid
[zfzhlhrdb3:root]:/etc/oracle>
[zfzhlhrdb3:root]:/etc/oracle>more /etc/oracle/ocr.loc
ocrconfig_loc=+DATA
local_only=FALSE
[zfzhlhrdb3:root]:/etc/oracle>
OCR key
整个 OCR 的信息是树形结构,有 3 个大分支。分别是 SYSTEM,DATABASE 和 CRS。每个分支下面又有许多小分支。这些记录的信息只能由 root 用户修改。
1.1.1 OCR包含的内容
OCR中通常包含下列内容:
v 节点成员信息
v 数据库实例,节点,以及其他的映射关系
v ASM
v 资源配置信息(vip,services等等)
v 服务特性(Service characteristics)
v Oracle集群中相关进程的信息
v CRS控制的第三方应用程序信息
[zfzhlhrdb1:root]:/>ocrdump -local -stdout -xml|more|grep -i \<name\>|sed -e 's/\<NAME\>//g' -e 's/\<\/NAME\>//g'|awk -F . '{print $1,$2,$3}'|uniq
SYSTEM
SYSTEM crs
SYSTEM crs usersecurity
SYSTEM crs deny
SYSTEM crs user_default_dir
SYSTEM ORA_CRS_HOME
SYSTEM WALLET
SYSTEM GNS
SYSTEM version
SYSTEM version localhost
SYSTEM version activeversion
SYSTEM GPnP
SYSTEM GPnP profiles
SYSTEM css
SYSTEM css nodenum_hint
SYSTEM network
SYSTEM network haip
SYSTEM OHASD
SYSTEM OHASD DM
SYSTEM OHASD SERVERPOOLS
SYSTEM OHASD SERVERS
SYSTEM OHASD TYPES
SYSTEM OHASD RESOURCES
SYSTEM CRS
SYSTEM CRS JOIN_SIGNATURE
SYSTEM OLR
SYSTEM OLR MANUALBACKUP
SYSTEM OCR
SYSTEM OCR BACKUP
DATABASE
DATABASE NODEAPPS
DATABASE VIP_RANGE
DATABASE LOG
DATABASE ASM
DATABASE DATABASES
CRS
[zfzhlhrdb1:root]:/>ocrdump -stdout -xml|more|grep -i \<name\>|sed -e 's/\<NAME\>//g' -e 's/\<\/NAME\>//g'|awk -F . '{print $1,$2,$3}'|uniq
SYSTEM
SYSTEM version
SYSTEM version activeversion
SYSTEM version hostnames
SYSTEM versionstring
SYSTEM WALLET
SYSTEM WALLET APPQOSADMIN
SYSTEM GNS
SYSTEM css
SYSTEM css interfaces
SYSTEM crs
SYSTEM crs versions
SYSTEM crs usersecurity
..............................................
SYSTEM JAZNFILE STATE
SYSTEM CRSADMIN
SYSTEM CRSUSER
SYSTEM CRSD
SYSTEM CRSD DM
SYSTEM CRSD SERVERPOOLS
SYSTEM CRSD SERVERS
SYSTEM CRSD TYPES
SYSTEM CRSD RESOURCES
SYSTEM OCR
SYSTEM OCR BACKUP
DATABASE
DATABASE NODEAPPS
DATABASE NODEAPPS zfzhlhrdb1
DATABASE NODEAPPS zfzhlhrdb2
DATABASE VIP_RANGE
DATABASE LOG
DATABASE ASM
DATABASE ASM zfzhlhrdb1
DATABASE ASM zfzhlhrdb2
DATABASE DATABASES
CRS
CRS CUR
CRS HIS
CRS SEC
CRS STAGE
CRS STAGE node1
CRS STAGE node2
[zfzhlhrdb1:root]:/>
1.1.2 OCR存储内容的表现形式
1. 同样地与Windows注册表来类比,OCR其存储内容的表现形式与其相同,是采用键值对的方式来展现。
2. 整个OCR 的信息是树形结构,有3个大分支。分别是SYSTEM,DATABASE 和CRS。
3. 每个分支下面又有许多小分支。这些记录的信息只能由root用户修改。
4. 可以使用ocrdump命令将其内容全部导出或者按分支进行导出。
1.1 Voting Disk
Voting Disk 这个文件主要用于记录节点成员状态,在出现脑裂时,决定那个 Partion 获得控制权,其他的 Partion 必须从集群中剔除。在安装 Clusterware 时也会提示指定这个位置。安装完成后可以通过如下命令来查看 Voting Disk 位置。
$crsctl query css votedisk
[zfzhlhrdb3:root]:/dev>crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 83cb4909d3254f4ebf1181b024aaf539 (/dev/rhdisk2) [DATA]
Located 1 voting disk(s).
[zfzhlhrdb3:root]:/dev>ls -l /dev/rhdisk*
crw------- 2 root system 19, 0 Dec 29 10:02 /dev/rhdisk0
crw------- 1 root system 19, 4 Dec 29 11:15 /dev/rhdisk1
crw-rw---- 1 grid asmadmin 19, 6 Jan 08 15:17 /dev/rhdisk2
crw-rw---- 1 root system 19, 3 Dec 29 11:15 /dev/rhdisk3
crw-rw---- 1 root system 19, 1 Dec 29 11:15 /dev/rhdisk4
crw------- 1 root system 19, 7 Dec 29 11:15 /dev/rhdisk5
crw------- 1 root system 19, 8 Dec 29 11:15 /dev/rhdisk6
crw------- 1 root system 19, 2 Dec 29 11:15 /dev/rhdisk7
crw------- 1 root system 19, 5 Dec 29 11:15 /dev/rhdisk8
[zfzhlhrdb3:root]:/dev>
1.1 健忘症(Amnesia)
集群环境配置文件不是集中存放的,而是每个节点都有一个本地副本,在集群正常运行时,用户可以在任何节点更改集群的配置,并且这种更改会自动同步到其他节点。有一种特殊情况: 节点 A 正常关闭, 在节点 B 上修改配置, 关闭结点 A,启动结点B。 这种情况下,修改的配置文件是丢失的, 就是所谓的健忘症。OCR 用于解决健忘问题。
健忘是由于某个节点更新了OCR中的内容,而集群中的另外一些节点此时处于关闭,维护或重启阶段,OCR Master进程来不及将其信息更新到这些异常节点缓存而导致的不一致。譬如,在A节点发出了添加ocr镜像的命令,在这个时候B节点处于重启阶段。重启后A已经更新完毕,而此时B并不知道已经为ocr增加了一个新的镜像磁盘,健忘由此而生。
如下例,节点bo2dbp添加了新的ocr之后,配置文件发生了变化,此时节点bo2dbs的ocr.loc会被更新,如果bo2dbs处于关闭或重启阶段,则该文件得不到该更新,此即位健忘一例。
1.2 脑裂(Split Brain)
在集群中,节点间通过某种机制(心跳)了解彼此的健康状态,以确保各节点协调工作。假设只有"心跳"出现问题, 各个节点还在正常运行, 这时,每个节点都认为其他的节点宕机了, 自己是整个集群环境中的"唯一建在者",自己应该获得整个集群的"控制权"。 在集群环境中,存储设备都是共享的, 这就意味着数据灾难, 这种情况就是"脑裂"解决这个问题的通常办法是使用投票算法(Quorum Algorithm). 它的算法机理如下:集群中各个节点需要心跳机制来通报彼此的"健康状态",假设每收到一个节点的"通报"代表一票。对于三个节点的集群,正常运行时,每个节点都会有 3 票。 当结点 A 心跳出现故障但节点 A 还在运行,这时整个集群就会分裂成 2 个小的 partition。 节点 A 是一个,剩下的 2 个是一个。 这是必须剔除一个 partition 才能保障集群的健康运行。对于有 3 个节点的集群, A 心跳出现问题后, B 和 C 是一个 partion,有 2 票, A只有 1 票。 按照投票算法, B 和 C 组成的集群获得控制权, A 被剔除。如果只有 2 个节点,投票算法就失效了。 因为每个节点上都只有 1 票。 这时就需要引入第三个设备: Quorum Device. Quorum Device 通常采用饿是共享磁盘,这个磁盘也叫作Quorum disk。 这个 Quorum Disk 也代表一票。 当 2 个结点的心跳出现问题时, 2 个节点同时去争取 Quorum Disk 这一票, 最早到达的请求被最先满足。 故最先获得 Quorum Disk的节点就获得 2 票。另一个节点就会被剔除。
一.1.1 OCR命令系列
一.1.1.1 ocrdump
该命令能以ASCII的方式打印出OCR的内容,但是这个命令不能用作OCR的备份恢复,也就是说产生的文件只能用作阅读,而不能用于恢复。
命令格式: ocrdump [-stdout] [filename] [-keyname name] [-xml]
参数说明:
-stdout: 把内容打印输出到屏幕上
Filename:内容输出到文件中
-keyname:只打印某个键及其子健内容
-xml:以xml格式打印输出
示例:把system.css键的内容以.xml格式打印输出到屏幕
[root@raw1 bin]# ./ocrdump -stdout -keyname system.css -xml|more
<OCRDUMP>
<TIMESTAMP>03/08/2010 04:28:41</TIMESTAMP>
<DEVICE>/dev/raw/raw1</DEVICE>
<COMMAND>./ocrdump.bin -stdout -keyname system.css -xml </COMMAND>
......
这个命令在执行过程中,会在$CRS_HOME/log/<node_name>/client 目录下产生日志文件,文件名ocrdump_<pid>.log,如果命令执行出现问题,可以从这个日志查看问题原因。
一.1.1.2 ocrcheck
Ocrcheck 命令用于检查OCR内容的一致性,命令执行过程会在$CRS_HOME/log/nodename/client 目录下产生ocrcheck_pid.log 日志文件。 这个命令不需要参数。
[zfzhlhrdb1:root]:/>ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 3176
Available space (kbytes) : 258944
ID : 362503260
Device/File Name : +DATA
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 succeeded
一.1.1.3 ocrconfig
该命令用于维护OCR 磁盘,安装clusterware过程中,如果选择External Redundancy冗余方式,则只能输入一个OCR磁盘位置。 但是Oracle允许配置两个OCR 磁盘互为镜像,以防止OCR 磁盘的单点故障。 OCR 磁盘和Votedisk磁盘不一样,OCR磁盘最多只能有两个,一个Primary OCR 和一个Mirror OCR。
[root@raw1 bin]# ./ocrconfig --help
Name:
ocrconfig - Configuration tool for Oracle Cluster Registry.
Synopsis:
ocrconfig [option]
option:
-export <filename> [-s online]
- Export cluster register contents to a file
-import <filename> - Import cluster registry contents from a file
-upgrade [<user> [<group>]]
- Upgrade cluster registry from previous version
-downgrade [-version <version string>]
- Downgrade cluster registry to the specified version
-backuploc <dirname> - Configure periodic backup location
-showbackup - Show backup information
-restore <filename> - Restore from physical backup
-replace ocr|ocrmirror [<filename>] - Add/replace/remove a OCR device/file
-overwrite - Overwrite OCR configuration on disk
-repair ocr|ocrmirror <filename> - Repair local OCR configuration
-help - Print out this help information
Note:
A log file will be created in
$ORACLE_HOME/log/<hostname>/client/ocrconfig_<pid>.log. Please ensure
you have file creation privileges in the above directory before
running this tool.
About Me