rac中的spfile探讨

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:rac中的spfile探讨

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

今天朋友的的rac,因为被同事做数据库升级,分别在两个节点的本地创建了spfile,然后使用这个spfile启动了数据库,因为他不是非常懂oracle,所以向我求救,我改他的建议是:
1、利用备份的原来的pfile文件创建在asm中的spfile,规则是:+ASM/SID/spfileSID
2、dbs目录下创建一个本地的initsid.ora,然后在里面加一个spfile=’+ASM pfile path’(两个节点同样操作,注意sid不同)
3、分别重启数据库
出现该问题的原因分析:
做数据库升级的朋友的同事也不懂rac的spfile的相关规则,应该是在重启数据库的时候,提示spfile不存在,然后自己手工创建利用pfile创建的spfile到dbs下面,然后朋友十一后检测数据库,发现spfile都放置在本地了。
1、通常读取参数文件顺序
我们知道,如果不指定参数文件,oracle是按照这个顺序查找文件来启动数据库的:
spfileSID.ora
spfile.ora
initSID.ora
init.ora
如果这些文件都没有找到,启动会失败。

2、RAC中关于spfile的启动探讨

[rac@cent1 dbs]$ echo $ORACLE_SID
RACDB1
[rac@cent1 dbs]$ touch spfileRACDB1.ora  <==手工创建一个空白的spfile
[rac@cent1 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Apr 29 13:45:50 2010
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-27091: unable to queue I/O  <== 用sqlplus启动数据库时会报错
ORA-27069: attempt to do I/O beyond the range of the file
Additional information: 1
Additional information: 1
SQL>
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
[rac@cent1 dbs]$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora....B1.inst application    OFFLINE   OFFLINE
ora....B2.inst application    ONLINE    ONLINE    cent2
ora.RACDB.db   application    ONLINE    ONLINE    cent1
ora....SM1.asm application    ONLINE    ONLINE    cent1
ora....T1.lsnr application    ONLINE    ONLINE    cent1
ora.cent1.gsd  application    ONLINE    ONLINE    cent1
ora.cent1.ons  application    ONLINE    ONLINE    cent1
ora.cent1.vip  application    ONLINE    ONLINE    cent1
ora....SM2.asm application    ONLINE    ONLINE    cent2
ora....T2.lsnr application    ONLINE    ONLINE    cent2
ora.cent2.gsd  application    ONLINE    ONLINE    cent2
ora.cent2.ons  application    ONLINE    ONLINE    cent2
ora.cent2.vip  application    ONLINE    ONLINE    cent2
[rac@cent1 dbs]$ srvctl start instance -i racdb1 -d racdb  <== 用srvctl启动成功
[rac@cent1 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Apr 29 13:47:25 2010
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
RACDB1           OPEN
--说明srvctl不是用那个顺序去查找参数文件

3、查看srvctl读取spfile位置

[rac@cent1 dbs]$ srvctl config database -d racdb -a
cent1 RACDB1 /rac/product/10.2.0/db
cent2 RACDB2 /rac/product/10.2.0/db
DB_NAME: RACDB
ORACLE_HOME: /rac/product/10.2.0/db
SPFILE: +DATA/RACDB/spfileRACDB.ora
DOMAIN: WORLD
DB_ROLE: null
START_OPTIONS: null
POLICY:  AUTOMATIC
ENABLE FLAG: DB ENABLED

4、修改CRS中关于spfile位置

[rac@cent1 dbs]$ srvctl modify database -d racdb -p ' +DATA/RACDB/spfileRACDB1.ora'

RAC负载均衡配置

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:RAC负载均衡配置

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、客户端均衡(Client-Side LB)
工作原理:当客户端发起连接时,会从地址列表中随机选取一个,再使用随机算法把连接请求分散到各个实例。
存在缺点:
1.1)分配连接时没有考虑每个节点的真实负载,最后分配不过不一定是平衡
1.2)随机算法需要长时间片,如果在短时间内同时发起多个连接,这些连接有可能被分配到一个节点上
1.3)有些情况下,连接可能被分配到故障节点上
配置方法:在tns中添加LOAD_BALANCE = YES条目
2、服务器端均衡(Server-Side LB)
工作原理:
2.1)该均衡实现是依赖于Listener收集的负载信息。在数据库运行过程中,PMON后台进程会收集数系统的负载信息,然后登记到Listener中。
2.2)PMON进程不仅会向本地的Listener注册,也会想其他节点上的Listener注册,但到底向何处注册,是由Remote_Listeners和Local_Listener这两个参数决定。Local_Listener不用设置,而Remote_Listeners需要设置,参数值有一个tnsnames项。
2.3)当收到客户端连接请求时,就会把连接转给负载最小的节点,这个节点可能是自己,也可能是其他节点,也就是Listener会转发客户端的连接请求。
配置方法:

SQL> show parameter listener;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string
remote_listener                      string      LISTENERS_DEVDB
tnsnames.ora
LISTENERS_DEVDB =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
  )
listener.ora(除掉SID_LIST_LISTENER_NAME项)
LISTENER_RAC1 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT = 1521)(IP = FIRST))
    )
  )

3、两者联合使用
Server-Side LB和Client-Side LB不是互斥的,两者可以一起工作,这个时候客户端的连接请求会先从地址列表中随机选择一个地址,然后向该地址的Listener发送请求;Listener接到请求后,根据各个节点负载情况从中挑选出最合适的节点转发连接请求。

RAC Failover三种方式

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:RAC Failover三种方式

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、Client-Side Connect Time Failover
1.1)在用户端tnsname中配置了多个地址,用户发起连接请求时,会先尝试连接地址表中的第一个地址,如果这个连接尝试失败,则继续尝试使用第二个地址,直至连接成功或者遍历了所有的地址。
1.2)这种Failover的特点是:在建立连接那一时刻起作用,一旦连接建立之后,节点出现故障都不会作处理,从而客户端的表现就是会话断开,用户程序必须重新建立连接。
启用该方法:在客户端tnsname.ora中添加FAILOVER=ON条目,因为这个参数默认值就是为NO,所以即使客户端不加该条目,也有这种Failover功能。

XFF_F =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.21)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.22)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = devdb)
    )
  )

