前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle 单实例如何开机自启动

Oracle 单实例如何开机自启动

作者头像
JiekeXu之路
发布2023-02-24 10:27:25
1.2K0
发布2023-02-24 10:27:25
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路
作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路

如需转载请联系授权

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle 单实例如何开机自启动

在前面一文中,介绍了数据库主机重启排查的思路与方法,其中提到了一句数据库开机自启动的事情,有朋友问到这里就在唠叨几句,当你的数据库是 RAC 架构时,只要你停止集群件时使用 crsctl stop crs 停止,默认情况下数据库实例直接 abort 停止,重启主机 OS 后会伴随着 CRS 集群件自动启动;但如果当你 “SQLPLUS” 先进入到数据库中,使用 “shu immediate” 停止数据库实例后,在 crsctl stop crs 停止集群件,则重启主机无法拉起实例,需要手动启动,所以一般情况下我都会直接 crsctl stop crs 直接停止集群件。

这里呢,先插播一条消息,如果您曾经读到过我的一半篇文章,并对您有那么一丁点儿的帮助,那么请投出您宝贵的一票,谢谢了

好了,今天主要说一说单机文件系统下的 Oracle 数据库实例该如何开机自启动。这里借助 Oracle 自带的 dbstart 和 dbshut 两个脚本进行配置。

1)、首先使用 Oracle 用户修改 /etc/oratab 文件
代码语言:javascript
复制
# vim /etc/oratab

找到最后一行:test:/u01/app/oracle/product/11.2.0/db_1:N 这一行,

改为:

代码语言:javascript
复制
test:/u01/app/oracle/product/11.2.0/dbhome_1:Y

也就是将最后的 N 改为 Y,意思是将不允许自动启动改为允许自动启动。

2)、使用 Oracle 用户修改 oracle 的 dbstart 文件
代码语言:javascript
复制
cd $ORACLE_HOME/bin
[oracle@JiekeXu ~]$ cd $ORACLE_HOME/bin
[oracle@JiekeXu bin]$ ll dbs*
-rwxr-x---. 1 oracle oinstall  6072 Jan  1  2000 dbshut
-rwxr-x---. 1 oracle oinstall 13839 Jan  1  2000 dbstart
[oracle@JiekeXu bin]$ cp dbstart dbstart_bak
[oracle@JiekeXu bin]$ vi dbstart

将 ORACLE_HOME_LISTNER=1 修改为 ORACLE_HOME_LISTNER=ORACLE_HOME

注意:此脚本可启动数据库实例和监听,无需在单独处理监听。

另外如果数据库是 19c 的话,需要修改如下两处 $ORACLE_HOME。

vi dbstart

将 ORACLE_HOME_LISTNER=1 修改为 ORACLE_HOME_LISTNER=ORACLE_HOME

将 ORACLE_HOME=1 修改为 ORACLE_HOME=ORACLE_HOME

3)、使用 root 将 dbstart 加入开机自启动,修改 /etc/rc.d/rc.local 文件
代码语言:javascript
复制
vi /etc/rc.d/rc.local
su - oracle -lc /u01/app/oracle/product/11.2.0/dbhome_1/bin/dbstart

上边的路径根据实际情况修改。

我的 19c 路径如下:

代码语言:javascript
复制
su - oracle -lc /u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart
4)、给 /etc/rc.d/rd.local 文件添加可执行权限

注意 RHEL7、centos7 中为了安全默认取消了该文件的可执行权限

代码语言:javascript
复制
[root@JiekeXu ~]# ll /etc/rc.d/rc.local 
-rw-r--r-- 1 root root 541 Jul 19 19:01 /etc/rc.d/rc.local
[root@JiekeXu ~]# chmod u+x /etc/rc.d/rc.local
[root@JiekeXu ~]# ll /etc/rc.d/rc.local
-rwxr--r-- 1 root root 541 Jul 19 19:01 /etc/rc.d/rc.local
5)、reboot 重启服务器验证

重启前:

重启后:

注意:这里仅验证了 11g,12c,19c,其他版本没有验证,且 12c 环境和 11g 一样,只需要将 1 改为 ORACLE_HOME 即可。

Oracle 数据库实例及监听均已成功启动。

如果你 shell 写得不错,当然也可以自己写脚本,这里可参考:

代码语言:javascript
复制
1、修改 /etc/oratab 文件
[root@localhost oracle]# vim /etc/oratab

找到:JiekeXu:/u01/app/oracle/product/12.2.0/dbhome_1:N
修改为:JiekeXu:/u01/app/oracle/product/12.2.0/dbhome_1:Y

2、新建 Oracle 服务自启动脚本
vim /etc/init.d/oracle

#!/bin/sh
# chkconfig: 2345 61 61
# description: Oracle 11g R2 AutoRun Servimces
# /etc/init.d/oracle
#
# Run-level Startup script for the Oracle Instance, Listener, and
# Web Interface
export ORACLE_BASE=/u01/app/oracle                                          #oracle 安装位置
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1                     #Oracle 安装路径
export ORACLE_SID=JiekeXu
export PATH=$PATH:$ORACLE_HOME/bin
ORA_OWNR="oracle"
# if the executables do not exist -- display error
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi
# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup
su $ORA_OWNR -lc $ORACLE_HOME/bin/dbstart
echo "Oracle Start Succesful!OK."
;;
stop)
# Oracle listener and instance shutdown
su $ORA_OWNR -lc $ORACLE_HOME/bin/dbshut
echo "Oracle Stop Succesful!OK."
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo $"Usage: `basename $0` {start|stop|reload|reload}"
exit 1
esac
exit 0

