客户的两台IBM Power 740小型机使用HACMP软件创建互备关系的数据库服务器,每台小型机运行一个数据库,任何一台服务器出现故障宕机,另一台小型机应该立即接管,且要一并接管数据库,这时在一台小型机上就运行了两个数据库,故障服务器恢复正常之后,相应的数据库会自动切换回主机。

在出现故障和恢复时,HACMP必须在两台小型机上调用启动和停止Oracle数据库的脚本完成切换过程,大部分的朋友应该和我一样应该会考虑使用Oracle的dbstart和dbshut脚本来生成相应的脚本。

我也是这么做的,但这么做了之后在测试过程中发现了如下一个问题:
        1).正常启动HACMP之后,两个数据库正常的在两个小型机上运行。
        2).小型机A出现故障,数据库A被正常的切换到了小型机B上运行。
        3).小型机A恢复正常,原有数据库正常的切换了回来,但这时运行在小型机B上的数据库宕机了。

上面的现象是什么原因喃,我查看了相关的文档,下面是一段很重要的文字描述:

Oracle recommends that you configure your system to automatically start Oracle Database when the system starts up, and to automatically shut it down when the system shuts down. Automating database startup and shutdown guards against incorrect database shutdown.

         Oracle推荐配置在系统启动的时候自动启动Oracle数据库,当系统关闭的时候自动关闭数据库,自动化数据库的启动和关闭是为了防止不正确的数据库关闭
To automate database startup and shutdown, use the dbstart and dbshut scripts, which are located in the $ORACLE_HOME/bin directory. The scripts refer to the same entries in the oratab file, which are applied on the same set of databases. You cannot, for example, have the dbstart script. automatically start sid1, sid2, and sid3, and have the dbshut script. shut down only sid1. However, you can specify that the dbshut script. shuts down a set of databases while the dbstart script. is not used at all. To do this, include a dbshut entry in the system shutdown file, but do not include the dbstart entry from the system startup files.

为了实现自动化启动和关闭数据库,需要使用存放在$ORACLE_HOME/bin目录下的dbstart和dbshut脚本,这两个脚本引用/etc/oratab文件中的相同条目,应用于在相同的数据库集。不能有如下的情况,例如,使用dbstart脚本自动的开始sid1,sid2和sid3数据库,同时只使用dbshut脚本停止sid1数据库,这是做不到的。然而可以在不使用dbstart脚本启动数据库的情况下,指定使用dbshut脚本来停止数据库集。如果你想这么做,将包含dbshut脚本的条目写入操作系统停止文件,但是不要将包含dbstart脚本的条目写入操作系统的启动文件中。

在使用dbstart和dbshut脚本启动和停止数据库之前需要先将存储在/etc/oratab配置文件中的数据库属性修改为Y,格式如下:sid:oracle_home_directory:[Y|N],然后就可以在系统启动配置文件和系统停止配置文件中加入dbstart和dbshut脚本使得系统在启动和异常关闭的情况下先启动和正常关闭数据库,避免数据库不正常的关闭带来的损失。脚本标准的用法是:
dbstart $ORACLE_HOME
dbshut $ORACLE_HOME

从上面的描述我们可以了解到,如果一台服务器上有多套Oracle数据库,那么没法控制使用dbstart和dbshut脚本启动和停止某一个数据库,两个脚本会将/etc/oratab配置文件中属性修改为Y的数据库都启动和停止,这就是出现最开始描述的问题的原因。

为了解决这个问题,只有手动写脚本来固定启动和停止某个数据库,下面是一个例子:

1).自动启动脚本。
root用户下面的脚本:

##############################################################
## start oracle server
echo "`hostname`:The ORACLE Server typt is starting,Please Waiting."
sleep 3
su - oracle -c "./a_start.sh"
sleep 3
echo "`hostname`:The ORACLE Server typt is started."
##############################################################

oracle用户下面的脚本:
a_start.sh

echo "Switch To typt"
export ORACLE_SID=typt
lsnrctl start
echo "Start Oracle DataBase typt Begin"
sqlplus /nolog  <<EOF
connect /as sysdba
startup
exit
EOF
sleep 3
echo "Start Oracle DataBase typt End"

HACMP通过root用户下的脚本调用a_start.sh脚本完成对监听器和数据库的自动启动。

2).自动停止脚本。
root用户下的脚本:

##############################################################
## stop oracle server
echo "`hostname`:The ORACLE Server typt is stopping,Please Waiting."
su - oracle -c "./a_stop.sh"
sleep 5
echo "`hostname`:The ORACLE Server typt is stoped."
##############################################################


oracle用户下的脚本:
a_stop.sh

echo "Switch To typt"
export ORACLE_SID=typt
echo "Stop Oracle DataBase typt Begin"
sleep 5
sqlplus /nolog <<EOF
connect /as sysdba
shutdown immediate
exit

lsnrctl stop

EOF
echo "Stop Oracle DataBase typt End"