2、TAF(Transparent Application Failover)
2.1)在连接建立以后、应用系统运行过程中,如果某个实例发生故障,连接到这个实例上的用户会被自动迁移到其他的健康的实例上。对于应用程序而言,这个迁移过程是透明的,不需要用户的介入,当然在迁移过程中,未提交的事物会回滚。
2.2)与Client-Side Connect Time Failover比较起来,就是多了FAILOVER_MODE这一配置项,该配置项包含4个子项目
2.2.1)METHOD:可选值有BASIC和PRECONNECT
BASIC是指在感知到节点故障时才创建到其他实例的连接
PRECONNECT是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上。
2.2.2)TYPE:可选值有SESSION和SELECT
两者的区别在于对select语句的处理,select表示如果发生故障迁移,正在执行的select语句将在新的节点上继续返回后续结果集;而session表示重新执行该select查询返回全部的结果。
2.2.3)DELAY表示重试间隔时间
2.2.4)RETRIES表示重试次数

XFF_T =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.21)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.22)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = devdb)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
        (RETRIES = 180)
        (DELAY = 5)
      )
    )
  )

3、Server-Side TAF
3.1)Server-Side TAF具有TAF的所有特点
3.2)这种TAF是在服务器上配置,不需要在客户端进行相关配置,如果修改一个参数,不需要在所有的tns上修改,而只要修改服务器中的service即可
用户有两种角色可以选择
PREFERRED:首选实例,会优先选择拥有这个角色的实例提供服务
AVAILABLE:后备实例,当PREFERRED实例不可用时,才会转到AVAILABLE实例上

XFF_RAC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.21)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.22)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XFF)
    )
  )

集群服务启动与关闭(10g)

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:集群服务启动与关闭(10g)

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、crs开启和关闭
关闭crs
/etc/init.d/init.crs stop
开启crs
/etc/init.d/init.crs start
二、启动和关闭所有的集群服务
关闭
./crs_stop -all
启动
./crs_start -all
三、分步操作crs服务
1、关闭集群
srvctl stop service -d -s
srvctl stop database -d
srvctl stop asm -n
srvctl stop asm -n
srvctl stop nodeapps -n
srvctl stop nodeapps -n
2、关闭集群
srvctl start nodeapps -n
srvctl start nodeapps -n
srvctl start asm -n
srvctl start asm -n
srvctl start database -d
srvctl start service -d -s
3、测试
3.1)关闭
srvctl stop service -d devdb -s XFF
srvctl stop instance -d devdb -i devdb1,devdb2 -o immediate
(srvctl stop database -d devdb -o immediate)
srvctl stop asm -n rac1
srvctl stop asm -n rac2
srvctl stop nodeapps -n rac1
srvctl stop nodeapps -n rac2
3.2)启动
srvctl start nodeapps -n rac1
srvctl start nodeapps -n rac2
srvctl start asm -n rac1
srvctl start asm -n rac2
srvctl start database -d devdb
(srvctl start instance -n devdb -i devdb1,devdb2)
srvctl start service -d devdb -s XFF

