Oracle数据库一键启停脚本

说明:

        1、数据库本地root用户一键启停oracle数据库

        2、ssh连接一键启停远程oracle数据库(需要做免密登录)

一、oracle一键启停脚本-本地

#!/bin/bash
# date: 2023-07-04
# creator: @tudou

var=$1
# ORACLE_HOME=/oracle/18.3/db/dbhome

# 检查监听服务状态
function ListenerStatus() {

su - oracle << EOF > /dev/null
lsnrctl status 
EOF

if [ $? -eq 0 ];then
   echo -e "\e[33m"
   echo "监听服务运行正常"
   echo -e "\e[0m"
   return 0
else
   echo -e "\e[33m"
   echo "监听服务未启动"
   echo -e "\e[0m"
   return 1
fi

}

# 检查数据库服务状态
function ServiceStatus() {
  
ps -ef|grep pmon|grep -v grep > /dev/null

if [ $? -eq 0 ];then
   echo -e "\e[33m"
   echo "数据库服务运行正常"
   echo -e "\e[0m"
   return 0
else
   echo -e "\e[33m"
   echo "数据库服务未启动"
   echo -e "\e[0m"
   return 1
fi

}

# 启动监听服务
function StartupListener(){

echo -e "\e[33m"
echo "监听服务启动中..." 
echo -e "\e[0m"
su - oracle << EOF  > /dev/null
lsnrctl start
EOF

echo -e "\e[33m"
echo "监听服务启动完成..."
echo -e "\e[0m"

}
# 启动数据库服务
function StartupService(){

echo -e "\e[33m"
echo "启动数据库服务中..."
echo -e "\e[0m"

su - oracle << EOF
sqlplus / as sysdba
startup;
alter pluggable database all open;
exit;
EOF

echo -e "\e[33m"
echo "数据库服务已启动完成"
echo -e "\e[0m"

}

# 关闭监听服务
function ShutdownListener(){

echo -e "\e[33m"
echo "监听服务关闭中..."
echo -e "\e[0m"

su - oracle << EOF
lsnrctl stop
EOF

echo -e "\e[33m"
echo "监听服务关闭完成..."
echo -e "\e[0m"

}

# 关闭数据库服务
function ShutdownService(){

echo -e "\e[33m"
echo "数据库服务关闭中..."
echo -e "\e[0m"

su - oracle << EOF
sqlplus / as sysdba
shutdown immediate;
exit;
EOF

echo -e "\e[33m"
echo "数据库服务关闭完成..."
echo -e "\e[0m"

}

#==============================================================================
# 关闭数据库和监听服务
function ShutdownDB() {

# 检查数据库运行状态,运行则关闭
ServiceStatus
if [ $? -eq 0 ];then
#场景1: 数据库服务未关闭,检查关闭数据库和监听服务
  # 关闭数据库服务
  ShutdownService
  
  # 检查监听状态,若已启动监听,则关闭
  ListenerStatus 
  if [ $? -eq 0 ];then
    # 关闭监听服务
    ShutdownListener
  else
    echo -e "\e[33m"
    echo "监听服务未启动,无需执行关闭监听动作" 
    echo -e "\e[0m"
  fi

#场景2: 数据库已关闭,检查关闭监听 
else
  echo -e "\e[33m"
  echo "数据库服务未启动,无需执行关闭数据库动作"  
  echo -e "\e[0m"
  # 检查监听状态,若已启动监听,则关闭
  ListenerStatus
  if [ $? -eq 0 ];then
    # 关闭监听服务
    ShutdownListener
  else
    echo -e "\e[33m"
    echo "监听服务未启动,无需执行关闭监听动作" 
    echo -e "\e[0m"
  fi
  
fi

}

# 启动数据库和监听服务
function StartupDB() {

ListenerStatus
if [ $? -eq 0 ];then
# 场景1:监听已启动,,检查启动数据库服务
  echo -e "\e[33m"
  echo "监听服务已是运行状态"
  echo -e "\e[0m"
  ServiceStatus
  if [ $? -eq 0 ];then
    echo -e "\e[33m"
    echo "数据库服务已是运行状态"
    echo -e "\e[0m"
  else
    # 启动数据库服务
    StartupService
  fi

# 监听服务未启动,检查启动监听和数据库服务
else
  echo -e "\e[33m"
  echo "监听服务未启动" 
  echo -e "\e[0m"
  # 启动监听服务
  StartupListener

  # 启动数据库服务或者重启数据库服务
  ServiceStatus
  if [ $? -eq 0 ];then
     # 数据库状态是运行中,重启数据库服务
    echo -e "\e[33m"
    echo "数据库服务是运行状态,重启数据库服务"
    echo -e "\e[0m"
    # 关闭数据库服务
    ShutdownService

    sleep 5s
    
    # 启动数据库服务
    StartupService
    echo -e "\e[33m"
    echo "数据库服务已重启完成"
    echo -e "\e[0m"
    
  # 数据库服务停止状态,启动数据库服务
  else
    echo -e "\e[33m"
    echo "数据库服务是已关闭状态"
    echo -e "\e[0m"
    # 启动数据库服务
    StartupService
  fi
fi

}

#==============================================================================

case $var in
status)
    echo ""
    # 监听服务状态
    ListenerStatus

    echo ""
    # 数据库服务状态
    ServiceStatus
    echo ""
    ;;

start)
    # 启动监听和数据库服务
    StartupDB
    ;;

