首页 > 代码库 > Oracle RAC OCR 的管理与维护

Oracle RAC OCR 的管理与维护

OCR相当于Windows的注册表。对于Windows而言,所有的软件信息,用户,配置,安全等等统统都放到注册表里边。而集群呢,同样如此,所有和集群相关的资源,配置,节点,RAC数据库统统都放在这个仓库里。如果OCR被破坏则导致集群服务启动异常,需要修复OCR。因此OCR的管理与维护对于整个集群而言,是相当重要的。本文主要描述了Oracle 10g RAC下的OCR的管理与维护。

[python] view plain copy
 
 print?
  1. 1、环境  
  2.  oracle@bo2dbp:~> cat /etc/issue  
  3.  Welcome to SUSE Linux Enterprise Server 10 SP3 (x86_64) - Kernel \r (\l).  
  4.    
  5.  oracle@bo2dbp:~> crsctl query crs activeversion  
  6.  CRS active version on the cluster is [10.2.0.3.0]  
  7.   
  8. 2、校验OCR文件  
  9.  oracle@bo2dbp:~> ocrcheck  
  10.  Status of Oracle Cluster Registry is as follows :  
  11.           Version                  :          2  
  12.           Total space (kbytes)     :     204560  
  13.           Used space (kbytes)      :       6160  
  14.           Available space (kbytes) :     198400  
  15.           ID                       : 1512159503  
  16.           Device/File Name         : /dev/raw/raw1                <-- OCR (primary)  
  17.                                      Device/File integrity check succeeded  
  18.    
  19.                                      Device/File not configured   <-- OCR Mirror (not configured)  
  20.    
  21.           Cluster registry integrity check succeeded  
  22.    
  23.  #如果clusterware处于关闭状态也可通过查询ocr.loc获得ocr文件所在的位置  
  24.  oracle@bo2dbp:~> more /etc/oracle/ocr.loc  
  25.  ocrconfig_loc=/dev/raw/raw1  
  26.  local_only=FALSE           
  27.    
  28.  #校验OCR产生的日志文件  
  29.  $ORA_CRS_HOME/log/<hostname>/client/ocrcheck_<pid>.log  
  30.   
  31. 3、dump OCR的内容  
  32.  #缺省情况下,ocrdump命令导出文件被命名为OCRDUMPFILE,其文件类型为ASCII文件,如果缺省文件已存在,则收到PROT-303文件存在提示  
  33.    
  34.  #导出ocr到缺省文件  
  35.  oracle@bo2dbp:~> ocrdump  
  36.  oracle@bo2dbp:~> ls -hltr OCRDUMPFILE  
  37.  -rw-r--r-- 1 oracle oinstall 44K 2013-01-07 14:13 OCRDUMPFILE  
  38.  oracle@bo2dbp:~> file OCRDUMPFILE  
  39.  OCRDUMPFILE: ASCII text  
  40.    
  41.  #导出ocr到指定文件  
  42.  oracle@bo2dbp:~> ocrdump /tmp/`hostname`_ocrdump_`date +%Y%m%d:%H%M`  
  43.  oracle@bo2dbp:~> ls /tmp/*ocr*  
  44.  /tmp/bo2dbp_ocrdump_20130107:1415  
  45.    
  46.  #导出ocr中system.css项的内容  
  47.  oracle@bo2dbp:~> ocrdump -stdout -keyname SYSTEM.css -xml >ocrdump.xml  
  48.  oracle@bo2dbp:~> more ocrdump.xml  
  49.  <OCRDUMP>  
  50.    
  51.  <TIMESTAMP>01/07/2013 14:15:42</TIMESTAMP>  
  52.  <COMMAND>/u01/oracle/crs/bin/ocrdump.bin -stdout -keyname SYSTEM.css -xml </COMMAND>  
  53.    
  54.  <KEY>  
  55.  <NAME>SYSTEM.css</NAME>  
  56.  <VALUE_TYPE>UNDEF</VALUE_TYPE>  
  57.  <VALUE><![CDATA[]]></VALUE>  
  58.  <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION>  
  59.  <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION>  
  60.  <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION>  
  61.  <USER_NAME>root</USER_NAME>  
  62.  <GROUP_NAME>root</GROUP_NAME>  
  63.  ............  
  64.    
  65.  #导出ocr中关于ocr的备份情况  
  66.  oracle@bo2dbp:~> ocrdump -stdout -keyname SYSTEM.OCR -xml>ocrdump_bak.xml  
  67.   
  68. 4、添加OCR文件  
  69.  #注,下面的描述中crs在所有的节点处于online状态,即对于ocr的添加,移动,代替crs无需处于offline状态  
  70.  oracle@bo2dbp:~> crsctl check crs  
  71.  CSS appears healthy  
  72.  CRS appears healthy  
  73.  EVM appears healthy  
  74.  oracle@bo2dbp:~> ssh bo2dbs crsctl check crs  
  75.  CSS appears healthy  
  76.  CRS appears healthy  
  77.  EVM appears healthy  
  78.    
  79.  ocrconfig -replace ocrmirror <destination_file>  
  80.  ocrconfig -replace ocrmirror <disk>  
  81.    
  82.  oracle@bo2dbp:~> sudo -s rcraw status  
  83.  root‘‘‘‘‘s password: 
  84.  /dev/raw/raw1:  bound to major 8, minor 33 
  85.  /dev/raw/raw2:  bound to major 8, minor 49 
  86.  /dev/raw/raw11: bound to major 8, minor 113 
  87.  /dev/raw/raw21: bound to major 8, minor 129 
  88.  /dev/raw/raw22: bound to major 8, minor 145 
  89.                                                                        running 
  90.   
  91.  oracle@bo2dbp:~> sudo -s /u01/oracle/crs/bin/ocrconfig -replace ocrmirror /dev/raw/raw11 
  92.  root‘‘‘s password:  
  93.  oracle@bo2dbp:~> ocrcheck  
  94.  Status of Oracle Cluster Registry is as follows :  
  95.           Version                  :          2  
  96.           Total space (kbytes)     :     204560  
  97.           Used space (kbytes)      :       6184  
  98.           Available space (kbytes) :     198376  
  99.           ID                       : 1512159503  
  100.           Device/File Name         : /dev/raw/raw1  
  101.                                      Device/File integrity check succeeded  
  102.           Device/File Name         : /dev/raw/raw11   #新的ocr镜像已经被添加  
  103.                                      Device/File integrity check succeeded  
  104.    
  105.           Cluster registry integrity check succeeded  
  106.    
  107.  #下面是连接到第二个节点查看  
  108.  oracle@bo2dbp:~> ssh bo2dbp ocrcheck  
  109.  Status of Oracle Cluster Registry is as follows :  
  110.           Version                  :          2  
  111.           Total space (kbytes)     :     204560  
  112.           Used space (kbytes)      :       6184  
  113.           Available space (kbytes) :     198376  
  114.           ID                       : 1512159503  
  115.           Device/File Name         : /dev/raw/raw1  
  116.                                      Device/File integrity check succeeded  
  117.           Device/File Name         : /dev/raw/raw11   #新的ocr镜像已经被添加  
  118.                                      Device/File integrity check succeeded  
  119.    
  120.           Cluster registry integrity check succeeded  
  121.    
  122.  #从两个节点查看ocr.loc文件记录的ocr位置是否发生变化                                                                                 
  123.  oracle@bo2dbp:~> more /etc/oracle/ocr.loc  
  124.  #Device/file  getting replaced by device /dev/raw/raw11   
  125.  ocrconfig_loc=/dev/raw/raw1  
  126.  ocrmirrorconfig_loc=/dev/raw/raw11  #可以看到增加了ocrmirror位置  
  127.  local_only=false  
  128.    
  129.  oracle@bo2dbp:~> ssh bo2dbs cat /etc/oracle/ocr.loc  
  130.  #Device/file  getting replaced by device /dev/raw/raw11   
  131.  ocrconfig_loc=/dev/raw/raw1  
  132.  ocrmirrorconfig_loc=/dev/raw/raw11  
  133.    
  134.  #下面来尝试多添加一个ocrmirror,我们使用裸设备为raw21的做为镜像  
  135.  oracle@bo2dbp:~> sudo -s /u01/oracle/crs/bin/ocrconfig -replace ocrmirror /dev/raw/raw21  
  136.  root‘‘‘s password:  
  137.  oracle@bo2dbp:~> ocrcheck  
  138.  Status of Oracle Cluster Registry is as follows :  
  139.           Version                  :          2  
  140.           Total space (kbytes)     :     204560  
  141.           Used space (kbytes)      :       6184  
  142.           Available space (kbytes) :     198376  
  143.           ID                       : 1512159503  
  144.           Device/File Name         : /dev/raw/raw1  
  145.                                      Device/File integrity check succeeded  
  146.           Device/File Name         : /dev/raw/raw21  #可以看到原来的raw11已经被替代了  
  147.                                      Device/File integrity check succeeded  
  148.    
  149.           Cluster registry integrity check succeeded  
  150.    
  151.  #从上面的描述可知,ocr磁盘只能有两个,一个作为primary,一个作为mirror  
  152.   
  153. 5、重定位OCR  
  154.  重定位OCR,也称之为移动OCR文件,也就是将当前的OCR或者镜像的OCR放置到新的裸设备后者OCFS上。对于整个操作可以在联机的情形下完成  
  155.  不论是移动primary ocr还是mirror ocr,其依赖的ocr必须存在。也就是说必须要有两份ocr存在,否则收到PROT-16: Internal Error  
  156.    
  157.  使用下面的命令移动primary ocr  
  158.  ocrconfig -replace ocr <destination_file>  
  159.  ocrconfig -replace ocr <disk>  
  160.    
  161.  现在我们将primary ocr移动到之前的raw11上  
  162.  oracle@bo2dbp:~> dd if=/dev/zero of=/dev/raw/raw11 bs=1024k count=210  
  163.  dd: writing `/dev/raw/raw11‘: No space left on device  
  164.  200+0 records in  
  165.  199+0 records out  
  166.  209698816 bytes (210 MB) copied, 5.39183 seconds, 38.9 MB/s  
  167.    
  168.  oracle@bo2dbp:~> sudo -s /u01/oracle/crs/bin/ocrconfig -replace ocr /dev/raw/raw11  
  169.  oracle@bo2dbp:~> ocrcheck  
  170.  Status of Oracle Cluster Registry is as follows :  
  171.           Version                  :          2  
  172.           Total space (kbytes)     :     204560  
  173.           Used space (kbytes)      :       6184  
  174.           Available space (kbytes) :     198376  
  175.           ID                       : 1512159503  
  176.           Device/File Name         : /dev/raw/raw11   #可以看到,此处之前的raw1被新的raw11代替  
  177.                                      Device/File integrity check succeeded  
  178.           Device/File Name         : /dev/raw/raw21  
  179.                                      Device/File integrity check succeeded  
  180.    
  181.           Cluster registry integrity check succeeded  
  182.    
  183.  使用下面的命令移动mirror ocr,关于mirro ocr的移动此处不做演示  
  184.  ocrconfig -replace ocrmirror <destination_file>  
  185.  ocrconfig -replace ocrmirror <disk>  
  186.   
  187. 6、本地节点OCR的修复  
  188.  对于任一节点的clusterware处于关闭状态或者节点主机被关闭的情形,其他节点对ocr配置的更改将使得处于被停机或关闭的clusterware  
  189.  节点ocr信息与出现不一致的情形。比如在第二个节点处于关闭的情形下,对第一个节点进行了ocr的添加,移出,重定位等等操作,对于这  
  190.  种情形则需要在关闭的节点进行ocr修复处理。修复仅仅在clusterware守护进程处于关闭下完成。  
  191.  使用下面的命令修复ocr,repair参数仅仅作用于所在的节点  
  192.   ocrconfig -repair ocr device_name        #修复primary ocr,   
  193.   ocrconfig -repair ocrmirror device_name  #修复mirror ocr  
  194.   
  195.  在前面的一个示例中我们将primary 的ocr用原来的raw1变成了raw11,在这个操作期间,节点2已经意外宕机。  
  196.  下面来查看节点2的ocr.loc  
  197.  下面的ocr.loc中primary还是raw1,而上一个操作已经变成了raw11  
  198.  bo2dbs:/u01/oracle/crs/log/bo2dbs # more /etc/oracle/ocr.loc  
  199.  #Device/file /dev/raw/raw11 getting replaced by device /dev/raw/raw21   
  200.  ocrconfig_loc=/dev/raw/raw1  
  201.  ocrmirrorconfig_loc=/dev/raw/raw21  
  202.  local_only=false  
  203.    
  204.  bo2dbs:/u01/oracle/crs/bin # ./crsctl start crs  
  205.  Attempting to start CRS stack   
  206.  The CRS stack will be started shortly  
  207.   
  208.  #此时bo2dbs上集群无法启动  
  209.  bo2dbs:/u01/oracle/crs/bin # ./crsctl check crs  
  210.  Failure 1 contacting CSS daemon  
  211.  Cannot communicate with CRS  
  212.  Cannot communicate with EVM   
  213.   
  214.  bo2dbs:/u01/oracle/crs/bin # ps -ef | grep d.bin | grep -v grep   #没有看到任何集群相关的进程  
  215.  bo2dbs:/u01/oracle/crs/bin # tail -2 /u01/oracle/crs/log/bo2dbs/alertbo2dbs.log    #查看日志文件  
  216.  2013-01-07 17:13:49.153  
  217.  [client(12071)]CRS-1009:The OCR configuration is invalid. Details in /u01/oracle/crs/log/bo2dbs/client/css37.log.  
  218.  bo2dbs:/u01/oracle/crs/bin # more /u01/oracle/crs/log/bo2dbs/client/css37.log      #查看日志文件  
  219.  Oracle Database 10g CRS Release 10.2.0.1.0 Production Copyright 1996, 2005 Oracle.  All rights reserved.  
  220.  2013-01-07 17:13:49.153: [  OCRRAW][190773584]proprioini: OCR configuration on disk 1 isn‘t valid    
  221.  2013-01-07 17:13:49.153: [  OCRRAW][190773584]proprinit: Could not open raw device   
  222.  2013-01-07 17:13:49.153: [ default][190773584]a_init:7!: Backend init unsuccessful : [26]  
  223.  2013-01-07 17:13:49.153: [ CSSCLNT][190773584]clsssinit:   
  224.     Unable to access OCR device in OCR init.PROC-26: Error while accessing the physical storage  
  225.   
  226.  #从上面的日志可知,在磁盘1上ocr配置无效,也就是不能打开裸设备raw1  
  227.   
  228.  #下面我们来尝试修复  
  229.  bo2dbs:/u01/oracle/crs/bin # ./ocrconfig -repair ocr /dev/raw/raw11  
  230.  bo2dbs:/u01/oracle/crs/bin # more /etc/oracle/ocr.loc  
  231.  #Device/file /dev/raw/raw1 getting replaced by device /dev/raw/raw11   
  232.  ocrconfig_loc=/dev/raw/raw11  
  233.  ocrmirrorconfig_loc=/dev/raw/raw21  
  234.  local_only=false  
  235.  bo2dbs:/u01/oracle/crs/bin # ./crsctl start crs  
  236.  Attempting to start CRS stack   
  237.  The CRS stack will be started shortly   
  238.  bo2dbs:/u01/oracle/crs/bin # ./crsctl check crs  
  239.  CSS appears healthy  
  240.  CRS appears healthy  
  241.  EVM appears healthy  
  242.  bo2dbs:/u01/oracle/crs/bin # ps -ef | grep d.bin | grep -v grep  
  243.  root     14459  5067  17:33 ?        00:00:01 /u01/oracle/crs/bin/crsd.bin reboot  
  244.  oracle   14512  5065  17:33 ?        00:00:00 /u01/oracle/crs/bin/evmd.bin  
  245.  oracle   15128 14426  17:33 ?        00:00:01 /u01/oracle/crs/bin/ocssd.bin  
  246.  bo2dbs:/u01/oracle/crs/bin # ./crs_stat -t | grep bo2dbs  
  247.  ora....SM2.asm application    ONLINE    ONLINE    bo2dbs        
  248.  ora....BS.lsnr application    ONLINE    ONLINE    bo2dbs        
  249.  ora....BS.lsnr application    ONLINE    ONLINE    bo2dbs        
  250.  ora.bo2dbs.gsd application    ONLINE    ONLINE    bo2dbs        
  251.  ora.bo2dbs.ons application    ONLINE    ONLINE    bo2dbs        
  252.  ora.bo2dbs.vip application    ONLINE    ONLINE    bo2dbs        
  253.  ora....g2.inst application    ONLINE    ONLINE    bo2dbs     
  254.  # Authro : Robinson Cheng  
  255.  # Blog   : http://blog.csdn.net/robinson_0612  
  256.   
  257. 7、移除OCR  
  258.  #OCR可以添加,当然也可以移除OCR,比如对于ocr的镜像使用外部raid冗余方式。不过有个条件是必须至少有一个OCR处于联机状态。  
  259.  通常可以按照下面的步骤来移除OCR  
  260.   校验集群处于联机状态(尽可能为所有节点)  
  261.   检查至少一个ocr处于联机状态  
  262.   移除pirmary ocr或者ocr mirror  
  263.   对于ocfs文件系统,移除ocr文件  
  264.   
  265.  #使用下面的命令来移除ocr  
  266.  ocrconfig -replace ocr  
  267.  ocrconfig -replace ocrmirror  
  268.    
  269.  bo2dbs:/u01/oracle/crs/bin # ps -ef | grep d.bin  
  270.  oracle    5745  5092  17:52 ?        00:00:00 /u01/oracle/crs/bin/evmd.bin  
  271.  root      5902  5094  17:52 ?        00:00:02 /u01/oracle/crs/bin/crsd.bin reboot  
  272.  oracle    6420  5795  17:52 ?        00:00:01 /u01/oracle/crs/bin/ocssd.bin  
  273.  root      8870 18345  18:01 pts/0    00:00:00 grep d.bin  
  274.  bo2dbs:/u01/oracle/crs/bin # ssh bo2dbp ps -ef | grep d.bin  
  275.  The authenticity of host ‘bo2dbp (192.168.7.51)‘ can‘t be established.  
  276.  RSA key fingerprint is 2a:77:4f:eb:46:5b:07:4a:12:23:5c:69:b2:cd:15:ec.  
  277.  Are you sure you want to continue connecting (yes/no)? yes  
  278.  Warning: Permanently added ‘bo2dbp‘ (RSA) to the list of known hosts.  
  279.  Password:   
  280.  oracle    5837  5122  17:54 ?        00:00:00 /u01/oracle/crs/bin/evmd.bin  
  281.  root      5907  5124  17:54 ?        00:00:02 /u01/oracle/crs/bin/crsd.bin reboot  
  282.  oracle    6672  5756  17:54 ?        00:00:01 /u01/oracle/crs/bin/ocssd.bin  
  283.    
  284.  #两个ocr都处于online  
  285.  bo2dbs:/u01/oracle/crs/bin # ./ocrcheck  
  286.  Status of Oracle Cluster Registry is as follows :  
  287.           Version                  :          2  
  288.           Total space (kbytes)     :     204560  
  289.           Used space (kbytes)      :       6184  
  290.           Available space (kbytes) :     198376  
  291.           ID                       : 1512159503  
  292.           Device/File Name         : /dev/raw/raw11   #primary ocr  
  293.                                      Device/File integrity check succeeded  
  294.           Device/File Name         : /dev/raw/raw21   #mirror ocr  
  295.                                      Device/File integrity check succeeded  
  296.    
  297.           Cluster registry integrity check succeeded  
  298.    
  299.  bo2dbs:/u01/oracle/crs/bin # ./ocrconfig -replace ocr    #移除ocr  
  300.  bo2dbs:/u01/oracle/crs/bin # more /etc/oracle/ocr.loc  
  301.  #Device/file /dev/raw/raw11 being deleted   
  302.  ocrconfig_loc=/dev/raw/raw21  
  303.  local_only=false  
  304.  bo2dbs:/u01/oracle/crs/bin # ocrcheck  
  305.  -bash: ocrcheck: command not found  
  306.  bo2dbs:/u01/oracle/crs/bin # ./ocrcheck  
  307.  Status of Oracle Cluster Registry is as follows :  
  308.           Version                  :          2  
  309.           Total space (kbytes)     :     204560  
  310.           Used space (kbytes)      :       6184  
  311.           Available space (kbytes) :     198376  
  312.           ID                       : 1512159503  
  313.           Device/File Name         : /dev/raw/raw21   #可以看到原来的mirror ocr变成了primary ocr  
  314.                                      Device/File integrity check succeeded  
  315.    
  316.                                      Device/File not configured  
  317.    
  318.           Cluster registry integrity check succeeded  转:http://blog.csdn.net/leshami/article/details/8572648

Oracle RAC OCR 的管理与维护