RAC维护命令

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:RAC维护命令

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、节点层(olsnodes)
rac1-> olsnodes -help
Usage: olsnodes [-n] [-p] [-i] [<node> | -l] [-g] [-v]
where
-n print node number with the node name
-p print private interconnect name with the node name
-i print virtual IP name with the node name
<node> print information for the specified node
-l print information for the local node
-g turn on logging
-v run in verbose mode
rac1-> olsnodes -p -n -i
rac1    1       rac1-priv       rac1-vip
rac2    2       rac2-priv       rac2-vip
二、网络层(oifcfg)
rac1-> oifcfg -help
Name:
oifcfg – Oracle Interface Configuration Tool.
Usage:  oifcfg iflist [-p [-n]]
oifcfg setif {-node <nodename> | -global} {<if_name>/<subnet>:<if_type>}…
oifcfg getif [-node <nodename> | -global] [ -if <if_name>[/<subnet>] [-type <if_type>] ]
oifcfg delif [-node <nodename> | -global] [<if_name>[/<subnet>]]
oifcfg [-help]
<nodename> – name of the host, as known to a communications network
<if_name>  – name by which the interface is configured in the system
<subnet>   – subnet address of the interface
<if_type>  – type of the interface { cluster_interconnect | public | storage }
rac1-> oifcfg iflist -n -p
eth0  10.10.10.0  PRIVATE  255.255.255.0
eth1  192.168.1.0  PRIVATE  255.255.255.0
rac1-> oifcfg getif
eth0  10.10.10.0  global  cluster_interconnect
eth1  192.168.1.0  global  public
rac1-> oifcfg getif -node rac1
rac1-> oifcfg getif -global rac1
eth0  10.10.10.0  global  cluster_interconnect
eth1  192.168.1.0  global  public
rac1-> oifcfg getif -type public
eth1  192.168.1.0  global  public
rac1-> oifcfg setif -global tnnel_1@none/10.0.0.0:public
rac1-> oifcfg getif -type public
eth1  192.168.1.0  global  public
tnnel_1@none  10.0.0.0  global  public
rac1-> oifcfg delif -global tnnel_1@none/10.0.0.0
rac1-> oifcfg getif -type public
eth1  192.168.1.0  global  public
三、集群层
1、crsctl
rac1-> crsctl
Usage: crsctl check  crs          – checks the viability of the CRS stack
crsctl check  cssd         – checks the viability of CSS
crsctl check  crsd         – checks the viability of CRS
crsctl check  evmd         – checks the viability of EVM
crsctl set    css <parameter> <value> – sets a parameter override
crsctl get    css <parameter> – gets the value of a CSS parameter
crsctl unset  css <parameter> – sets CSS parameter to its default
crsctl query  css votedisk    – lists the voting disks used by CSS
crsctl add    css votedisk <path> – adds a new voting disk
crsctl delete css votedisk <path> – removes a voting disk
crsctl enable  crs    – enables startup for all CRS daemons
crsctl disable crs    – disables startup for all CRS daemons
crsctl start crs  – starts all CRS daemons.
crsctl stop  crs  – stops all CRS daemons. Stops CRS resources in case of cluster.
crsctl start resources  – starts CRS resources.
crsctl stop resources  – stops  CRS resources.
crsctl debug statedump evm  – dumps state info for evm objects
crsctl debug statedump crs  – dumps state info for crs objects
crsctl debug statedump css  – dumps state info for css objects
crsctl debug log css [module:level]{,module:level} …
– Turns on debugging for CSS
crsctl debug trace css – dumps CSS in-memory tracing cache
crsctl debug log crs [module:level]{,module:level} …
– Turns on debugging for CRS
crsctl debug trace crs – dumps CRS in-memory tracing cache
crsctl debug log evm [module:level]{,module:level} …
– Turns on debugging for EVM
crsctl debug trace evm – dumps EVM in-memory tracing cache
crsctl debug log res <resname:level> turns on debugging for resources
crsctl query crs softwareversion [<nodename>] – lists the version of CRS software installed
crsctl query crs activeversion – lists the CRS software operating version
crsctl lsmodules css – lists the CSS modules that can be used for debugging
crsctl lsmodules crs – lists the CRS modules that can be used for debugging
crsctl lsmodules evm – lists the EVM modules that can be used for debugging
If necesary any of these commands can be run with additional tracing by
adding a “trace” argument at the very front.
Example: crsctl trace check css
root@rac1 bin]# ./crsctl stop  crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
[root@rac1 bin]# ./crsctl query css votedisk
0.     0    /ocfs/clusterware/votingdisk
located 1 votedisk(s).
[root@rac1 bin]# ./crsctl add    css votedisk /ocfs/clusterware/votingdisk02 -force
Now formatting voting disk: /ocfs/clusterware/votingdisk01
successful addition of votedisk /ocfs/clusterware/votingdisk02.
[root@rac2 bin]# ./crsctl add    css votedisk /ocfs/clusterware/votingdisk02 -force
Now formatting voting disk: /ocfs/clusterware/votingdisk02
successful addition of votedisk /ocfs/clusterware/votingdisk02.
[root@rac1 bin]# ./crsctl query css votedisk
0.     0    /ocfs/clusterware/votingdisk
1.     0    /ocfs/clusterware/votingdisk01
2.     0    /ocfs/clusterware/votingdisk02
2、ocrdump
rac2-> ocrdump -help
Name:
ocrdump – Dump contents of Oracle Cluster Registry to a file.
Synopsis:
ocrdump [<filename>|-stdout] [-backupfile <backupfilename>] [-keyname <keyname>] [-xml] [-noheader]
Description:
Default filename is OCRDUMPFILE. Examples are:
prompt> ocrdump
writes cluster registry contents to OCRDUMPFILE in the current directory
prompt> ocrdump MYFILE
writes cluster registry contents to MYFILE in the current directory
prompt> ocrdump -stdout -keyname SYSTEM
writes the subtree of SYSTEM in the cluster registry to stdout
prompt> ocrdump -stdout -xml
writes cluster registry contents to stdout in xml format
Notes:
The header information will be retrieved based on best effort basis.
A log file will be created in
$ORACLE_HOME/log/<hostname>/client/ocrdump_<pid>.log. Make sure
you have file creation privileges in the above directory before
running this tool.
rac2-> ocrdump /tmp/ocr.out -keyname SYSTEM.css -xml
rac2-> ocrdump /tmp/ocr_a.out  -xml
rac2-> ocrdump -stdout -keyname SYSTEM.css -xml|more
3、ocrcheck
rac2-> ocrcheck
Status of Oracle Cluster Registry is as follows :
Version                  :          2
Total space (kbytes)     :     262144
Used space (kbytes)      :       4344
Available space (kbytes) :     257800
ID                       :  582586001
Device/File Name         : /ocfs/clusterware/ocr
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
4、ocrconfig
rac2-> ocrconfig
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.
rac2-> ocrconfig -showbackup
rac1     2011/07/29 20:18:22     /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
rac1     2011/07/29 16:18:33     /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
rac1     2011/07/29 16:18:33     /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
rac1     2011/07/29 16:18:33     /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
[root@rac1 bin]# cd /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
[root@rac1 crs]# ll
总用量 16368
-rw-r–r–  1 root root 4554752  7月 29 20:18 backup00.ocr
-rw-r–r–  1 root root 4055040  7月 29 16:18 backup01.ocr
-rw-r–r–  1 root root 4055040  7月 29 16:18 day.ocr
-rw-r–r–  1 root root 4055040  7月 29 16:18 week.ocr
rac2-> ocrconfig -export /tmp/bak_ocr -s online
PROT-20: Insufficient permission to proceed. Require privileged user
[root@rac1 bin]# ./ocrconfig -export /tmp/bak_ocr -s online
[root@rac1 bin]# ll /tmp/bak_ocr
-rw-r–r–  1 root root 98692  7月 30 00:07 /tmp/bak_ocr
四、应用层
1、crs_stat
rac2-> crs_stat -help
Usage:  crs_stat [resource_name […]] [-v] [-l] [-q] [-c cluster_member]
crs_stat [resource_name […]] -t [-v] [-q] [-c cluster_member]
crs_stat -p [resource_name […]] [-q]
crs_stat [-a] application -g
crs_stat [-a] application -r [-c cluster_member]
crs_stat -f [resource_name […]] [-q] [-c cluster_member]
crs_stat -ls [resource_name […]] [-q]
rac2-> crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host
———————————————————————-
ora…..XFF.cs application    0/0    0/1    ONLINE    ONLINE    rac1
ora….db1.srv application    0/0    0/0    ONLINE    ONLINE    rac1
ora.devdb.db   application    0/1    0/1    ONLINE    ONLINE    rac1
ora….b1.inst application    0/5    0/0    ONLINE    ONLINE    rac1
ora….b2.inst application    0/5    0/0    ONLINE    ONLINE    rac2
ora….SM1.asm application    0/5    0/0    ONLINE    ONLINE    rac1
ora….C1.lsnr application    0/5    0/0    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    0/5    0/0    ONLINE    ONLINE    rac1
ora.rac1.ons   application    0/3    0/0    ONLINE    ONLINE    rac1
ora.rac1.vip   application    0/0    0/0    ONLINE    ONLINE    rac1
ora….SM2.asm application    0/5    0/0    ONLINE    ONLINE    rac2
ora….C2.lsnr application    0/5    0/0    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    0/5    0/0    ONLINE    ONLINE    rac2
ora.rac2.ons   application    0/3    0/0    ONLINE    ONLINE    rac2
ora.rac2.vip   application    0/0    0/0    ONLINE    ONLINE    rac2
rac2-> crs_stat -p ora.devdb.db
NAME=ora.devdb.db
TYPE=application
ACTION_SCRIPT=/u01/app/oracle/product/10.2.0/crs_1/bin/racgwrap
ACTIVE_PLACEMENT=0
AUTO_START=1
CHECK_INTERVAL=600
DESCRIPTION=CRS application for the Database
FAILOVER_DELAY=0
FAILURE_INTERVAL=60
FAILURE_THRESHOLD=1
HOSTING_MEMBERS=
OPTIONAL_RESOURCES=
PLACEMENT=balanced
REQUIRED_RESOURCES=
RESTART_ATTEMPTS=1
SCRIPT_TIMEOUT=600
START_TIMEOUT=0
STOP_TIMEOUT=0
UPTIME_THRESHOLD=7d
USR_ORA_ALERT_NAME=
USR_ORA_CHECK_TIMEOUT=0
USR_ORA_CONNECT_STR=/ as sysdba
USR_ORA_DEBUG=0
USR_ORA_DISCONNECT=false
USR_ORA_FLAGS=
USR_ORA_IF=
USR_ORA_INST_NOT_SHUTDOWN=
USR_ORA_LANG=
USR_ORA_NETMASK=
USR_ORA_OPEN_MODE=
USR_ORA_OPI=false
USR_ORA_PFILE=
USR_ORA_PRECONNECT=none
USR_ORA_SRV=
USR_ORA_START_TIMEOUT=0
USR_ORA_STOP_MODE=immediate
USR_ORA_STOP_TIMEOUT=0
USR_ORA_VIP=
2、srvctl
rac2-> srvctl
用法: srvctl <command> <object> [<options>]
命令: enable|disable|start|stop|relocate|status|add|remove|modify|getenv|setenv|unsetenv|config
对象: database|instance|service|nodeapps|asm|listener
有关各个命令和对象的详细帮助, 请使用:
srvctl <command> <object> -h
rac2-> srvctl config database
devdb
rac2-> srvctl config database -d devdb
rac1 devdb1 /u01/app/oracle/product/10.2.0/db_1
rac2 devdb2 /u01/app/oracle/product/10.2.0/db_1
rac2-> srvctl config database -d devdb -a
rac1 devdb1 /u01/app/oracle/product/10.2.0/db_1
rac2 devdb2 /u01/app/oracle/product/10.2.0/db_1
DB_NAME: devdb
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1
SPFILE: +DG1/devdb/spfiledevdb.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY:  AUTOMATIC
ENABLE FLAG: DB ENABLED
rac2-> srvctl config nodeapps -n rac1
rac1 devdb1 /u01/app/oracle/product/10.2.0/db_1
rac2-> srvctl config nodeapps -h
用法: srvctl config nodeapps -n <node_name> [-a] [-g] [-o] [-s] [-l]
-n <node>           节点名
-a                  显示 TNS 条目
-g                  显示 GSD 配置
-s                  显示 ONS 守护程序配置
-l                  显示监听程序配置
-h                  打印用法
rac2-> srvctl config nodeapps -n rac2 -l
监听程序已存在。
rac2-> srvctl config nodeapps -n rac1 -a
VIP 已存在。: /rac1-vip/192.168.1.21/255.255.255.0/eth0:eth1
rac2-> srvctl config listener -n rac2
rac2 LISTENER_RAC2
rac2-> srvctl config asm -n rac1
+ASM1 /u01/app/oracle/product/10.2.0/db_1
rac2-> srvctl config service -h
用法: srvctl config service -d <name> [-s <service_name>] [-a] [-S <level>]
-d <name>           数据库的唯一名称
-s <service>        服务名
-a                  附加属性
-S <level>          EM 控制台的附加信息
-h                  打印用法
rac2-> srvctl config service -d devdb -a
XFF PREF: devdb1 AVAIL: devdb2 TAF: basic
–设置XFF service 不开机启动
ac2-> srvctl disable service -h
用法: srvctl disable service -d <name> -s “<service_name_list>” [-i <inst_name>]
-d <name>           数据库的唯一名称
-s “<serv,…>”     逗号分隔的服务名
-i <inst>           实例名
-h                  打印用法
rac2-> srvctl disable service -d devdb -s XFF -i devdb1
rac2-> srvctl config service -d devdb -a
XFF PREF: devdb1 AVAIL: devdb2 TAF: basic
在实例 devdb1 上禁用服务 XFF。
rac2-> srvctl enable service -h
用法: srvctl enable service -d <name> -s “<service_name_list>” [-i <inst_name>]
-d <name>           数据库的唯一名称
-s “<serv,…>”     逗号分隔的服务名
-i <inst>           实例名
-h                  打印用法
rac2-> srvctl enable service -d devdb -s XFF -i devdb1
rac2-> srvctl config service -d devdb -a
XFF PREF: devdb1 AVAIL: devdb2 TAF: basic
–添加xff2 service
rac2-> srvctl add service -h
用法: srvctl add service -d <name> -s <service_name> -r “<preferred_list>” [-a “<available_list>”] [-P <TAF_policy>]
-d <name>           数据库的唯一名称
-s <service>        服务名
-r “<pref_list>”    首选实例列表
-a “<avail_list>”   可用实例列表
-P <TAF_policy>     TAF 策略 (NONE, BASIC, 或 PRECONNECT)
用法: srvctl add service -d <name> -s <service_name> -u {-r “<new_pref_inst>” | -a “<new_avail_inst>”}
-d <name>           数据库的唯一名称
-s <service>        服务名
-u                  为服务配置添加一个新实例
-r <new_pref_inst>  新首选实例的名称
-a <new_avail_inst> 新可用实例的名称
-h                  打印用法
rac2-> srvctl add service -d devdb -s xff2 -r devdb2 -a devdb1  -P BASIC
rac2-> srvctl config service -d devdb -a
XFF PREF: devdb1 AVAIL: devdb2 TAF: basic
xff2 PREF: devdb2 AVAIL: devdb1 TAF: BASIC
rac2-> crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host
———————————————————————-
ora…..XFF.cs application    0/0    0/1    ONLINE    ONLINE    rac1
ora….db1.srv application    0/0    0/0    ONLINE    ONLINE    rac2
ora.devdb.db   application    0/1    0/1    ONLINE    ONLINE    rac1
ora….b1.inst application    0/5    0/0    ONLINE    ONLINE    rac1
ora….b2.inst application    0/5    0/0    ONLINE    ONLINE    rac2
ora….xff2.cs application    0/0    0/1    OFFLINE   OFFLINE
ora….db2.srv application    0/0    0/0    OFFLINE   OFFLINE
ora….SM1.asm application    0/5    0/0    ONLINE    ONLINE    rac1
ora….C1.lsnr application    0/5    0/0    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    0/5    0/0    ONLINE    ONLINE    rac1
ora.rac1.ons   application    0/3    0/0    ONLINE    ONLINE    rac1
ora.rac1.vip   application    0/0    0/0    ONLINE    ONLINE    rac1
ora….SM2.asm application    0/5    0/0    ONLINE    ONLINE    rac2
ora….C2.lsnr application    0/5    0/0    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    0/5    0/0    ONLINE    ONLINE    rac2
ora.rac2.ons   application    0/3    0/0    ONLINE    ONLINE    rac2
ora.rac2.vip   application    0/0    0/0    ONLINE    ONLINE    rac2
–设置xff2 service 开机自启动
rac2->  srvctl enable service -d devdb -s xff2 -i devdb1
rac2->  srvctl enable service -d devdb -s xff2 -i devdb2
–启动xff2 service
rac2-> srvctl start service -d devdb -s xff2 -i devdb1
rac2-> crs_stat -t
Name           Type           Target    State     Host
————————————————————
ora…..XFF.cs application    ONLINE    ONLINE    rac1
ora….db1.srv application    ONLINE    ONLINE    rac2
ora.devdb.db   application    ONLINE    ONLINE    rac1
ora….b1.inst application    ONLINE    ONLINE    rac1
ora….b2.inst application    ONLINE    ONLINE    rac2
ora….xff2.cs application    ONLINE    ONLINE    rac2
ora….db2.srv application    ONLINE    ONLINE    rac1
ora….SM1.asm application    ONLINE    ONLINE    rac1
ora….C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora….SM2.asm application    ONLINE    ONLINE    rac2
ora….C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
rac2-> srvctl status  service -d devdb -v
服务 XFF 正在实例 devdb2 上运行
服务 xff2 正在实例 devdb1 上运行
–停用xff2 service
rac2-> srvctl stop service -d devdb -s xff2 -i devdb1
rac2-> crs_stat -t
Name           Type           Target    State     Host
————————————————————
ora…..XFF.cs application    ONLINE    ONLINE    rac1
ora….db1.srv application    ONLINE    ONLINE    rac2
ora.devdb.db   application    ONLINE    ONLINE    rac1
ora….b1.inst application    ONLINE    ONLINE    rac1
ora….b2.inst application    ONLINE    ONLINE    rac2
ora….xff2.cs application    ONLINE    ONLINE    rac2
ora….db2.srv application    OFFLINE   OFFLINE
ora….SM1.asm application    ONLINE    ONLINE    rac1
ora….C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora….SM2.asm application    ONLINE    ONLINE    rac2
ora….C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
rac2-> srvctl status  service -d devdb -v
服务 XFF 正在实例 devdb2 上运行
服务 xff2 未运行。
–删除xff2 service
rac2-> srvctl remove service -h
用法: srvctl remove service -d <name> -s <service_name> [-i <inst_name>] [-f]
-d <name>           数据库的唯一名称
-s <service>        服务名
-i <inst>           实例名
-f                  强制删除
-h                  打印用法
rac2-> srvctl remove service -d devdb -s xff2
xff2 PREF: devdb2 AVAIL: devdb1
是否从数据库 devdb 中删除服务 xff2? (y/[n]) y
rac2-> crs_stat -t
Name           Type           Target    State     Host
————————————————————
ora…..XFF.cs application    ONLINE    ONLINE    rac1
ora….db1.srv application    ONLINE    ONLINE    rac2
ora.devdb.db   application    ONLINE    ONLINE    rac1
ora….b1.inst application    ONLINE    ONLINE    rac1
ora….b2.inst application    ONLINE    ONLINE    rac2
ora….SM1.asm application    ONLINE    ONLINE    rac1
ora….C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora….SM2.asm application    ONLINE    ONLINE    rac2
ora….C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
注意使用-h或者help帮助功能

