五、总结 - 及其他说明/TIPS/文中提到的有用脚本
:
从上面的配置及测试我们可以看到,只要掌握了应用程序的启动、关闭、检查的方法,我们就完全可以
利用Oracle CRS来搭建一般应用程序的高可用集群,从而保证了业务的连续性。
1.简单错误处理:如果在实施或测试过程中命令失败,或者有错误需要回退状态,
或者删除资源及相关信息,可以使用下面的几个命令:
crs_stop -f db
crs_unregister db
crs_profile -delete db
错误二:我在上面启动虚拟IP资源的时候报错:
root@rac01 # crs_start –all
….
Attempting to start `havip` on member `rac01`
`havip` on member `rac01` has experienced an unrecoverable failure.
Human intervention required to resume its availability.
…..
查看crs日志:
这时候发现在输入网卡时候不小心输入了错误的网卡名称,公共网卡名称应该是e1000g0,
结果使用的bge0,使用下面命令修改
root@rac01 # crs_profile -update havip -o oi=e1000g0
再次启动资源成功。
2.文中的sysdba命令是我习惯用的alias,需要在oracle的.bash_profile或者.profile中添加:
alias sysdba="sqlplus '/as sysdba'"
文中的命令crs_start/crs_stop/crs_profile/crs_register等命令位于$CRS_HOME/bin/目录下,
为了使用方面,一般需要手工将该PATH添加到root和oracle的PATH环境变量中去。
3.磁盘组的启动、关闭、监测脚本db.sh
4.文件系统的启动、关闭、监测脚本fs.sh
#!/bin/sh
# *****************************************************************
# shahand 2008-1-3
SCRIPT=$0
ACTION=$1 # Action (start, stop or check)
DG_NAME=oradata12
VOL_NAME=oradata
case $1 in
'start')
mount -F vxfs /dev/vx/dsk/$DG_NAME/$VOL_NAME /oradata
echo "Resource STARTED"
;;
'stop')
umount /oradata
echo "Resource STOPPED"
;;
'check')
if [[ `mount |grep $VOL_NAME |wc -c` -eq 0 ]]
then
exit 1
else
exit 0
fi
echo "Resource CHECKED"
;;
*)
echo "usage: $0 {start stop check}"
;;
esac
exit 0
5. 数据库的启动、关闭、监测脚本db.sh
#!/bin/sh
# *****************************************************************
# ## shahand 2008-1-3
# *****************************************************************
# /oracle/crs/crs/public/db.sh
SCRIPT=$0
ACTION=$1 # Action (start, stop or check)
CRS_HOME=/oracle/crs/
case $1 in
'start')
su - oracle -c "export ORACLE_SID=orcl;
sqlplus /nolog <<EOF
connect /as sysdba;
startup;
exit;
EOF"
exit $?
;;
'stop')
su - oracle -c "export ORACLE_SID=orcl;
sqlplus /nolog <<EOF1
connect /as sysdba;
alter system checkpoint;
shutdown immediate;
exit;
EOF1"
exit $?
;;
'check')
if [ ! -f $CRS_HOME/crs/public/db.sql ]
then
echo "connect /as sysdba;" > $CRS_HOME/crs/public/db.sql;
echo "spool /tmp/db_check.out;" >>$CRS_HOME/crs/public/db.sql;
echo "select status from v/$instance ;" >> $CRS_HOME/crs/public/db.sql;
echo "exit;" >> $CRS_HOME/crs/public/db.sql;
fi
su - oracle -c "export ORACLE_SID=orcl;sqlplus /nolog @$CRS_HOME/crs/public/db.sql";
if [ `cat /tmp/db_check.out|grep OPEN|wc -c` -eq 0 ]
then
exit 1
else
exit 0
fi
;;
*)
echo "usage: $0 {start stop check}"
;;
esac
exit 0
5. 监听的启动、关闭、监测脚本lsnr.sh
7.Oracle集群软件的安装响应文件crs.rsp ,其中在####之前需要修改
从上面的配置及测试我们可以看到,只要掌握了应用程序的启动、关闭、检查的方法,我们就完全可以
利用Oracle CRS来搭建一般应用程序的高可用集群,从而保证了业务的连续性。
1.简单错误处理:如果在实施或测试过程中命令失败,或者有错误需要回退状态,
或者删除资源及相关信息,可以使用下面的几个命令:
crs_stop -f db
crs_unregister db
crs_profile -delete db
错误二:我在上面启动虚拟IP资源的时候报错:
root@rac01 # crs_start –all
….
Attempting to start `havip` on member `rac01`
`havip` on member `rac01` has experienced an unrecoverable failure.
Human intervention required to resume its availability.
…..
查看crs日志:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 2008 - 01 - 10 17 : 30 : 22.526 : [ CRSRES ][ 1580 ] startRunnable: setting CLI values 2008 - 01 - 10 17 : 30 : 22.527 : [ CRSRES ][ 1580 ] Attempting to start `dg` on member `rac01` 2008 - 01 - 10 17 : 30 : 22.589 : [ CRSRES ][ 1581 ] startRunnable: setting CLI values 2008 - 01 - 10 17 : 30 : 22.629 : [ CRSRES ][ 1581 ] Attempting to start `havip` on member `rac01` 2008 - 01 - 10 17 : 30 : 22.688 : [ CRSAPP ][ 1581 ] StartResource error for havip error code = 1 2008 - 01 - 10 17 : 30 : 22.749 : [ CRSAPP ][ 1581 ] StopResource error for havip error code = 1 2008 - 01 - 10 17 : 30 : 22.757 : [ CRSRES ][ 1581 ] X_OP_StopResourceFailed : Stop Resource failed ( File : rti.cpp, line: 1796 2008 - 01 - 10 17 : 30 : 22.758 : [ CRSRES ][ 1581 ][ ALERT ] `havip` on member `rac01` has experienced an ... 2008 - 01 - 10 17 : 30 : 22.758 : [ CRSRES ][ 1581 ] Human intervention required to resume its availability. 2008 - 01 - 10 17 : 30 : 23.211 : [ CRSRES ][ 1580 ] Start of `dg` on member `rac01` succeeded.
结果使用的bge0,使用下面命令修改
root@rac01 # crs_profile -update havip -o oi=e1000g0
再次启动资源成功。
2.文中的sysdba命令是我习惯用的alias,需要在oracle的.bash_profile或者.profile中添加:
alias sysdba="sqlplus '/as sysdba'"
文中的命令crs_start/crs_stop/crs_profile/crs_register等命令位于$CRS_HOME/bin/目录下,
为了使用方面,一般需要手工将该PATH添加到root和oracle的PATH环境变量中去。
3.磁盘组的启动、关闭、监测脚本db.sh
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> #! / bin / sh # ***************************************************************** # shahand 2008 - 1 - 3 SCRIPT = $ 0 ACTION = $ 1 # Action (start, stop or check ) DG_NAME = oradata12 VOL_NAME = oradata case $ 1 in ' start ' ) / usr / sbin / vxdg - tfC import $DG_NAME; / usr / sbin / vxvol - g $DG_NAME startall echo "Resource STARTED" ;; ' stop ' ) / usr / sbin / vxvol - g $DG_NAME stopall; / usr / sbin / vxdg deport $DG_NAME echo "Resource STOPPED" ;; ' check ' ) if [ [ `/usr/sbin/vxprint -v -g $DG_NAME |grep $VOL_NAME|wc -c` -eq 0 ] ] then exit 1 else exit 0 fi echo "Resource CHECKED" ;; * ) echo "usage: $ 0 {start stop check }" ;; esac exit 0
4.文件系统的启动、关闭、监测脚本fs.sh
#!/bin/sh
# *****************************************************************
# shahand 2008-1-3
SCRIPT=$0
ACTION=$1 # Action (start, stop or check)
DG_NAME=oradata12
VOL_NAME=oradata
case $1 in
'start')
mount -F vxfs /dev/vx/dsk/$DG_NAME/$VOL_NAME /oradata
echo "Resource STARTED"
;;
'stop')
umount /oradata
echo "Resource STOPPED"
;;
'check')
if [[ `mount |grep $VOL_NAME |wc -c` -eq 0 ]]
then
exit 1
else
exit 0
fi
echo "Resource CHECKED"
;;
*)
echo "usage: $0 {start stop check}"
;;
esac
exit 0
5. 数据库的启动、关闭、监测脚本db.sh
#!/bin/sh
# *****************************************************************
# ## shahand 2008-1-3
# *****************************************************************
# /oracle/crs/crs/public/db.sh
SCRIPT=$0
ACTION=$1 # Action (start, stop or check)
CRS_HOME=/oracle/crs/
case $1 in
'start')
su - oracle -c "export ORACLE_SID=orcl;
sqlplus /nolog <<EOF
connect /as sysdba;
startup;
exit;
EOF"
exit $?
;;
'stop')
su - oracle -c "export ORACLE_SID=orcl;
sqlplus /nolog <<EOF1
connect /as sysdba;
alter system checkpoint;
shutdown immediate;
exit;
EOF1"
exit $?
;;
'check')
if [ ! -f $CRS_HOME/crs/public/db.sql ]
then
echo "connect /as sysdba;" > $CRS_HOME/crs/public/db.sql;
echo "spool /tmp/db_check.out;" >>$CRS_HOME/crs/public/db.sql;
echo "select status from v/$instance ;" >> $CRS_HOME/crs/public/db.sql;
echo "exit;" >> $CRS_HOME/crs/public/db.sql;
fi
su - oracle -c "export ORACLE_SID=orcl;sqlplus /nolog @$CRS_HOME/crs/public/db.sql";
if [ `cat /tmp/db_check.out|grep OPEN|wc -c` -eq 0 ]
then
exit 1
else
exit 0
fi
;;
*)
echo "usage: $0 {start stop check}"
;;
esac
exit 0
5. 监听的启动、关闭、监测脚本lsnr.sh
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> #! / bin / sh # ***************************************************************** # ## shahand 2008 - 1 - 3 # ***************************************************************** # / oracle / crs / crs / public / lsnr.sh SCRIPT = $ 0 ACTION = $ 1 # Action (start, stop or check ) case $ 1 in ' start ' ) su - oracle - c "lsnrctl start" exit $? ;; ' stop ' ) su - oracle - c "lsnrctl stop" exit $? ;; ' check ' ) if [ `ps -ef|grep tnslsnr |wc -c` -eq 0 ] then echo "bad"; exit 1 else echo "good"; exit 0 fi ;; * ) echo "usage: $ 0 {start stop check }" ;; esac exit 0
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> ORACLE_HOME = " / oracle / crs" sl_tableList = {"rac01:rac01 - priv:rac01 - vip:N:Y","rac02:rac02 - priv:rac02 - vip:N:Y"} ret_PrivIntrList = {"e1000g0: 10.198 . 88.0 : 1 ","e1000g1: 192.168 . 0.0 : 2 "} n_storageTypeOCR = 2 s_ocrpartitionlocation = " / oracle / ocrfile1" s_ocrMirrorLocation = "" n_storageTypeVDSK = 2 s_votingdisklocation = " / oracle / vdfile1" s_OcrVdskMirror1RetVal = "" s_VdskMirror2RetVal = "" ORACLE_HOME_NAME = "OraCRS10ghome1" ################# complete modify ##################### RESPONSEFILE_VERSION = 2.2 . 1.0 . 0 UNIX_GROUP_NAME = "oinstall" FROM_LOCATION = ".. / stage / products.xml" NEXT_SESSION_RESPONSE =< Value Unspecified > TOPLEVEL_COMPONENT = {"oracle.crs"," 10.2 . 0.1 . 0 "} DEINSTALL_LIST = {"oracle.crs"," 10.2 . 0.1 . 0 "} SHOW_SPLASH_SCREEN = false SHOW_WELCOME_PAGE = false SHOW_NODE_SELECTION_PAGE = false SHOW_SUMMARY_PAGE = false SHOW_INSTALL_PROGRESS_PAGE = false SHOW_CONFIG_TOOL_PAGE = false SHOW_XML_PREREQ_PAGE = false SHOW_ROOTSH_CONFIRMATION = true SHOW_END_SESSION_PAGE = false SHOW_EXIT_CONFIRMATION = false NEXT_SESSION = false NEXT_SESSION_ON_FAIL = false SHOW_DEINSTALL_CONFIRMATION = false SHOW_DEINSTALL_PROGRESS = false RESTART_SYSTEM = false RESTART_REMOTE_SYSTEM = false REMOVE_HOMES = ORACLE_HOSTNAME =< Value Unspecified > SHOW_END_OF_INSTALL_MSGS = false COMPONENT_LANGUAGES = {"en"} s_clustername = "crs" CLUSTER_CONFIGURATION_FILE = "" 8 . Oracle数据库软件的安装响应文件db.rsp,其中在####之前需要修改 CLUSTER_NODES = {} ORACLE_HOME_NAME = "OraDB10ghome1" ORACLE_HOME = " / oracle / 10g" ########################################################## FROM_LOCATION = ".. / stage / products.xml" RESPONSEFILE_VERSION = 2.2 . 1.0 . 0 UNIX_GROUP_NAME = "oinstall" FROM_LOCATION_CD_LABEL =< Value Unspecified > SHOW_WELCOME_PAGE = true SHOW_CUSTOM_TREE_PAGE = true SHOW_COMPONENT_LOCATIONS_PAGE = true SHOW_SUMMARY_PAGE = true SHOW_INSTALL_PROGRESS_PAGE = true SHOW_REQUIRED_CONFIG_TOOL_PAGE = true SHOW_CONFIG_TOOL_PAGE = true SHOW_RELEASE_NOTES = true SHOW_ROOTSH_CONFIRMATION = true SHOW_END_SESSION_PAGE = true SHOW_EXIT_CONFIRMATION = true NEXT_SESSION = false NEXT_SESSION_ON_FAIL = true NEXT_SESSION_RESPONSE =< Value Unspecified > DEINSTALL_LIST = {"oracle.server"," 10.2 . 0.1 . 0 "} SHOW_DEINSTALL_CONFIRMATION = true SHOW_DEINSTALL_PROGRESS = true ACCEPT_LICENSE_AGREEMENT = false TOPLEVEL_COMPONENT = {"oracle.server"," 10.2 . 0.1 . 0 "} SHOW_SPLASH_SCREEN = true SELECTED_LANGUAGES = {"en"} COMPONENT_LANGUAGES = {"en"} INSTALL_TYPE = "Enterprise Edition" sl_superAdminPasswds =< Value Unspecified > sl_dlgASMCfgSelectableDisks = {} s_superAdminSamePasswd =< Value Unspecified > s_globalDBName = "orcl" s_dlgASMCfgRedundancyValue = " 2 (Norm)" s_dlgASMCfgNewDisksSize = " 0 " s_dlgASMCfgExistingFreeSpace = " 0 " s_dlgASMCfgDiskGroupName = "DATA" s_dlgASMCfgDiskDiscoveryString = "" s_dlgASMCfgAdditionalSpaceNeeded = " MB" s_dbSelectedUsesASM = "" s_dbSIDSelectedForUpgrade = "" s_dbRetChar = "" s_dbOHSelectedForUpgrade = "" s_ASMSYSPassword =< Value Unspecified > n_performUpgrade = 0 n_dlgASMCfgRedundancySelected = 2 n_dbType = 1 n_dbSelection = 0 b_useSamePassword = false b_useFileSystemForRecovery = true b_receiveEmailNotification = false b_loadExampleSchemas = false b_enableAutoBackup = false b_dlgASMShowCandidateDisks = true b_centrallyManageASMInstance = true sl_dlgASMDskGrpSelectedGroup = {" "," "," "," "} s_dlgRBOUsername = "" s_dlgEMCentralAgentSelected = "No Agents Found" b_useDBControl = true s_superAdminSamePasswdAgain =< Value Unspecified > s_dlgEMSMTPServer = "" s_dlgEMEmailAddress = "" s_dlgRBORecoveryLocation = " / oracle / db / flash_recovery_area / " n_upgradeDB = 1 n_configurationOption = 3c sl_upgradableSIDBInstances = {} n_upgradeASM = 0 sl_dlgASMCfgDiskSelections = {} s_ASMSYSPasswordAgain =< Value Unspecified > n_dbStorageType = 0 s_rawDeviceMapFileLocation = "" sl_upgradableRACDBInstances = {} s_dlgRBOPassword =< Value Unspecified > b_stateOfUpgradeDBCheckbox = false s_dbSid = "orcl" b_dbSelectedUsesASM = false sl_superAdminPasswdsAgain =< Value Unspecified > s_mountPoint = " / oracle / db / oradata / " b_stateOfUpgradeASMCheckbox = false oracle.assistants.server:OPTIONAL_CONFIG_TOOLS = "{}" oracle.has.common:OPTIONAL_CONFIG_TOOLS = "{}" oracle.network.client:OPTIONAL_CONFIG_TOOLS = "{}" oracle.sqlplus.isqlplus:OPTIONAL_CONFIG_TOOLS = "{}" oracle.sysman.console.db:OPTIONAL_CONFIG_TOOLS = "{}" varSelect = 1 s_nameForOPERGrp = "dba" s_nameForDBAGrp = "dba"