stop)
    # 关闭数据库服务和监听
    ShutdownDB
    ;;

restart)
    # 关闭数据库服务和监听
    ShutdownDB

    # 启动监听和数据库服务
    StartupDB
    ;;

*)
    echo "usage $0 [ status|start|restart|stop ]"
    ;;
esac


二、oracle一键启停脚本-ssh远程

#!/bin/bash
# cat oracle.sh
# date: 2023-07-04
# creator: @tudou
# 使用root用户ssh免密登录
# ssh -t 表示分配伪终端
# ssh  -o "StrictHostKeyChecking no" 解决第一次免密登录后面输入交互yes问题
# 脚本使用方法如:  sh oracle.sh status 192.168.51.133

var=$1
newip=$2
# newip=192.168.51.133
# ORACLE_HOME=/oracle/18.3/db/dbhome

task_file=/tmp/task/$(date +%Y%m%d%H)
mkdir -p $task_file
out_log=$task_file/std.log


# 检查监听服务状态
function ListenerStatus() {

ssh  -o "StrictHostKeyChecking no" -t root@${newip} << EOF  > /dev/null
su - oracle
lsnrctl status
EOF

if [ $? -eq 0 ];then
   echo "监听服务运行正常"
   return 0
else
   echo "未启动监听服务"
   return 1
fi

}

# 检查数据库服务状态
function ServiceStatus() {
  
ssh  -o "StrictHostKeyChecking no" -t root@${newip} "ps -ef|grep pmon|grep -v grep"

if [ $? -eq 0 ];then
   echo "数据库服务运行正常"
   return 0
else
   echo "未启动数据库服务"
   return 1
fi

}


# 启动监听服务
function StartupListener(){

  echo "启动监听服务中..." 
  ssh  -o "StrictHostKeyChecking no" -t root@${newip} << EOF |tee -a $out_file
  su - oracle
  lsnrctl start
EOF
  echo "启动监听服务完成..."

}
# 启动数据库服务
function StartupService(){

  echo "启动数据库服务中..."
  ssh  -o "StrictHostKeyChecking no" -t root@${newip} << EOF |tee -a $out_file
  su - oracle
  sqlplus / as sysdba
  startup;
  alter pluggable database all open;
  exit;
EOF
  echo "启动数据库服务已完成"

}

# 关闭监听服务
function ShutdownListener(){

  echo "关闭监听服务中..."
  ssh  -o "StrictHostKeyChecking no" -t root@${newip} << EOF |tee -a $out_file
  su - oracle
  lsnrctl stop
EOF

echo "关闭监听服务完成..."

}

# 关闭数据库服务
function ShutdownService(){

  echo "关闭数据库服务中..."
  ssh  -o "StrictHostKeyChecking no" -t root@${newip} << EOF |tee -a $out_file
  su - oracle
  sqlplus / as sysdba
  shutdown immediate;
  exit;
EOF
  echo "关闭数据库服务完成..."
}

#==============================================================================
# 关闭数据库和监听服务
function ShutdownDB() {

# 检查数据库运行状态,运行则关闭
ServiceStatus
if [ $? -eq 0 ];then
#场景1: 数据库服务未关闭,检查关闭数据库和监听服务
  # 关闭数据库服务
  ShutdownService
  
  # 检查监听状态,若已启动监听,则关闭
  ListenerStatus 
  if [ $? -eq 0 ];then
    # 关闭监听服务
    ShutdownListener
  else
    echo "未启动监听服务,无需执行关闭监听动作" 
  fi

#场景2: 数据库已关闭,检查关闭监听 
else
  echo "未启动数据库服务,无需执行关闭数据库动作"  
  # 检查监听状态,若已启动监听,则关闭
  ListenerStatus
  if [ $? -eq 0 ];then
    # 关闭监听服务
    ShutdownListener
  else
    echo "未启动监听服务,无需执行关闭监听动作" 
  fi
  
fi

}

# 启动数据库和监听服务
function StartupDB() {

ListenerStatus
if [ $? -eq 0 ];then
# 场景1:监听已启动,,检查启动数据库服务
  echo "监听服务已是运行状态"
  ServiceStatus
  if [ $? -eq 0 ];then
    echo "数据库服务已是运行状态"
  else
    # 启动数据库服务
    StartupService
  fi

# 监听服务未启动,检查启动监听和数据库服务
else
  echo "未启动监听服务" 
  # 启动监听服务
  StartupListener

  # 启动数据库服务或者重启数据库服务
  ServiceStatus
  if [ $? -eq 0 ];then
     # 数据库状态是运行中,重启数据库服务
    echo "数据库服务状态是运行中,重启数据库服务"
    # 关闭数据库服务
    ShutdownService

    sleep 5s
    
    # 启动数据库服务
    StartupService
  echo "重启数据库服务器已完成"
    
  # 数据库服务停止状态,启动数据库服务
  else
    echo "数据库状态是已关闭"
    # 启动数据库服务
    StartupService
  fi
fi

}

#==============================================================================

case $var in
status)
    # 监听服务状态
    ListenerStatus

    # 数据库服务状态
    ServiceStatus
    ;;

start)
    # 启动监听和数据库服务
    StartupDB
    ;;

stop)
    # 关闭数据库服务和监听
    ShutdownDB
    ;;

restart)
    # 关闭数据库服务和监听
    ShutdownDB

    # 启动监听和数据库服务
    StartupDB
    ;;

*)
    echo "usage $0 [ status|start|restart|stop ]"
    ;;
esac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值