Oracle 10g RAC相关进程

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:Oracle 10g RAC相关进程

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

Oracle Clusterware进程
OCSSD
该进程是Clusterware最关键进程,如果出现异常,会导致系统重启,该进程提供的服务为CSS(Cluster Synchronization Service)服务。CSS服务是通过多种心跳机制来实现实时监控集群的健康状态,提供脑裂保护等基础集群服务功能。CSS服务有两种心跳机制:一种是通过私有网络的Network Heartbeat,另一种是通过Voting Disk的Disk Heartbeat
CRSD
CRSD是实现“高可用(HA)”的主要进程,它所提供的服务叫做CRS(Cluster Ready Service)服务。该进程对Oracle Clusterware中的资源进行监控,并在这些资源运行异常时进行干预,包括关闭、重启进程或者转移服务。
EVMD
该进程负责发布CRS产生的各种事件(Event)
RACGIMON
该进程负责检查数据库的健康状态,负责Service的启动、停止、故障转移(Failover)。这个进程会建立到数据库的持久连接,定期检查SGA中的特定信息,该信息由PMON进程定时更新
OPROCD
该进程也叫做Process Monitor Daemon。如果在非Linux平台上,并且没有使用第三方的集群软件,会看到这个进程。实现“IO隔离”功能,在Liunx平台上,是利用hangcheck-timer模块来实现“IO隔离”功能
Oracle Instance进程
LMSn
负责数据块在实例间的传递,对应的服务叫作GCS(Global Cache Service),这个进程的数量是通过参数GCS_SERVER_PROCESSES控制,缺省值是2个,取值范围为0至9
LMD
负责在多个实例间协调数据库的访问顺序,保证数据的一致性访问,对应的服务是GES(Global Enqueue Service)
LCK
负责Non-Cache Fusion资源的同步访问,每个实例只有一个LCK进程
LMON
各个实例的LMON进程进行定期通信,以检查集群中各节点的健康状态,当某个节点出现故障时,负责集群重构、GRD恢复等操作,它提供的服务叫作 Cluster Group Services(CGS)
DIAG
监控实例的健康状态,并在实例运行出现错误时收集诊断数据记录到Alert.log日志中
GSD
负责从客户端工具接收命令,为用户提供管理接口

