合 Oracle OCR的备份与恢复
- 前言部分
- 导读和注意事项
- 本文简介
- 相关知识点扫盲
- OCR Disk
- OCR包含的内容
- OCR存储内容的表现形式
- Voting Disk
- 健忘症(Amnesia)
- 脑裂(Split Brain)
- OCR命令系列
- ocrdump
- ocrcheck
- ocrconfig
- Oracle RAC OCR 的备份与恢复
- dd备份恢复
- kfed恢复磁盘头
- md_backup和md_restore恢复磁盘头
- 物理备份与恢复(自动备份)
- 逻辑备份与恢复(手动备份)
- 如何修复11.2 Grid权限误操作
- 校验权限
- 解决
- MOS 1515018.1 permission.pl脚本的使用
- 如何修复ASM实例名和节点名不一致的情况
- 如何彻底清除CRS信息
- 实验部分
- 实验环境介绍
- 实验目标
- 实验一:dd备份恢复OCR
- 实验二:通过kfed修复磁盘头
- 实验三:物理备份与恢复(自动备份)
- 实验四:逻辑备份与恢复(手动备份)
- 实验五:删除$ORACLE_HOME/log下的文件夹后的修复
- 实验六:permission.pl脚本的使用
- 实验中用到的SQL总结
- SQL总结
- 参考
前言部分
导读和注意事项
各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~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脚本的使用
本文简介
写这篇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个问题。
相关知识点扫盲
Clusterware 在运行期间需要两个文件: OCR 和 Voting Disk. 这 2 个文件必须存放在共享存储上。 OCR 用于解决健忘问题, Voting Disk 用于解决脑裂问题。
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>more /etc/oracle/ocr.loc
ocrconfig_loc=+DATA
local_only=FALSE
OCR key
整个 OCR 的信息是树形结构,有 3 个大分支。分别是 SYSTEM,DATABASE 和 CRS。每个分支下面又有许多小分支。这些记录的信息只能由 root 用户修改。
OCR包含的内容
OCR中通常包含下列内容:
- 节点成员信息
- 数据库实例,节点,以及其他的映射关系
- ASM
- 资源配置信息(vip,services等等)
- 服务特性(Service characteristics)
- Oracle集群中相关进程的信息
- 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 crs deny
SYSTEM crs user_default_dir
SYSTEM crs e2eport
SYSTEM crs uiport
SYSTEM crs 11
SYSTEM ACFS
SYSTEM ORA_CRS_HOME
SYSTEM evm
SYSTEM evm debug
SYSTEM evm cevmkey
SYSTEM evm rmport
SYSTEM evm cevmport
SYSTEM DIAG
SYSTEM DIAG status
SYSTEM local_only
SYSTEM WLM
SYSTEM GPnP
SYSTEM GPnP profiles
SYSTEM JAZNFILE
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
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
OCR存储内容的表现形式
- 同样地与Windows注册表来类比,OCR其存储内容的表现形式与其相同,是采用键值对的方式来展现。
- 整个OCR 的信息是树形结构,有3个大分支。分别是SYSTEM,DATABASE 和CRS。
- 每个分支下面又有许多小分支。这些记录的信息只能由root用户修改。
- 可以使用ocrdump命令将其内容全部导出或者按分支进行导出。
Voting Disk
Voting Disk 这个文件主要用于记录节点成员状态,在出现脑裂时,决定那个 Partion 获得控制权,其他的 Partion 必须从集群中剔除。在安装 Clusterware 时也会提示指定这个位置。安装完成后可以通过如下命令来查看 Voting Disk 位置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $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> |
健忘症(Amnesia)
集群环境配置文件不是集中存放的,而是每个节点都有一个本地副本,在集群正常运行时,用户可以在任何节点更改集群的配置,并且这种更改会自动同步到其他节点。有一种特殊情况: 节点 A 正常关闭, 在节点 B 上修改配置, 关闭结点 A,启动结点B。 这种情况下,修改的配置文件是丢失的, 就是所谓的健忘症。OCR 用于解决健忘问题。
健忘是由于某个节点更新了OCR中的内容,而集群中的另外一些节点此时处于关闭,维护或重启阶段,OCR Master进程来不及将其信息更新到这些异常节点缓存而导致的不一致。譬如,在A节点发出了添加ocr镜像的命令,在这个时候B节点处于重启阶段。重启后A已经更新完毕,而此时B并不知道已经为ocr增加了一个新的镜像磁盘,健忘由此而生。
如下例,节点bo2dbp添加了新的ocr之后,配置文件发生了变化,此时节点bo2dbs的ocr.loc会被更新,如果bo2dbs处于关闭或重启阶段,则该文件得不到该更新,此即位健忘一例。
脑裂(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 票。另一个节点就会被剔除。
OCR命令系列
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
\
\
\
\
......
这个命令在执行过程中,会在$CRS_HOME/log/\
ocrcheck
Ocrcheck 命令用于检查OCR内容的一致性,命令执行过程会在$CRS_HOME/log/nodename/client 目录下产生ocrcheck_pid.log 日志文件。 这个命令不需要参数。
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
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 \
- Export cluster register contents to a file
-import \
-upgrade [\
- Upgrade cluster registry from previous version
-downgrade [-version \
- Downgrade cluster registry to the specified version
-backuploc \
-showbackup - Show backup information
-restore \
-replace ocr|ocrmirror [\
-overwrite - Overwrite OCR configuration on disk
-repair ocr|ocrmirror \
-help - Print out this help information
Note:
A log file will be created in
$ORACLEHOME/log/\
you have file creation privileges in the above directory before
running this tool.
Oracle RAC OCR 的备份与恢复
Oracle Clusterware把整个集群的配置信息放在共享存储上,这些信息包括了集群节点的列表、集群数据库实例到节点的映射以及CRS应用程序资源信息。也即是存放在ocr 磁盘(或者ocfs文件)上。因此对于这个配置文件的重要性是不言而喻的。任意使得ocr配置发生变化的操作在操作之间或之后都建议立即备份ocr。
因为OCR的内容如此重要,Oracle 每4个小时对其做一次备份,并且保留最后的3个备份,以及前一天,前一周的最后一个备份。 这个备份由Master Node CRSD进程完成,备份的默认位置是$CRS_HOME/crs/cdata/\
与Oracle数据库备份恢复相似,OCR的备份也有物理备份或逻辑备份的概念,因此有两种备份方式,两种恢复方式。
常用命令:
crsctl query css votedisk
lquerypv -h /dev/rhdisk2
crsctl stop has -f
crsctl start has
crsctl stat res -t
dd备份恢复
备份表决磁盘:
dd if=/dev/raw/raw3 of=/tmp/votedisk_lhr.bak bs=1024k count=4
恢复表决磁盘:
dd if=/tmp/votedisk_lhr.bak of=/dev/raw/raw3 bs=1024k count=4
注:11g不推荐使用dd来进行备份恢复,盘头一般是前4K
kfed恢复磁盘头
dd if=/dev/rhdisk2 of=/asm_rhdisk2_dd.bak bs=1024 count=4
dd if=/dev/zero of=/dev/rhdisk2 bs=1024 count=4
kfed repair /dev/rhdisk2
关于kfed、kfod、amdu的更多内容可以参考:http://blog.itpub.net/26736162/viewspace-1694198/
http://blog.itpub.net/26736162/viewspace-1694199/
md_backup和md_restore恢复磁盘头
asmcmd md_backup /oracle/app/11.2.0/grid/cdata/ZFTPCCDB-crs/asm_md_backup.bak
asmcmd md_restore /oracle/app/11.2.0/grid/cdata/ZFTPCCDB-crs/asm_md_backup.bak
dd if=/dev/rhdisk2 of=/asm_rhdisk2_dd.bak bs=1024k count=4
dd if=/dev/zero of=/dev/rhdisk2 bs=1024k count=4
crsctl stop has -f
crsctl start has
ASMCMD [+] > startup force nomount;
ASMCMD [+] > md_restore /asm_rhdisk2_dd.bak
ASMCMD [+] > md_backup /rman/asm_md.bak
dd if=/dev/zero of=/dev/rhdisk2 bs=1024 count=4
crsctl stop has -f
crsctl start has
ASMCMD [+] > startup force nomount;
ASMCMD [+] > md_restore /rman/asm_md.bak
关于md_backup和md_restore更多内容可以参考:http://blog.itpub.net/26736162/viewspace-2121309/
物理备份与恢复(自动备份)
缺省情况下,Oracle 每4个小时对其做一次备份,并且保留最后的3个副本,以及前一天,前一周的最后一个备份副本。用户不能自定义备份频率以及备份文件的副本数。
对于OCR的备份由是由Master Node CRSD进程完成,因此备份的默认位置是$CRS_HOME/crs/cdata/\
备份的文件会自动更名,以反应备份时间顺序,最近一次的备份叫作backup00.ocr。
由于是在Master Node的节点之上进行备份,因此备份文件仅存在于Master Node节点。
对于Master Node的节点crash之后则由剩余节点接管。
备份目录可以通过ocrconfig -backuploc \
OCR磁盘最多只能有两个,一个Primary OCR 和一个Mirror OCR。两者互为镜像以避免单点故障。
对于物理备份恢复,不能简单的使用操作系统级别的复制命令(使用ocr文件时)来完成,该操作将导致ocr不可用。
对于物理备份,仅仅只能使用restore方式来进行恢复,而不支持import方式
1,查看备份磁盘
zfzhlhrdb2:grid:/home/grid>ocrconfig -showbackup
zfzhlhrdb1 2016/06/30 15:13:46 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup00.ocr
zfzhlhrdb1 2016/06/30 11:13:45 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup01.ocr
zfzhlhrdb1 2016/06/30 07:13:45 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup02.ocr
zfzhlhrdb1 2016/06/29 03:13:41 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/day.ocr
zfzhlhrdb1 2016/06/20 03:13:08 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/week.ocr
PROT-25: Manual backups for the Oracle Cluster Registry are not available
zfzhlhrdb2:grid:/home/grid>oerr prot 25
00025, 0, "Manual backups for the Oracle Cluster Registry are not available"
// *Cause: Manual backups for the Oracle Cluster Registry were not yet created.
// *Action: Manual backups can be created using 'ocrconfig -manualbackup'
// command.
zfzhlhrdb2:grid:/home/grid>ocrconfig -manualbackup
PROT-20: Insufficient permission to proceed. Require privileged user
zfzhlhrdb2:root:/>ocrconfig -manualbackup
zfzhlhrdb1 2016/06/30 16:21:34 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup_20160630_162134.ocr
zfzhlhrdb2:root:/>ocrconfig -showbackup
zfzhlhrdb1 2016/06/30 15:13:46 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup00.ocr
zfzhlhrdb1 2016/06/30 11:13:45 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup01.ocr
zfzhlhrdb1 2016/06/30 07:13:45 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup02.ocr
zfzhlhrdb1 2016/06/29 03:13:41 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/day.ocr
zfzhlhrdb1 2016/06/20 03:13:08 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/week.ocr
zfzhlhrdb1 2016/06/30 16:21:34 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup_20160630_162134.ocr
在节点一执行,可以看到2个节点得到的内容一致:
zfzhlhrdb1:root:/>ocrconfig -showbackup
zfzhlhrdb1 2016/06/30 15:13:46 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup00.ocr
zfzhlhrdb1 2016/06/30 11:13:45 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup01.ocr
zfzhlhrdb1 2016/06/30 07:13:45 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup02.ocr
zfzhlhrdb1 2016/06/29 03:13:41 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/day.ocr
zfzhlhrdb1 2016/06/20 03:13:08 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/week.ocr
zfzhlhrdb1 2016/06/30 16:21:34 /oracle/app/11.2.0/grid/cdata/zfzhlhrdb-crs/backup_20160630_162134.ocr
2,恢复
ocrconfig -restore /app/crs/product/11.0.6/crs/cdata/racluster/backup01.ocr
3,查看配置
[grid@rac1 ~]$ more /etc/oracle/ocr.loc
ocrconfig_loc=+DATA
local_only=FALSE