前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >系统开关机时oracle自启动和关闭脚本(for aix和linux)

系统开关机时oracle自启动和关闭脚本(for aix和linux)

作者头像
吹水老王
发布2022-05-17 16:41:34
3.3K0
发布2022-05-17 16:41:34
举报
文章被收录于专栏:MySQL 8.0MySQL 8.0

前言:

作为一名oracle DBA,有没有遇到过大半夜被电话吵醒,被告知服务器故障重启了,现在数据库服务不可用,麻烦回来启动下数据库?

作为一名oracle DBA,有没有遇到过系统组的同事跟你讲,今晚要停机维护,麻烦留下来停一下数据库?

作为一名oracle DBA,更有甚者,在这个虚拟化泛滥的时代,有没有遇到过物理主机硬件故障,导致几十台数据库server发生了重启,麻烦启动下数据库?

~~~~~~~~~~~~~~先心疼自己三秒钟 ~~~~~~~~~~~~~~~~~~

其实ORACLE从一开始就提供了数据库开机自启动的脚本,只是考虑到可控性和配置稍稍有点复杂,很多人不愿意去尝试。

正好有时间就把oracle自启动和关闭的脚本作了一些优化,以增加脚本的适用性,并把自启动和关闭的配置写到了初始化脚本auto_start_db.sh,这样只需要简单一步执行auto_start_db.sh脚本就可以完成所有配置工作。

以下:

1.AIX和Linux操作系统平台下,oracle自启动和关闭的开关在/etc/oratab文件,/etc/oratab实在创建数据库时由root.sh 脚本创建,在用DBCA 创建实例时也会更新这个文件。当ORACLE_SID:ORACLE_HOME:<N|Y>设置为Y时,允许实例自启动,当设置为N时,则不允许自启动。 这个文件里的配置仅仅起一个开关的作用,其并不会具体的执行启动和关闭,具体的操作由

2. oracle自启动和关闭的脚本直接调用oracle自带的dbstart和dbshut即可。如上所述,脚本需要做一下修改,以增强适用性。

譬如,dbstart和dbshut脚本都只能针对默认的listener,如果新建了listener或者更改过listener名,那么脚本就无法正确执行。

所以需要,

#完善listener启动和停止脚本,增加判断listener是否是默认的listenername,以及针对多个listener的情况,循环启动每个listener(包括默认的和重命名的listener)。

再比如,对于Dataguard环境,dbstart和dbshut脚本并没有做判断,以致于physical standby数据库时没法通过脚本启动到Recover managed standby模式。

所以需要,

#完善instance启动脚本,增加判断数据库为primarydb还是standby db,然后再相应地启动数据库。

3.创建dbora脚本,调用$ORACLE_HOME/bin/下的dbstart和dbshut实现自动启动和关闭。

For linux:  vi/etc/init.d/dbora

For Aix:              vi/etc/dbora

(NOTE:修改ORACLE_HOME和ORACLE_OWNER参数值)

#! /bin/sh

# description: Oracle auto start-stopscript.

#

# Set ORACLE_HOME to be equivalent to the $ORACLE_HOME

# from which you wish to execute dbstartand dbshut;

#

# Set ORA_OWNER to the user id of the ownerof the

# Oracle database in ORACLE_HOME.

ORA_HOME=<Type your ORACLE_HOME in fullpath here>

ORA_OWNER=<Type your Oracle account namehere>

case "$1" in

'start')

    #Start the Oracle databases:

    #The following command assumes that the oracle login

    #will not prompt the user for any values

    #Remove "&" if you don't want startup as a background process.

   su - ORA_OWNER -c "

   touch /var/lock/subsys/dbora

   ;;

'stop')

    #Stop the Oracle databases:

    #The following command assumes that the oracle login

    #will not prompt the user for any values

   su - ORA_OWNER -c "

   rm -f /var/lock/subsys/dbora

   ;;

esac

4.在OS的适当的运行级脚本目录中创建dbora脚本的软链接(AIX平台和LINUX平台会有所差别,根据当前OS的运行级别来判断)。

For Linux:

# ln -s /etc/init.d/dbora/etc/rc.d/rc0.d/K01dbora

# ln -s /etc/init.d/dbora /etc/rc.d/rc6.d/K01dbora

# ln -s /etc/init.d/dbora/etc/rc.d/rc3.d/S99dbora

# ln -s /etc/init.d/dbora/etc/rc.d/rc5.d/S99dbora

For Aix:

# ln -s /etc/dbora /etc/rc.d/rc2.d/S99dbora

# ln -s /etc/dbora /etc/rc.d/rc0.d/K01dbora.

注意,这里有个坑,对于linux平台下的DG环境,dbora脚本在OS启动时可以放到init 3 或者init 5,但是reboot时一定不能放到init 5.放到init 5 会导致备库shutdown immediate时遭遇active call prevent shutdown operation。Active call就是备库的RFS进程,在OS层已经停止了部分服务(譬如IP配置、tcp连接)使RFS进程hung住,而pmon进程无法kill掉该进程似的shutdown无法继续。

为了避免一些手工配置的坑,我把自启动和关闭的配置写到了初始化脚本,这样只需要简单一步执行auto_start_db.sh脚本就可以帮助完成所有配置和脚本优化工作。

是不是很high?

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档