Oracle RAC10g UNKNOWN解决

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:Oracle RAC10g UNKNOWN解决

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、表现出来的现象
rac2-> crs_stat -t
Name Type Target State Host
————————————————————
ora.rac1.gsd application ONLINE UNKNOWN rac1
ora.rac1.ons application ONLINE UNKNOWN rac1
ora.rac1.vip application ONLINE UNKNOWN rac1
ora.rac2.gsd application ONLINE UNKNOWN rac2
ora.rac2.ons application ONLINE UNKNOWN rac2
ora.rac2.vip application ONLINE UNKNOWN rac1
可以各种原因导致服务呈现unknown 状态,比如两个节点时间差太多,比如1分钟,可能导致这个异常
2、解决方法
因为UNKNOWN不能正常的被启动或者关闭(crs_start -all/crs_stop -all),所以解决方法有两种:
2.1)先禁用crs服务,后启用crs服务(root用户,两个节点上都要执行)
/etc/init.d/init.crs stop
/etc/init.d/init.crs start
2.2)单个服务关闭,后启动(oracle用户,一个节点上执行)
crs_stop ora.rac2.gsd(crs_stop -f ora.rac2.gsd强制关闭)
crs_start ora.rac2.gsd(crs_start -f ora.rac2.gsd强制开启)
该方法有变通,如一个个关闭服务,然后使用crs_start -all开启所有服务器

