p509 文平
如果使用DBCA工具进行数据库的创建、集群服务创建,或使用netca进行集群监听器的配置等操作,
相应的配置结果会被自动写入OCR中注册记载。但如果手工创建了数据库(create database)、手工编辑
了监听器文件,则OCR中不作记载。这是需要管理员使用srvctl add 命令进行群集服务信息箱OCR的手工注册。
反之,如果进行了数据库的直接删除等类似操作,而未经过DBCA工具等,则需要使用反向命令srvctl remove进行
信息的手工删除。
例如,下面通过add database命令手工添加一套群集数据库sdzy,在集群节点node_a的node_b上分别添加实例
sdzy1和sdzy2:
$srvctl add database -d sdzy -o /db/oracle/product/10.2.0/db_1
$srvctl add instance -d sdzy -i sdzy1 -n node_a
$srvctl add instance -d sdzy -i sdzy2 -n node_b
在上面的过程中,关于数据库sdzy的定义被添加到了集群注册表中(这并不意味着这个数据库一定存在)
。其中-d 参数后面的是数据库名,-o参数声明了这套数据库的ORACLE_HOME,-i参数声明的是在各节点上的数据库
实例名,而-n参数则描述了节点名。
检查数据库在OCR的注册结果,对数据库sdzy进行查询如下:
$srvctl config database -d sdzy
node_a sdzy1 /db/oracle/product/10.2.0/db_1
node_b sdzy2 /db/oracle/product/10.2.0/db_1
$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....t1.inst application ONLINE ONLINE cctt1
ora....t2.inst application ONLINE ONLINE cctt2
ora.cctt.db application ONLINE ONLINE cctt1
ora....tt1.srv application ONLINE ONLINE cctt1
ora....tt2.srv application ONLINE ONLINE cctt2
ora.....taf.cs application ONLINE ONLINE cctt1
ora....SM1.asm application ONLINE ONLINE cctt1
ora....T1.lsnr application ONLINE ONLINE cctt1
ora.cctt1.gsd application ONLINE ONLINE cctt1
ora.cctt1.ons application ONLINE ONLINE cctt1
ora.cctt1.vip application ONLINE ONLINE cctt1
ora....SM2.asm application ONLINE ONLINE cctt2
ora....T2.lsnr application ONLINE ONLINE cctt2
ora.cctt2.gsd application ONLINE ONLINE cctt2
ora.cctt2.ons application ONLINE ONLINE cctt2
ora.cctt2.vip application ONLINE ONLINE cctt2
ora.sdzy.db application OFFLINE OFFLINE
ora....y1.inst application OFFLINE OFFLINE
ora....y2.inst application OFFLINE OFFLINE
$ srvctl config database -d sdzy
cctt1 sdzy1 /oracle/product/db
cctt2 sdzy2 /oracle/product/db
添加完成后,管理员可以从任意一个节点进行手工的sdzy数据库的创建操作,并从各节点按照群集方式启动和
关闭数据库,或者以集群方式使用数据库,只要再创建其它相关信息即可,如网络监听服务等。
删除OCR信息也同样重要。如果一套数据库被手工删除,或是需要重构数据库,则由于集群注册表中已经包含这样的信息,因此必须先行删除原始数据库信息,才能重行创建数据库。
下面使用srvctl remove命令手工删除一套集群数据库sdzy,在集群节点node_a 和node_b上分别删除实例sdzy1和
sdzy2:
srvctl remove instance -d sdzy -i sdzy1
srvctl remove instance -d sdzy -i sdzy2
||||||||||||||||||||||
$ srvctl config database -d sdzy
cctt1 sdzy1 /oracle/product/db
cctt2 sdzy2 /oracle/product/db
$ srvctl remove instance -d sdzy -i sdzy1
Remove instance sdzy1 from the database sdzy? (y/[n]) y
$ srvctl remove instance -d sdzy -i sdzy2
Remove instance sdzy2 from the database sdzy? (y/[n]) y
$ srvctl remove database -d sdzy
Remove the database sdzy? (y/[n]) y
$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....t1.inst application ONLINE ONLINE cctt1
ora....t2.inst application ONLINE ONLINE cctt2
ora.cctt.db application ONLINE ONLINE cctt1
ora....tt1.srv application ONLINE ONLINE cctt1
ora....tt2.srv application ONLINE ONLINE cctt2
ora.....taf.cs application ONLINE ONLINE cctt1
ora....SM1.asm application ONLINE ONLINE cctt1
ora....T1.lsnr application ONLINE ONLINE cctt1
ora.cctt1.gsd application ONLINE ONLINE cctt1
ora.cctt1.ons application ONLINE ONLINE cctt1
ora.cctt1.vip application ONLINE ONLINE cctt1
ora....SM2.asm application ONLINE ONLINE cctt2
ora....T2.lsnr application ONLINE ONLINE cctt2
ora.cctt2.gsd application ONLINE ONLINE cctt2
ora.cctt2.ons application ONLINE ONLINE cctt2
ora.cctt2.vip application ONLINE ONLINE cctt2
$
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由于OCR中包括了集群服务相关的信息,集群众实例相关信息、ASM实例相关信息、集群数据库相关信息
等,这些信息维系了RAC集群的运行,需要进行必要的可靠性维护,是所有节点的信息不会产生缺失。
OCR的设置信息可以通过$CRS_HOME/bin目录下的ocrcheck获得
$ ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 524044
Used space (kbytes) : 4636
Available space (kbytes) : 519408
ID : 344313012
Device/File Name : /dev/roradsk/oradsk00
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
由于OCR信息对集群十分重要,Oracle本身设计中就包含了对OCR信息的备份。在运行状态下OCR信息
每4个小时备份一次,存储在CRS_HOME中的cdata/<clustername>目录下。同时在CRS_HOME目录下的bin
目录中,也包含对应的ORC维护命令 ocrconfig,OCR的备份信息可以通过该命令查询出来。
|||||||||||||
$ cd $ORA_CRS_HOME
$ pwd
/oracle/product/crs
$ cd cdata
$ ls
crs-cctt localhost
$ cd crs-cctt
$ ls
backup00.ocr backup02.ocr day_.ocr week_.ocr
backup01.ocr day.ocr week.ocr
$ pwd
/oracle/product/crs/cdata/crs-cctt
||||||||||||||||||||||||||||||||||||||||||||||||||||||
$ ocrconfig -showbackup
cctt1 2010/01/28 10:09:37 /oracle/product/crs/cdata/crs-cctt
cctt1 2010/01/28 06:09:36 /oracle/product/crs/cdata/crs-cctt
cctt1 2010/01/28 02:09:35 /oracle/product/crs/cdata/crs-cctt
cctt1 2010/01/27 02:09:30 /oracle/product/crs/cdata/crs-cctt
cctt1 2010/01/18 02:08:41 /oracle/product/crs/cdata/crs-cctt
$
|||||||||||||||||||||||||
当然,这个备份可以更改,如果希望OCR能够备份到其他目录,则管理员可以使用如下命令
进行修改。首先以root用户登录系统,然后进入到$CRS_HOME/bin目录下,执行下面的命令,更
该备份位置到另外一个目录crs-backup:
#./ocrconfig -backuploc /db/oracle/product/10.2.0/crs/cdata/crs_backup
Oracle保证OCR每四小时自动备份一次。除此之外,通过ocrconfig工具,我们可以进行自定义
周期的OCR逻辑备份。下面使用ocrconfig 命令的导出语法将OCR备份到/db/oracle目录下的一个文件
ocr_export1.dmp中,过程如下:
#./ocrconfig -export /db/oracle/orc_export1.dmp
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
$ which ocrconfig
/oracle/product/db/bin/ocrconfig
$ cd /oracle/product/db/bin/
$ su
Password:
#
# ./ocrconfig -export /oracle/ocr_export1.dmp
#
# ls -l /oracle/ocr_export1.dmp
-rw-rw-rw- 1 root sys 104160 Jan 28 11:54 /oracle/ocr_export1.dmp
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
在AIX上,使用 ./ocrconfig -export 命令来构成一个Shell脚本,并使用 crontab -e 命令将OCR备份的计划放入
例行备份计划中,这显然是一个工程上的可选方法。
如果集群OCR不可用,集群无法启动和使用,则这时的OCR备份重要性会凸现出来,仅启动集群的某个节点,
并以单用户模式登录系统来避免启动CSS和CRS守护进程,使用OCR逻辑备份来重构OCR,方法如下:
#./ocrconfig -import /db/oracle/ocr_export1.dmp
导入成功后,再以正常模式启动所有的节点即可。
如果使用OCR的自动物理备份,则使用./ocrconfig -resotre 命令进行恢复。