以上是自动停止Oracle数据库的脚本,HACMP通过root用户下的脚本调用a_stop.sh脚本自动停止Oracle数据库,两个脚本都是通过设置ORACLE_SID环境变量来明确的启动、停止数据库。

--end--

感谢同事老谭对我的帮助!

利用dbstart和dbshut脚本自动启动和停止数据库的问题相关推荐

  1. 使用dbstart 和dbshut 脚本来自动化启动和关闭数据库

    使用dbstart 和dbshut 脚本来自动化启动和关闭数据库: 1. 登录用户root. 2. 编辑你的平台的oratab 文件. 打开文件/etc/oratab: 文件里数据库条目为以下格式: ...

  2. dbstart $oracle_home,使用dbstart和dbshut命令启动和关闭数据库

    Oracle提供了两个脚本dbstart和dbshut用来启动和关闭数据库(包括数据库实例和监听). 这两个脚本首先读取oratab(/etc/oratab)文件来决定哪些数据库是需要自动启动和关闭的 ...

  3. oracle weblogic开启,菜鸟经验:oracle与weblogic自动启动与停止

    oracle与weblogic自动启动与停止 最近做开发时,发觉每次重新启动服务器时oracle数据库若没有关闭,则必须先关闭后在重新启动redhat advance server,oracle才能够 ...

  4. linux db 启动盘,在linux下使用dbstart和dbshut启动和关闭db!

    版本10.2 在9i下dbstart存在一bug:dbstart启动时在$ORACLE_HOME/dbs下寻找initSID.ora,事实上在该目录下不存在这个pfile,在9i 已经使用了spfil ...

  5. linux oracle停启,linux下Oracle自动启动与停止总结

    1. 修改Oracle系统配置文件/etc/oratab /etc/oratab 格式为: SID:ORACLE_HOME:AUTO 把AUTO域设置为Y(大写),只有这样,oracle 自带的dbs ...

  6. shell实例第18讲:利用gzexe加密shell脚本

    利用gzexe加密shell脚本 gzexe_test.sh内容如下: #!/bin/bashecho "gzexe test!" 结果: 使用gzexe加密shell脚本命令:g ...

  7. python phpstudy_GitHub - Writeup007/phpStudyBackDoor: phpStudy后门检测与利用工具,Python脚本,可一键 GetShell。...

    phpStudyBackDoor phpStudy后门检测与利用工具,Python脚本,可一键 GetShell. 简述 2019年9月20日,网上传出 phpStudy 软件存在后门,随后作者立即发 ...

  8. java源码如何启动脚本_使用Shell脚本如何启动/停止Java的jar程序

    本文介绍如何使用Shell脚本来开启和停止jar程序的后台运行,以及如何实现out大文件的切分.另外,补充一些后台运行的小知识. 启动脚本:start_upload.sh #!/bin/sh nohu ...

  9. Mac 系统部署Frp内网穿透服务 实现frpc shell启动脚本启动、停止

    Mac 系统部署Frp内网穿透服务 实现frpc shell启动脚本启动.停止 前言 最近疫情导致居家办公,而工作中需要用到公网地址便于调试,于是就在本机(Mac系统)配置了Frpc内网穿透. 本来想 ...

最新文章

  1. R创建两个变量的直方图
  2. 财务人员学python有用吗-一个来自35岁职场高管的忠告:Python为什么不得不学?...
  3. 命令行下操作MySQL数据库,各种命令的使用入门示例。(附图)
  4. idea打war包时,JDK版本的问题解决方式
  5. 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间(转)
  6. 最新有道翻译接口JS逆向分析
  7. 百度开放平台Demo提示“Key验证失败...”的问题
  8. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(9月10日-9月16日)
  9. 实用应聘技巧(转前沿讲座)
  10. 【2021/12/21】MySQL的json查询之json_keys、json_object、json_overlaps、json_pretty
  11. 单峰数组求峰值,二分思想,LeetCode862
  12. warframe在路由器上添加虚拟服务器,卡结算warframe方法
  13. 酷键盘 Midi Keyboard for Mac - MIDI钢琴键盘模拟器
  14. 浅谈信息无障碍人才的培养
  15. 2018 新一代人工智能院士高峰论坛 总结文章
  16. 基于php的学生公寓管理系统,php毕业设计学生公寓管理系统
  17. git/码云+npm语法
  18. 入手评测 赛扬g6900和奔腾g7400 选哪个好
  19. Data (Privacy) Regulation 数据隐私法规整理
  20. 在逆境中仍然倔强成长

热门文章

  1. 约瑟夫环(丢手绢问题)
  2. leetcode402. 移掉K位数字
  3. leetcode57. 插入区间
  4. C++(STL):04---智能指针之weak_ptr
  5. C++:34---union:联合/共用体,一种节省空间的类
  6. CSDN-Markdown编辑器使用小技巧
  7. 剑指offer(刷题61-65)--c++,Python版本
  8. 《UNIX环境高级编程 3rd》笔记(1 / 21):UNIX基础知识
  9. OpenCL(CUDA5.0) + Visual Studio 2010 环境配置
  10. 运营商取消话费余额有效期后改收闲置费