crs 10.2.0.1 bug(公网ip为私有ip时)

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:crs 10.2.0.1 bug(公网ip为私有ip时)

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

当crs10.2.0.1公用网卡IP段使用10、172、192段(非路由网段)的时候
1、会出现以下两种情况:
1)最后检查时出现如下错误
Checking existence of VIP node application (required)
Check failed.
Check failed on nodes:
rac1,rac2
2)在rac2上执行root.sh脚本最后
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
rac1
rac2
CSS is active on all nodes.
Waiting for the Oracle CRSD and EVMD to start
Waiting for the Oracle CRSD and EVMD to start
……
Timed out waiting for the CRS stack to start.
2、解决方法:
在root.sh在第二个节点执行完之后,以 root 用户身份在第二个节点上手动调用 VIPCA
# /u01/app/oracle/product/10.2.0/crs_1/bin/vipca
配置虚拟ip

Oracle 10g RAC之配置时间同步(NTP)

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:Oracle 10g RAC之配置时间同步(NTP)

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

所有节点的时间必须同步,这通常是通过配置NTP服务器实现的。如果用户的网络中已经有一台时间服务器,那么可以所有节点都指向它,否则可以从集群中挑选一个节点作为时间服务器,让其他节点与它同步。下面分别演示这两种方法:
(1)如果公司网络中已经有一台时间服务器
如:192.168.11.10是一台ntp时间服务器
此时NTP服务器的配置文件是/etc/ntp.conf,在每个节点编辑这个文件。
[root@cc-svr-a ~]# vi /etc/ntp.conf
编辑后的内容如下,首选公司的时间服务器。
server 192.168.11.10 prefer
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
(2)如果没有外部时间服务器
这时公司选择集群中某个节点作为时间服务器,NTP服务只需要很少的系统资源。假设选择主节点作为时间服务器,从节点向它同步,其配置方法如下。
编辑主节点的/etc/ntp.conf文件,编辑后的内容如下:
server 127.127.1.0
fudge 127.127.1.0 stratum 11
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
编辑从节点的/etc/ntp.conf文件,编辑后的内容如下:
server 192.168.11.12 prefer #注意192.168.11.12为主节点的IP地址
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
配置完成后,启动NTP服务。
[root@cc-svr-a ~]# /etc/init.d/ntpd start
[root@cc-svr-a ~]# chkconfig –level 345 ntpd on
(3)查看执行情况(主从)
[root@cc-svr-a ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*CC-Node-02 LOCAL(0) 12 u 58 64 17 0.226 -22.698 29.261

RAC的一些概念性和原理性的知识

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:RAC的一些概念性和原理性的知识

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一 集群环境下的一些特殊问题
1.1 并发控制
在集群环境中,关键数据通常是共享存放的,比如放在共享磁盘上。而各个节点的对数据有相同的访问权限,这时就必须有某种机制能够控制节点对数据的访问。Oracle RAC 是利用DLM(Distribute Lock Management) 机制来进行多个实例间的并发控制。
1.2 健忘症(Amnesia)
集群环境配置文件不是集中存放的,而是每个节点都有一个本地副本,在集群正常运行时,用户可以在任何节点更改集群的配置,并且这种更改会自动同步到其他节点。
有一种特殊情况: 节点A 正常关闭,在节点B上修改配置,关闭结点A,启动结点B。这种情况下,修改的配置文件是丢失的,就是所谓的健忘症。
1.3 脑裂(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.4 IO 隔离(Fencing)
当集群系统出现”脑裂”问题的时候,我们可以通过”投票算法”来解决谁获得集群控制权的问题。但是这样是不够的,我们还必须保证被赶出去的结点不能操作共享数据。这就是IO Fencing 要解决的问题。
IO Fencing实现有硬件和软件2种方式:
软件方式:对于支持SCSI Reserve/Release 命令的存储设备,可以用SG命令来实现。正常的节点使用SCSI Reserve命令”锁住”存储设备,故障节点发现存储设备被锁住后,就知道自己被赶出了集群,也就是说自己出现了异常情况,就要自己进行重启,以恢复到正常状态。这个机制也叫作 Sicide(自杀). Sun 和Veritas 使用的就是这种机制。
硬件方式:STONITH(Shoot The Other Node in the Head),这种方式直接操作电源开关,当一个节点发生故障时,另一个节点如果能侦测到,就会通过串口发出命令,控制故障节点的电源开关,通过暂时断电,而又上电的方式使故障节点被重启动,这种方式需要硬件支持。
二 RAC 集群
2.1 Clusterware
在单机环境下,Oracle是运行在OS Kernel 之上的。OS Kernel负责管理硬件设备,并提供硬件访问接口。Oracle 不会直接操作硬件,而是有OS Kernel代替它来完成对硬件的调用请求。
在集群环境下,存储设备是共享的。OS Kernel 的设计都是针对单机的,只能控制单机上多个进程间的访问。如果还依赖OS Kernel的服务,就无法保证多个主机间的协调工作。这时就需要引入额外的控制机制,在RAC中,这个机制就是位于Oracle 和 OS Kernel 之间的Clusterware,它会在OS Kernel之前截获请求,然后和其他结点上的Clusterware协商,最终完成上层的请求。
在Oracle 10G之前,RAC 所需要的集群件依赖与硬件厂商,比如SUN,HP,Veritas. 从Oracle 10.1版本中,Oracle 推出了自己的集群产品. Cluster Ready Service(CRS),从此RAC 不在依赖与任何厂商的集群软件。在Oracle 10.2版本中,这个产品改名为:Oracle Clusterware。
所以我们可以看出,在整个RAC 集群中,实际上有2个集群环境的存在,一个是由Clusterware 软件组成的集群,另一个是由Database 组成的集群。
2.2 Clusterware 组成
Oracle Cluster 是一个单独的安装包,安装后,在每个结点上的Oracle Clusterware 会自动启动。Oracle Clusterware的运行环境由2个磁盘文件(OCR,Voting Disk),若干进程和网络元素组成。
2.2.1 磁盘文件:
Clusterware 在运行期间需要两个文件:OCR和Voting Disk. 这2个文件必须存放在共享存储上。OCR 用于解决健忘问题,Voting Disk 用于解决健忘问题。Oracle 建议使用裸设备来存放这2个文件,每个文件创建一个裸设备,每个裸设备分配100M左右的空间就够了。
2.2.1.1 OCR
健忘问题是由于每个节点都有配置信息的拷贝,修改节点的配置信息不同步引起的。Oracle 采用的解决方法就是把这个配置文件放在共享的存储上,这个文件就是OCR Disk。
OCR 中保存整个集群的配置信息,配置信息以”Key-Value” 的形式保存其中。在Oracle 10g以前,这个文件叫作Server Manageability Repository(SRVM). 在Oracle 10g,这部分内容被重新设计,并重名为OCR.在Oracle Clusterware 安装的过程中,安装程序会提示用户指定OCR位置。并且用户指定的这个位置会被记录在/etc/oracle/ocr.Loc(Linux System) 或者/var/opt/oracle/ocr.Loc(Solaris System)文件中。而在Oracle 9i RAC中,对等的是srvConfig.Loc文件。Oracle Clusterware在启动时会根据这里面的内容从指定位置读入OCR 内容。
1). OCR key
整个OCR 的信息是树形结构,有3个大分支。分别是SYSTEM,DATABASE 和CRS。每个分支下面又有许多小分支。这些记录的信息只能由root用户修改。
2) OCR process
Oracle Clusterware 在OCR中存放集群配置信息,故OCR 的内容非常的重要,所有对OCR的操作必须确保OCR 内容完整性,所以在ORACLE Clusterware运行过程中,并不是所有结点都能操作OCR Disk.
在每个节点的内存中都有一份OCR内容的拷贝,这份拷贝叫作OCR Cache。每个结点都有一个OCR Process 来读写OCR Cache,但只有一个节点的OCR process能读写OCR Disk中的内容,这个节点叫作OCR Master结点。这个节点的OCR process 负责更新本地和其他结点的OCR Cache内容。
所有需要OCR 内容的其他进程,比如OCSSD,EVM等都叫作Client Process,这些进程不会直接访问OCR Cache,而是像OCR Process发送请求,借助OCR Process获得内容,如果想要修改OCR 内容,也要由该节点的OCR Process像Master node 的OCR process 提交申请,由Master OCR Process完成物理读写,并同步所有节点OCR Cache中的内容。
2.2.1.2 Voting Disk
Voting Disk 这个文件主要用于记录节点成员状态,在出现脑裂时,决定那个Partion获得控制权,其他的Partion必须从集群中剔除。在安装Clusterware时也会提示指定这个位置。安装完成后可以通过如下命令来查看Voting Disk位置。
$Crsctl query css votedisk
2.2.2 Clusterware 后台进程
Clusterware 由若干进程组成,其中最重要的3个是:CRSD,CSSD,EVMD. 在安装clusterware的最后阶段,会要求在每个节点执行root.sh 脚本,这个脚本会在/etc/inittab 文件的最后把这3个进程加入启动项,这样以后每次系统启动时,Clusterware 也会自动启动,其中EVMD和CRSD 两个进程如果出现异常,则系统会自动重启这两个进程,如果是CSSD 进程异常,系统会立即重启。
1). OCSSD
OCSSD 这个进程是Clusterware最关键的进程,如果这个进程出现异常,会导致系统重启,这个进程提供CSS(Cluster Synchronization Service)服务。CSS 服务通过多种心跳机制实时监控集群状态,提供脑裂保护等基础集群服务功能。
CSS 服务有2种心跳机制: 一种是通过私有网络的Network Heartbeat,另一种是通过Voting Disk的Disk Heartbeat.
这2种心跳都有最大延时,对于Disk Heartbeat,这个延时叫作IOT (I/O Timeout);对于Network Heartbeat, 这个延时叫MC(Misscount)。这2个参数都以秒为单位,缺省时IOT大于MC,在默认情况下,这2个参数是Oracle 自动判定的,并且不建议调整。可以通过如下命令来查看参数值:
$crsctl get css disktimeout
$crsctl get css misscount
注:除了Clusterware 需要这个进程,在单节点环境中如果使用了ASM,也需要这个进程;这个进程用于支持ASM Instance 和RDBMS Instance之间的通信。如果在使用了ASM的节点上安装RAC,会遇到一个问题:RAC节点要求只有一个OCSSD进程,并且应该是运行$CRS_HOME目录下的,这时就需要先停止ASM,并通过$ORACLE_HOME/bin/localcfig.Sh delete 删除之前的inittab 条目。之前安装ASM时,也使用这个脚本来启动OCSSD: $ORACLE_HOME/bin/localconfig.Sh add.
2). CRSD
CRSD是实现”高可用性(HA)”的主要进程,它提供的服务叫作CRS(Cluster Ready Service) 服务。
Oracle Clusterware是位于集群层的组件,它要为应用层资源(CRS Resource) 提供”高可用性服务”,所以,Oracle Clusterware 必须监控这些资源,并在这些资源运行异常时进行干预,包括关闭,重启进程或者转移服务。CRSD进程提供的就是这些服务。
所有需要 高可用性 的组件,都会在安装配置的时候,以CRS Resource的形式登记到OCR中,而CRSD 进程就是根据OCR中的内容,决定监控哪些进程,如何监控,出现问题时又如何解决。也就是说,CRSD 进程负责监控CRS Resource 的运行状态,并要启动,停止,监控,Failover这些资源。默认情况下,CRS 会自动尝试重启资源5次,如果还是失败,则放弃尝试。
CRS Resource 包括GSD(Global Serveice Daemon),ONS(Oracle Notification Service),VIP, Database, Instance 和 Service. 这些资源被分成2类:
GSD,ONS,VIP 和 Listener 属于Noteapps类
Database,Instance 和Service 属于 Database-Related Resource 类。
我们可以这样理解: Nodeapps 就是说每个节点只需要一个就够了,比如每个节点只有一个Listener,而Database-Related Resource 就是说这些资源和数据库有关,不受节点的限制,比如一个节点可以有多个实例,每个实例可以有多个Service。
GSD,ONS,VIP 这3个服务是在安装Clusterware的最后,执行VIPCA 时创建并登记到OCR中的。而Database,Listener,Instance 和Service 是在各自的配置过程中自动或者手动登记到OCR中的。
3). EVMD
EVMD 这个进程负责发布CRS 产生的各种事件(Event). 这些Event可以通过2种方式发布给客户:ONS 和 Callout Script. 用户可以自定义回调脚本,放在特定的目录下,这样当有某些事件发生时,EVMD会自动扫描该目录,并调用用户的脚本,这种调用是通过racgevt进程来完成的。
EVMD 进程除了复杂发布事件之外,它还是CRSD 和CSSD 两个进程之间的桥梁。CRS 和CSS 两个服务之前的通信就是通过EVMD 进程完成的。
4). RACGIMON
RACGIMON 这个进程负责检查数据库健康状态,负责Service的启动,停止,故障转移(Failover)。这个进程会建立到数据库的持久连接,定期检查SGA中的特定信息,该信息由PMON 进程定时更新。
5). OPROCD
OPROCD 这个进程也叫作 Process Monitor Daemon. 如果在非Linux 平台上,并且没有使用第三方的集群软件时,就会看到这个进程。这个进程用来检查节点的Processor Hang(CPU 挂起), 如果调度时间超过1.5秒,就会认为CPU 工作异常,会重启节点。也就是说这个进程提供 “IO 隔离” 的功能。从其在Windows 平台上的服务名: OraFnceService 也可以看出它的功能。而在Linux 平台上,是利用Hangcheck-timer 模块来实现”IO 隔离”的。
2.3 VIP 原理和特点
Oracle 的TAF 就是建立在VIP 技术之上的。IP 和VIP 区别在与: IP 是利用TCP层超时,VIP 利用的是应用层的立即响应。VIP 它是浮动的IP. 当一个节点出现问题时会自动的转到另一个节点上。
假设有一个2个节点的RAC,正常运行时每个节点上都有一个VIP。VIP1 和VIP2. 当节点2发生故障,比如异常关系。RAC 会做如下操作:
1). CRS 在检测到rac2节点异常后,会触发Clusterware 重构,最后把rac2节点剔除集群,由节点1组成新的集群。
2). RAC的Failover 机制会把节点2的VIP转移到节点1上,这时节点1的PUBLIC 网卡上就有3个IP 地址: VIP1,VIP2, PUBLIC IP1.
3). 用户对VIP2的连接请求会被IP层路由转到节点1
4). 因为在节点1上有VIP2的地址,所有数据包会顺利通过路由层,网络层,传输层。
5). 但是,节点1上只监听VIP1和public IP1的两个IP地址。并没有监听VIP2,故应用层没有对应的程序接收这个数据包,这个错误立即被捕获。
6). 客户段能够立即接收到这个错误,然后客户段会重新发起向VIP1的连接请求。
VIP 特点:
1). VIP 是通过VIPCA脚本创建的
2). VIP 作为Nodeapps类型的CRS Resource 注册到OCR中,并由CRS 维护状态。
3). VIP 会绑定到节点的public 网卡上,故public 网卡有2个地址。
4). 当某个节点发生故障时,CRS 会把故障节点的VIP 转移到其他节点上。
5). 每个节点的Listener 会同时监听public 网卡上的 public ip 和VIP
6). 客户端的tnsnames.Ora 一般会配置指向节点的VIP.
2.4 Clusterware 的日志体系
Oracle Clusterware的辅助诊断,只能从log 和trace 进行。而且它的日志体系比较复杂。
alert.log:
$ORA_CRS_HOME\log\hostname\alert.Log, 这是首选的查看文件。
Clusterware后台进程日志:
crsd.Log: $ORA_CRS_HOME\log\hostname\crsd\crsd.Log
ocssd.Log: $ORA_CRS_HOME\log\hostname\cssd\ocsd.Log
evmd.Log: $ORA_CRS_HOME\log\hostname\evmd\evmd.Log
Nodeapp日志位置:
$ORA_CRS_HOME\log\hostname\racg\
这里面放的是nodeapp的日志,包括ONS和VIP,比如:ora.Rac1.ons.Log
工具执行日志:
$ORA_CRS_HOME\log\hostname\client\
Clusterware 提供了许多命令行工具:
比如ocrcheck, ocrconfig,ocrdump,oifcfg和clscfg, 这些工具产生的日志就放在这个目录下
还有$ORACLE_HOME\log\hostname\client\ 和$ORACLE_HOME\log\hostname\racg 也有相关的日志。