3、检查脚本能否执行
[root@localhost oracle]# /etc/init.d/oracle start      #启动oracle脚本
[root@localhost oracle]# /etc/init.d/oracle stop       #关闭oracle脚本
[root@localhost oracle]# /etc/init.d/oracle restart    #重启oracle脚本

4、添加执行权限并建立链接
更改 oracle 脚本的执行权限
[root@localhost oracle]# chmod a+x /etc/init.d/oracle

建立链接,将启动脚本添加到系统服务并设置自启动

[root@localhost oracle]# chkconfig --add oracle

当这个命令被执行的时候,会去脚本文件 oracle 中寻找# chkconfig: 2345 61 61这行注释,并解析这行注释,根据解析结果分别在
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
中创建符号连接文件 S61oracle,此文件在系统启动时根据运行级别执行,此文件是指向 /etc/init.d/oracle 文件。启动时系统向此文件发送一个 start 参数,执行 oracle 文件中的 start 分支。另外还会在
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc6.d
中创建符号连接文件 K61oracle,此文件在系统关闭时执行,此文件也指向 /etc/init.d/oracle 文件,关闭时系统向此文件发送一个 stop 参数,执行 oracle文件中的 stop 分支。
# chkconfig: 2345 61 61 
# 表明脚本应该在运行级 2, 3, 4, 5 启动,启动优先权为 61,停止优先权为 61。
修改服务运行等级(虽然脚本里写过,但还是重新设置一下),可以自行设置 oracle 脚本的运行级别

[root@localhost oracle]# chkconfig --level 2345 oracle on
说明:设置oracle脚本在运行级别为2、3、4、5时,都是 on(开启)状态,off 为关闭

查看 oracle 自动启动设置
[root@localhost oracle]# chkconfig –list oracle
Oracle  0:off 1:off 2:on 3:on 4:on 5:on 6:off
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
手动创建符号链接文件(执行效果和执行 chkconfig --add oracle 是一样,作为知识笔记记录,可以不执行)

[root@localhost oracle]# ln –s /etc/rc.d/init.d/oracle /etc/rc0.d/K61oracle
[root@localhost oracle]# ln –s /etc/rc.d/init.d/oracle /etc/rc1.d/K61oracle
[root@localhost oracle]# ln –s /etc/rc.d/init.d/oracle /etc/rc2.d/S61oracle
[root@localhost oracle]# ln –s /etc/rc.d/init.d/oracle /etc/rc3.d/S61oracle
[root@localhost oracle]# ln –s /etc/rc.d/init.d/oracle /etc/rc4.d/S61oracle
[root@localhost oracle]# ln –s /etc/rc.d/init.d/oracle /etc/rc5.d/S61oracle
[root@localhost oracle]# ln –s /etc/rc.d/init.d/oracle /etc/rc6.d/K61oracle
5、oracle 的启动或关闭管理
## 启动
[root@localhost oracle]# service oracle start
## 停止
[root@localhost oracle]# service oracle stop
## 重启
[root@localhost oracle]# service oracle restart

另外,这里再说一句 SQLPLUS 命令提示符上下翻转、回退等操作的配置步骤。

6)、安装 rlwrap 上下键翻转历史命令

安装 rlwrap 包实现 sqlplus 历史命令上下翻转、回退等操作。

先使用 yum 安装 readline 然后编译安装 rlwrap

然后到 github 下载 https://github.com/hanslub42/rlwrap/releases。 目前为止,这个包最新的版本已经是 0.46.1 的版本了。

然后上传解压安装。

代码语言:javascript
复制
# yum install -y readline*
# tar -zxvf  rlwrap-0.45.2.tar.gz
# cd rlwrap-0.45.2
# ./configure && make && make install

注意了,这里一定要先配置好 yum 源安装 readline 包成功后才可编译安装 rlwrap,一定要成功编译安装。

然后配置如下 oracle 用户环境变量

代码语言:javascript
复制
# su - oracle 
$ cat <<EOF>>/home/oracle/.bash_profile
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias lsnrctl='rlwrap lsnrctl'
alias asmcmd='rlwrap asmcmd'
alias adrci='rlwrap adrci'
alias ggsci='rlwrap ggsci'
alias sys='sqlplus / as sysdba'
stty erase ^H
EOF

$ . .bash_profile --生效
7)、配置 glogin 登录提示符
代码语言:javascript
复制
cd $ORACLE_HOME/sqlplus/admin

vim glogin.sql

set linesize 250
set pagesize 9999
col Name format a80
col owner format a30
col file_name for a88
set termout off
ALTER SESSION SET nls_date_format = 'yyyy-mm-dd HH24:MI:SS';
set termout on
set serveroutput on size 1000000
set long 2000
set time on
set timing on
define _editor=vi
set sqlprompt "_user'@'_connect_identifier> "

———————————————————————————— 公众号:JiekeXu DBA之路 CSDN :https://blog.csdn.net/JiekeXu 墨天轮:https://www.modb.pro/u/4347 腾讯云:https://cloud.tencent.com/developer/user/5645107 ————————————————————————————

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1)、首先使用 Oracle 用户修改 /etc/oratab 文件
  • 2)、使用 Oracle 用户修改 oracle 的 dbstart 文件
  • 3)、使用 root 将 dbstart 加入开机自启动,修改 /etc/rc.d/rc.local 文件
  • 4)、给 /etc/rc.d/rd.local 文件添加可执行权限
  • 5)、reboot 重启服务器验证
  • 6)、安装 rlwrap 上下键翻转历史命令
  • 7)、配置 glogin 登录提示符
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档