在Linux上,自动启动和关闭数据库

分享于 

13分钟阅读

Oracle

  繁體

catcat

创建"scripts" 目录。


mkdir /home/oracle/scripts

创建名为"setenv . sh" 的环境文件,


cat > /home/oracle/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP

export ORACLE_HOSTNAME=ol7-122.localdomain
export ORACLE_UNQNAME=cdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1/db_1
export ORACLE_SID=cdb1

export PATH=/usr/sbin:/usr/local/bin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
EOF

如果你希望将设置应用于普通登录,请在"/home/oracle/.bash_profile "文件末尾添加对" setEnv.sh "文件的引用。


echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile


创建一个" start_all.sh "和" stop_all.sh "脚本,可以从启动/关闭服务中调用它们。确保所有权和权限正确。


cat > /home/oracle/scripts/start_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh

export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

dbstart $ORACLE_HOME
EOF


cat > /home/oracle/scripts/stop_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh

export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

dbshut $ORACLE_HOME
EOF

chown -R oracle.oinstall /home/oracle/scripts
chmod u+x /home/oracle/scripts/*.sh

在用"oracle"用户运行以下脚本时,你应该能够启动或停止数据库。


$ ~/scripts/start_all.sh
$ ~/scripts/stop_all.sh

现在我们需要创建Linux服务来调用我们之前创建的脚本,

以root用户身份创建一个名为"/etc/init.d/dbora "的文件,其中包含以下内容。


#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database software.

ORA_OWNER=oracle

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 "/home/oracle/scripts/start_all.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1" &

 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 "/home/oracle/scripts/stop_all.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1"
 rm -f /var/lock/subsys/dbora
 ;;
esac

使用chmod将权限设置为750的命令。


chmod 750 /etc/init.d/dbora

将"dbora"服务与相应的运行级别关联,然后使用以下命令将它设置为自动启动。


chkconfig --add dbora

可以使用服务启动和停止数据库,这将在重新启动时发生。


# service dbora start
# service dbora stop

systemd服务

随着RHEL7/OL7的引入,现在可以使用systemd管理服务。你可以继续使用下面显示的现有方法来创建服务以自动启动Oracle,因为systemd是向后兼容的。

systemd示例假定你在"/home/oracle/scripts/"目录中定义了上面的脚本。

"su"命令

在Oracle 9i,10g,11G和12c上,以下用于在Linux上自动启动Oracle实例的数据库启动和关闭的方法同样适用。它可以用于RHEL样式的发行版,包括Oracle Linux,甚至包括RHEL7。

创建实例后,编辑"/etc/oratab "文件,将每个实例的重新启动标志设置为'Y '。


TSH1:/u01/app/oracle/product/12.2.0.1/db_1:Y

以root用户身份创建一个名为"/etc/init.d/dbora "的文件,其中包含以下代码。调整路径以匹配系统。


#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database in ORA_HOME.

#ORA_HOME=/u01/app/oracle/product/10.2.0/db_1
#ORA_HOME=/u01/app/oracle/product/11.1.0/db_1
#ORA_HOME=/u01/app/oracle/product/11.2.0.4/db_1
#ORA_HOME=/u01/app/oracle/product/12.1.0.2/db_1
ORA_HOME=/u01/app/oracle/product/12.2.0.1/db_1
ORA_OWNER=oracle
export ORACLE_UNQNAME=db12c

if [ ! -f $ORA_HOME/bin/dbstart ]
then
 echo "Oracle startup: cannot start"
 exit
fi

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 "$ORA_HOME/bin/dbstart $ORA_HOME" &
 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 "$ORA_HOME/bin/dbshut $ORA_HOME"
 rm -f /var/lock/subsys/dbora
 ;;
esac

使用chmod将权限设置为750的命令。


chmod 750 /etc/init.d/dbora

将"dbora" 服务与相应的运行级别关联,然后使用以下命令将它设置为自动启动。


chkconfig --add dbora

相关实例现在应该在系统启动时自动启动或关闭。

对于Oracle 9idbstartdbshut命令不控制侦听器,因此侦听器管理必须单独完成,如下所示。


#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database in ORA_HOME.

ORA_HOME=/u01/app/oracle/product/9.2.0
ORA_OWNER=oracle

if [ ! -f $ORA_HOME/bin/dbstart ]
then
 echo "Oracle startup: cannot start"
 exit
fi

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 "$ORA_HOME/bin/lsnrctl start" &
 su $ORA_OWNER -c $ORA_HOME/bin/dbstart &
 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 $ORA_HOME/bin/dbshut
 su $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
 rm -f /var/lock/subsys/dbora
 ;;
esac

"rsh"命令

在Oracle 10g发行版2中,dbstart命令包括侦听器的自动启动,因此两个版本之间存在一些差异,但是以下表示Oracle的首选Oracle方法。

创建实例后,编辑"/etc/oratab" 文件,将每个实例的restart标志设置为 'y ' 。


TSH1:/u01/app/oracle/product/10.2.0:Y

创建名为"/etc/init .d/dbora"的文件作为root用户,包含以下内容。


#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Change the value of ORACLE_HOME to specify the correct Oracle home
# directory for your installation.

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
#
# Change the value of ORACLE to the login name of the
# oracle owner at your site.
#
ORACLE=oracle

PATH=${PATH}:$ORACLE_HOME/bin
HOST=`hostname`
PLATFORM=`uname`
export ORACLE_HOME PATH
#
if [ ! "$2" = "ORA_DB" ] ; then
 if [ "$PLATFORM" = "HP-UX" ] ; then
 remsh $HOST -l $ORACLE -n "$0 $1 ORA_DB"
 exit
 else
 rsh $HOST -l $ORACLE $0 $1 ORA_DB
 exit
 fi
fi
#
case $1 in
'start')
 $ORACLE_HOME/bin/dbstart $ORACLE_HOME
 touch /var/lock/subsys/dbora
 ;;
'stop')
 $ORACLE_HOME/bin/dbshut $ORACLE_HOME
 rm -f /var/lock/subsys/dbora
 ;;
*)
 echo "usage: $0 {start|stop}"
 exit
 ;;
esac
#
exit

使用chmod将权限设置为750的命令。


chmod 750 /etc/init.d/dbora

将"dbora" 服务与相应的运行级别关联,然后使用以下命令将它设置为自动启动。


chkconfig --add dbora

相关实例现在应该在系统启动时自动启动或关闭。

此方法依赖于RSH服务器的存在,这需要额外的包和配置。


# Install the rhs and rsh-server packages from the OS CD/DVD.
rpm -Uvh --force rsh-*

# Enable rsh and rlogin.
chkconfig rsh on
chkconfig rlogin on
service xinetd reload

在以后的Linux发行版中尝试使用此方法时,这可能是相当有问题的,其中rsh已过时,因此,我更喜欢使用"su"命令方法。

此方法还可用于不使用ASM或RAC的11g数据库。

"runuser"命令

一段时间,Oracle 12c文档建议在"dbora"服务中使用"runuser"命令,文档的最新版本恢复了使用"su"命令,下面是使用"runuser"命令的一个示例,但是我不使用此命令。

创建实例后,编辑"/etc/oratab" 文件,将每个实例的restart标志设置为 'y ' 。


DB12C:/u01/app/oracle/product/12.1.0.2/db_1:Y

创建一个"/etc/init.d/dbora"作为root用户的文件,其中包含以下代码,该代码是文档中示例的修改版本,它不能工作。


#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Change the value of ORACLE_HOME to specify the correct Oracle home
# directory for your installation.

ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1
#
# Change the value of ORACLE to the login name of the
# oracle owner at your site.
#
ORACLE=oracle
PATH=${PATH}:$ORACLE_HOME/bin
export ORACLE_HOME PATH
#
case $1 in
'start')
 runuser -l $ORACLE -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME &"
 touch /var/lock/subsys/dbora
 ;;
'stop')
 runuser -l $ORACLE -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
 rm -f /var/lock/subsys/dbora
 ;;
*)
 echo "usage: $0 {start|stop}"
 exit
 ;;
esac
#
exit

使用chmod将权限设置为750的命令,将"dbora" 服务与相应的运行级别关联,然后使用以下命令将它设置为自动启动。


chmod 750 /etc/init.d/dbora
chkconfig --add dbora


数据  STA  AUTO  启动  关机  
相关文章