查看状态
[root@rac1 bin]# ./srvctl status nodeapps
VIP rac1-vip is enabled
VIP rac1-vip is running on node: rac1
VIP rac2-vip is enabled
VIP rac2-vip is running on node: rac2
Network is enabled
Network is running on node: rac1
Network is running on node: rac2
GSD is disabled
GSD is not running on node: rac1
GSD is not running on node: rac2
ONS is enabled
ONS daemon is running on node: rac1
ONS daemon is running on node: rac2
eONS is enabled
eONS daemon is running on node: rac1
eONS daemon is running on node: rac2
[root@rac1 bin]# ./srvctl status asm
ASM is running on rac1,rac2
[root@rac1 bin]# ./srvctl status instance -d racdb -n rac1
Instance racdb1 is running on node rac1
[root@rac1 bin]# ./srvctl status instance -d racdb -n rac2
Instance racdb2 is running on node rac2
2、登陆数据库(是建立数据库时 racdb )
sqlplus sys/tiyukeji@racdb as sysdba
show parameter service_names
3、客户端 tnsnames.ora 的配置
racdbthw =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.177.126)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.177.125)(PORT = 1521))
(LOAD_BALANCE = yes)
(FAILOVER = on)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
TAF(Transparent Application Failover)即透明应用程序故障转移技术。当初始化连接出现问题无
法连接时,该功能可以保证应用程序重新连接到可用服务。
在重新连接过程中,之前的活动事务将会被回滚,但在“具体条件”下 TAF 可以保证SELECT 语句不被终止。
(LOAD_BALANCE = yes)负载均衡
(FAILOVER = on) 故障转移 这种 Failover 的特点: 只在建立连接那一时刻起作用,也就是说,这种 Failover 方式只在发起连接时才会去感知节点故障,如果节点没有反应,则自动尝试地址列表中的下一个地址。一旦连接建立之后,节点出现故障都不会做处理,从客户端的表现就是会话断开了,用户程序必须重新建立连接。启用这种 Failover 的方法就是在客户端的 tnsnames.ora 中添加FAILOVER=ON 条目,这个参数默认就是 ON,所以即使不添加这个条目,客户端也会获得这种 Failover 能力。
FAILOVER_MODE 现在的大部分流行的应用系统(如:weblogic, Jboss),都是启动时就建立若干到数据
库的长连接,在应用程序整个生命周期内重用这些连接。
而 Client-Side Connet Time Failover 的工作方式是它对应用程序的可用性没有太大帮助。
(TYPE = SELECT) TYPE: 用于定义发生故障时对完成的 SQL 语句如何处理,其中有 2 种类型:session
和 select.
这 2 种方式对于未提交的事务都会自动回滚,区别在于对 select 语句的处理,对于 select,用户正在执行的 select 语句会被转移到新的实例上,在新的节点上继续返回后续结果集,而已经返回的记录集则抛弃。假设用户正在节点 1 上执行查询,整个结果集共有 100 条记录,现在已从节点 1 上返回 10 条记录,这时节点 1 宕机,用户连接被转移到节点 2 上,如果是 session 模式,则需要重新执行查询语句;如果是 select 方式,会从节点 2 上继续返回剩下的 90 天记录,而已经从节点 1 返回的 10 条记录不会重复返回给用户,对于用户而言,感受不到这种切换。
显然为了实现 select 方式,Oracle 必须为每个 session 保存更多的内容,包括游标,用户上下文等,需要更多的资源也是用资源换时间的方案。(METHOD = BASIC) METHOD: 用户定义何时创建到其实例的连接,有 BASIC 和 PRECONNECT 两种可选值。
1、BASIC: 是指在感知到节点故障时才创建到其他实例的连接。
2、PRECONNECT: 是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上。
两种方法比较: BASIC 方式在 Failover 时会有时间延迟,PRECONNECT 方式虽然没有时间延迟,
但是建立多个冗余连接会消耗更多资源,两者就是是用时间换资源和用资源换时间的区别。
(RETRIES = 180) (DELAY = 5) 是 retry 的复数形式,RETRIES:当前节点失败后,失败切换功能会尝
试连接备用节点,这个值确定了尝试的次数,如果仅 DELAY 被指定,RETRIES 默认为 5。DELAY:两次尝试之间等待的秒数,如果仅指定 RETRIES,DELAY 默认为 1 秒
4、RAC 日常维护手册
一、OCR 和 Voting disk 的管理
Voting disk(表决磁盘方面):
Voting disk 记录节点成员信息,如包含哪些节点成员、节点的添加删除信息记录,大小为 20MB
查看 voting disk 位置:crsctl query css votedisk
$ crsctl query css votedisk
0. 0 /dev/rhdisk3
如果 CRS 安装过程失败,需要重新安装则需要初始化 voting disk 盘,可用 DD 或重建卷
dd if=/dev/zero of=/dev/rhdisk3 bs=8192 count=2560
备份 votedisk: dd if=/dev/rhdisk3 of=/tmp/votedisk.bak
恢复 votedisk: dd if=/tmp/votedisk.bak of=/dev/rhdisk3
添加 voting disk 镜像盘:
crsctl add css votedisk /dev/rhdisk7 -force
Votedisk 不像 OCR,必须是一半以上可用,否则集群会宕掉,所以不应该只添加一块。在添加 voting
disk 的时候必须停掉 CRS
删除 voting disk 镜像盘
crsctl delete css votedisk /dev/rhdisk7 -force
OCR 方面
OCR 记录节点成员的配置信息,如 database、ASM、instance、listener、VIP 等 CRS 资源的配置信息,
可存储于裸设备或者群集文件系统上,推荐设置大小为 100MB
如以 RAW 的方式,则划分一个 RAW,例如:/dev/rhdisk2
如果 CRS 安装过程失败,需要重新安装则需要初始化 OCR 盘(RAW 方式),可用 DD 或重建卷
dd if=/dev/zero of=/dev/rhdisk2 bs=8192 count=12800
Oracle 每四个小时自动发起备份,并保存三个版本,但只存在一个节点上
$ ocrconfig -showbackup
poaisdb1 2008/04/10 22:53:29
/u01/app/oracle/product/10.2.0/crs/cdata/crs
poaisdb1 2008/04/10 18:53:28
/u01/app/oracle/product/10.2.0/crs/cdata/crs
poaisdb1 2008/04/10 14:53:27
/u01/app/oracle/product/10.2.0/crs/cdata/crs
poaisdb1 2008/04/09 06:53:20
/u01/app/oracle/product/10.2.0/crs/cdata/crs
poaisdb2 2008/04/03 03:31:28
/u01/app/oracle/product/10.2.0/crs/cdata/crs
恢复 OCR:ocrconfig -restore
/u01/app/oracle/product/10.2.0/crs/cdata/crs/backup01.ocr
OCR 手动导出:ocrconfig -export /tmp/ocr_bak
OCR 手动导入:ocrconfig -import /tmp/ocr_bak
添加 OCR 镜像盘一:
1.用 crsctl stop crs 停掉所有节点 CRS 服务
2.创建用于镜像 OCR 的 RAW 设备,比如为:/dev/rhdisk6
3.用 ocrconfig –export 导出 OCR 的信息
4.编辑/etc/oracle/ocr.loc 文件,添加 ocrmirrorconfig_loc 行
$ cat ocr.loc
ocrconfig_loc=/dev/rhdisk2
ocrmirrorconfig_loc=/dev/rhdisk6
local_only=FALSE
5.用 ocrconfig –import 导入 OCR 的信息
6.检查 ocr 设置信息
$ ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 103724
Used space (kbytes) : 3824
Available space (kbytes) : 99900
ID : 1086971606
Device/File Name : /dev/rhdisk2 Device/File integrity check
succeeded
Device/File Name : /dev/rhdisk6 Device/File integrity check
succeeded
Cluster registry integrity check succeeded
7.最后用 crsctl start crs 启动 CRS 服务
使用导出,导入进行备份和恢复
Oracle 推荐在对集群做调整时,比如增加,删除节点之前,应该对 OCR 做一个备份,可以使用 export 备
份到指定文件,如果做了 replace 或者 restore 等操作,Oracle 建议使用 cluvfy comp ocr -n
all 命令来做一次全面的检查。该命令在 clusterware 的安装软件里。
1) 首先关闭所有节点的 CRS
[root@raw1 bin]# ./crsctl stop crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
2) 用 root 用户导出 OCR 内容
[root@raw1 bin]# ./ocrconfig -export /u01/ocr.exp
3) 重启 CRS
[root@raw1 bin]# ./crsctl start crs
Attempting to start CRS stack
The CRS stack will be started shortly
4) 检查 CRS 状态
[root@raw1 bin]# ./crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
)破坏 OCR 内容
[root@raw1 bin]# dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=102400
102400+0 records in
102400+0 records out
6) 检查 OCR 一致性
[root@raw1 bin]# ./ocrcheck
PROT-601: Failed to initialize ocrcheck
7)使用 cluvfy 工具检查一致性
[root@raw1 cluvfy]# ./runcluvfy.sh comp ocr -n all
Verifying OCR integrity
Unable to retrieve nodelist from Oracle clusterware.
Verification cannot proceed.
8) 使用 Import 恢复 OCR 内容
[root@raw1 bin]# ./ocrconfig -import /u01/ocr.exp
9)再次检查 OCR
[root@raw1 bin]# ./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 147352
Used space (kbytes) : 4364
Available space (kbytes) : 142988
ID : 610419116
Device/File Name : /dev/raw/raw1
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
10) 使用 cluvfy 工具检查
[root@raw1 cluvfy]# ./runcluvfy.sh comp ocr -n all
Verifying OCR integrity
WARNING:
These nodes cannot be reached:
raw2
Verification will proceed with nodes:
raw1
ERROR:
User equivalence unavailable on all the nodes.
Verification cannot proceed.
Verification of OCR integrity was unsuccessful on all the nodes.
注:此处不成功是因为我的机器卡,故 raw2 节点没有启动
移动 OCR 文件位置
实例演示将 OCR 从/dev/raw/raw1 移动到/dev/raw/raw3 上。
1) 查看是否有 OCR 备份
[root@raw1 bin]# ./ocrconfig -showbackup
如果没有备份,可以立即执行一次导出作为备份:
[root@raw1 bin]# ./ocrconfig -export /u01/ocrbackup -s online
2) 查看当前 OCR 配置
[root@raw1 bin]# ./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 147352
Used space (kbytes) : 4364
Available space (kbytes) : 142988
ID : 610419116
Device/File Name : /dev/raw/raw1
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
输出显示当前只有一个 Primary OCR,在/dev/raw/raw1。 没有 Mirror OCR。 因为现在只有一个 OCR
文件,所以不能直接改变这个 OCR 的位置,必须先添加镜像后在修改,否则会报:Failed to
initialize ocrconfig.
3) 添加一个 Mirror OCR
[root@raw1 bin]# ./ocrconfig -replace ocrmirror /dev/raw/raw4
4) 确认添加成功
[root@raw1 bin]# ./ocrcheck
5)改变 primary OCR 位置
[root@raw1 bin]# ./ocrconfig -replace ocr /dev/raw/raw3
确认修改成功:
[root@raw1 bin]# ./ocrcheck
6)使用 ocrconfig 命令修改后,所有 RAC 节点上的/etc/oracle/ocr.loc 文件内容也会自动同步了,
如果没有自动同步,可以手工的改成以下内容。
[root@raw1 bin]# more /etc/oracle/ocr.loc
ocrconfig_loc=/dev/raw/raw1
Ocrmirrorconfig_loc=/dev/raw/raw3
local_only=FALSE
指定新的备份目录 ocrconfig -backuploc 新的目录
二、其他常用命令
1、$ORACLE_HOME/bin/localconfig add|delete 添加删除 CSS 服务
不管你是 RAC or non-RAC,如果使用了 ASM,那么 OCSSD 就是必须的,因为 ASM 中使用的 Group
Services (GS)是 OCSSD 提供的.
执行$ORACLE_HOME/bin/localconfig add 就是安装 ocssd
执行$ORACLE_HOME/bin/localconfig delete 就是删除 ocssd
2、olsnodes
集群是由哪些节点组成的
# olsnodes -i -n -p
rac1 1 rac1-priv rac1-vip
rac2 2 rac2-priv rac2-vip
查看 OCR 所在的位置:/etc/oracle/ocr.loc 或者 ocrcheck
查看 VoteDisk 所在的位置:crsctl query css votedisk
oracle@orac-b:~> srvctl status database -d rac
Instance rac1 is running on node orac-a
Instance rac2 is running on node orac-b
oracle@orac-b:~> srvctl stop instance -d rac -i rac1 -o abort
3、oifcfg
网络层由各个节点的网络组件组成,包括 2 个物理网卡和 3 个 IP 地址。网络层仅此命令。
oifcfg 命令用来定义和修改 Oracle 集群需要的网卡属性,这些属性包括网卡的网段地址,子网掩码,接
口类型等。 要想正确的使用这个命令, 必须先知道 Oracle 是如何定义网络接口的,Oracle 的每个网络接口包括名称,网段地址,接口类型 3 个属性。
Oifcfg 命令的格式如下: interface_name/subnet:interface_type
这些属性中没有 IP 地址,但接口类型有两种,public 和 private,前者说明接口用于外部通信,用于
Oracle Net 和 VIP 地址,而后者说明接口用于 Interconnect。
接口的配置方式分为两类: global 和 node-specific。 前者说明集群所有节点的配置信息相同,也就是
说所有节点的配置是对称的;而后者意味着这个节点的配置和其他节点配置不同,是非对称的。
Iflist:显示网口列表
Getif: 获得单个网口信息
Setif:配置单个网口
Delif:删除网口
rac2:/dev/raw # 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
}
使用 iflist 显示网口列表
rac1:~ # oifcfg iflist
eth0 192.168.1.0
eth1 192.168.2.0
使用 getif 查看每个网卡的属性
rac1:~ # oifcfg getif
eth0 192.168.1.0 global public
eth1 192.168.2.0 global cluster_interconnect
以上输出说明 eth0 网段地址是 192.168.1.0,网卡类型是 public,也就是用于 Oracle NET 和 VIP。配
置类型 global 说明所有节点的 eth0 网卡都属于 192.168.1.0 网段,并且都是 public 类型。
rac1:~ # oifcfg getif -global rac1
eth0 192.168.1.0 global public
eth1 192.168.2.0 global cluster_interconnect
rac1:~ # oifcfg getif -node rac1
删除网卡接口配置
[root@raw1 bin]# ./oifcfg delif -global
添加接口配置
# ./oifcfg setif -global eth0/192.168.1.119:public
# ./oifcfg setif -global eth1/10.85.10.119:cluster_interconnect
4、crsctl
rac2:/ # crsctl
Usage: crsctl check crs - checks the viability of the Oracle Clusterware
crsctl check cssd - checks the viability of Cluster Synchronization
Services
crsctl check crsd - checks the viability of Cluster Ready Services
crsctl check evmd - checks the viability of Event Manager
crsctl check cluster [-node <nodename>] - checks the viability of CSS across
nodes
crsctl set css <parameter> <value> - sets a parameter override
crsctl get css <parameter> - sets the value of a Cluster Synchronization
Services parameter
crsctl unset css <parameter> - sets the Cluster Synchronization Services
parameter to its default
crsctl query css votedisk - lists the voting disks used by Cluster
Synchronization Services
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 Oracle Clusterware daemons
crsctl disable crs - disables startup for all Oracle Clusterware daemons
crsctl start crs [-wait] - starts all Oracle Clusterware daemons
crsctl stop crs [-wait] - stops all Oracle Clusterware daemons. Stops Oracle
Clusterware managed resources in case of cluster.
crsctl start resources - starts Oracle Clusterware managed resources
crsctl stop resources - stops Oracle Clusterware managed resources
是否开机启动 crs crsctl enable/disable crs
检查 crs 栈状态 crsctl check crs
Crsctl check crsd
Crsctl check cssd
Crsctl check evmd
启动停止 crs crsctl start |stop crs 或者/etc/init.d/init.crs start|stop
查看 votedisk 位置 crsctl query css votedisk
rac2:/ # crsctl query css votedisk
0. 0 /dev/raw/raw2
Located 1 voting disk(s).
查看和修改 crs 参数:
Crsctl get css miscount
Crsctl set css miscount 100
5、crs_stat
rac2:/ # crs_stat -ls
Name Owner Primary PrivGrp Permission
-----------------------------------------------------------------
ora...._FAQ.cs oracle oinstall rwxrwxr--
ora....db1.srv oracle oinstall rwxrwxr--
ora....db2.srv oracle oinstall rwxrwxr--
ora.oradb.db oracle oinstall rwxrwxr--
ora....b1.inst oracle oinstall rwxrwxr--
ora....b2.inst oracle oinstall rwxrwxr--
ora....SM1.asm oracle oinstall rwxrwxr--
ora....C1.lsnr oracle oinstall rwxrwxr--
ora.rac1.gsd oracle oinstall rwxr-xr--
ora.rac1.ons oracle oinstall rwxr-xr--
ora.rac1.vip root oinstall rwxr-xr--
ora....SM2.asm oracle oinstall rwxrwxr--
ora....C2.lsnr oracle oinstall rwxrwxr--
ora.rac2.gsd oracle oinstall rwxr-xr--
ora.rac2.ons oracle oinstall rwxr-xr--
ora.rac2.vip root oinstall rwxr-xr—
crs_stat –t
crs_stat ora.rac1.vip
6、onsctl
7、srvctl
启动停止数据库或者实例
Srvctl start|stop database -d oradb [-o open|mount|nomount]
Srvctl start|stop instance -d oradb -i oradb1 [-o open|mount|nomount]
Srvctl status database -d oradb
Instance oradb2 is not running on node rac2
Instance oradb1 is not running on node rac1
启动停止 service
Srvctl start|stop service -d oradb -s SS_FAQ [ -i oradb1]
Srvctl status service -d oradb -s SS_FAQ
# srvctl status service -d oradb -s SS_FAQ
Service SS_FAQ is running on instance(s) oradb1, oradb2
启动停止 ASM
Srvctl start|stop asm -n rac1 [-I oradb1]
srvctl status asm -n rac1
启动停止监听
Srvctl start|stop listener -n rac1 [-l listener_name]
Srvctl status listener -n rac1
启动停止 nodeapps
Srvctl start|stop|status nodeapps -n rac1
# srvctl stop nodeapps -n rac1
此命令停掉 ons listener VIP GSD 以及该节点上的服务
# srvctl status nodeapps -n rac1
VIP is not running on node: rac1
GSD is not running on node: rac1
Listener is not running on node: rac1
ONS daemon is not running on node: rac1
开机是否启动数据库和实例
Srvctl enable|disable database -d oradb
Srvctl enable|disable instance -d oradb -i oradb1
开机是否启动 ASM
Srvctl enable|disable asm -n rac1
开机是否启动 service
Srvctl enable|disable service -d oradb -s SS_FAQ
显示在 OCR 中注册的所有数据库
Srvctl config database
# srvctl config database
oradb
# srvctl config database -d oradb
rac2 oradb2 /opt/oracle/product/11g/db_1
rac1 oradb1 /opt/oracle/product/11g/db_1
# srvctl config database -d oradb -a
rac2 oradb2 /opt/oracle/product/11g/db_1
rac1 oradb1 /opt/oracle/product/11g/db_1
DB_UNIQUE_NAME: oradb
DB_NAME: oradb
ORACLE_HOME: /opt/oracle/product/11g/db_1
SPFILE: +DG1/oradb/spfileoradb.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
查看 nodeapps 的配置
# srvctl config nodeapps -n rac1 -a
VIP exists.: /rac1-vip/192.168.1.106/255.255.255.0/eth0
# srvctl config nodeapps -n rac1 -g
GSD exists.
# srvctl config nodeapps -n rac1 -l
Listener exists.
# srvctl config nodeapps -n rac1 -s
ONS daemon exists.
查看 listener 的配置
# srvctl config listener -n rac1
rac1 LISTENER_RAC1
# srvctl config listener -n rac2
rac2 LISTENER_RAC2
查看 ASM
# srvctl config asm -n rac1
+ASM1 /opt/oracle/product/11g/db_1
# srvctl config asm -n rac2
+ASM2 /opt/oracle/product/11g/db_1
查看 service
# srvctl config service -d oradb
SS_FAQ PREF: oradb1 oradb2 AVAIL:
添加删除对象
Srvctl add database -d abc -o $ORACLE_HOME
Srvctl add instance -d abc -n rac1 -i abc1
Srvctl add instance -d abc -n rac1 -i abc1
Srvctl add service -d abc -s SSFAQ -r abc1 -a abc2 -P basic
Srvctl remove service -d abc -s SSFAQ
Srvctl remove instance -d abc -I abc1
Srvctl remove database -d abc
删除数据库后,数据库对象不会被删除,只是删除了数据库在 OCR 中的定义,以后可通过 ADD 再次添加到OCR 中