首页主机资讯Debian lsnrctl如何自动化运维

Debian lsnrctl如何自动化运维

时间2025-11-18 18:38:03发布访客分类主机资讯浏览899
导读:Debian 上 lsnrctl 自动化运维实践 一 基础准备与环境变量 确认 lsnrctl 可用:which lsnrctl 应返回路径,常见为 $ORACLE_HOME/bin/lsnrctl。 配置 Oracle 环境变量(写入...

Debian 上 lsnrctl 自动化运维实践

一 基础准备与环境变量

  • 确认 lsnrctl 可用:which lsnrctl 应返回路径,常见为 $ORACLE_HOME/bin/lsnrctl
  • 配置 Oracle 环境变量(写入 ~/.bashrc 或系统 profile,执行 source 使其生效):
    • export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
    • export PATH=$ORACLE_HOME/bin:$PATH
    • export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
  • 监听器配置文件位于 $ORACLE_HOME/network/admin/listener.ora,修改后需重启监听器生效。
  • 常用命令:lsnrctl start|stop|status;查看日志:tail -f $ORACLE_HOME/network/log/listener.log。

二 自动化方案总览

  • 下表给出在 Debian 上常用的自动化手段与适用场景:
手段 主要用途 关键要点
Shell 脚本封装 标准化启停、状态检查、日志落盘 统一入口、带时间戳日志、错误码返回
systemd 服务 开机自启、故障自恢复、统一运维接口 Type=forking、User=oracle、Restart=on-failure
Cron 定时任务 定时巡检、日报归档 重定向日志、避免并发、注意环境变量
监控与告警 异常即时通知 结合 monit/nagios 执行 lsnrctl status 并解析输出
配置与版本管理 变更可追溯、快速回滚 Git 管理 listener.ora/tnsnames.ora 与脚本
远程批量 多实例统一运维 SSH 批量执行脚本,配合密钥与 sudo 权限控制

三 落地示例

    1. 标准化管理脚本(支持 start/stop/restart/status,带日志与时间戳)
#!/usr/bin/env bash
# File: /usr/local/bin/manage_listener.sh
set -Eeuo pipefail

LISTENER="${
1:-LISTENER}
"
ORACLE_HOME="${
ORACLE_HOME:-/opt/oracle/product/19c/dbhome_1}
"
export ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

LOG_DIR="/var/log/oracle"
LOG_FILE="$LOG_DIR/listener_${
LISTENER}
_$(date +%F).log"
mkdir -p "$LOG_DIR"

log() {
     echo "$(date '+%F %T') [$LISTENER] $*" | tee -a "$LOG_FILE";
 }
    

case "$1" in
  start)
    log "Starting listener..."
    if lsnrctl start "$LISTENER";
     then
      log "Started."
      exit 0
    else
      log "Start FAILED."
      exit 2
    fi
    ;
    ;
    
  stop)
    log "Stopping listener..."
    if lsnrctl stop "$LISTENER";
     then
      log "Stopped."
      exit 0
    else
      log "Stop FAILED."
      exit 3
    fi
    ;
    ;
    
  restart)
    "$0" stop
    sleep 3
    "$0" start
    ;
    ;
    
  status)
    log "Checking status..."
    lsnrctl status "$LISTENER"
    ;
    ;

  *)
    echo "Usage: $0 {
start|stop|restart|status}
     [listener_name]"
    exit 1
    ;
    ;
    
esac
  • 赋权与测试:chmod +x /usr/local/bin/manage_listener.sh;测试 ./manage_listener.sh status。
    1. systemd 服务(开机自启 + 故障自动重启)
# /etc/systemd/system/oracle-listener.service
[Unit]
Description=Oracle Listener
After=network.target

[Service]
Type=forking
User=oracle
ExecStart=/usr/local/bin/manage_listener.sh start
ExecStop=/usr/local/bin/manage_listener.sh stop
ExecReload=/usr/local/bin/manage_listener.sh restart
Restart=on-failure
RestartSec=10
TimeoutSec=300

[Install]
WantedBy=multi-user.target
  • 启用与操作:
    • systemctl daemon-reload
    • systemctl enable --now oracle-listener.service
    • systemctl status oracle-listener.service
    1. 定时巡检与告警归档(Cron)
# 每天 02:00 巡检并记录
0 2 * * * /usr/local/bin/manage_listener.sh status >
    >
     /var/log/oracle/listener_status_daily.log 2>
    &
    1

# 每 5 分钟探测,异常时简单邮件告警(需本地 MTA 或 mailx)
*/5 * * * * /usr/local/bin/manage_listener.sh status >
    /tmp/lsn.out 2>
    &
    1 || \
  echo "[$(date)] Listener $LISTENER DOWN" | mail -s "Listener DOWN on $(hostname)" ops@example.com
    1. 批量与监控集成
  • Ansible 简单任务:
- name: Ensure listener is running
  hosts: oracle_servers
  become: yes
  tasks:
    - name: Start listener
      command: /usr/local/bin/manage_listener.sh start
    - name: Check listener
      command: /usr/local/bin/manage_listener.sh status
      register: out
    - name: Show status
      debug:
        var: out.stdout_lines
  • 监控建议:在 Nagios/Icinga/Monit 中周期性执行 lsnrctl status,依据输出中是否包含 “TNS-12541: TNS:no listener” 等关键字判定状态并触发告警。

四 维护与风险控制

  • 变更前备份:对 listener.ora/tnsnames.ora 做版本化备份(Git 或 rsnapshot),变更后先在测试环境验证。
  • 日志与诊断:常规巡检关注 $ORACLE_HOME/network/log/listener.log,异常时结合 lsnrctl status 的输出定位端口、服务注册与访问控制问题。
  • 自恢复策略:生产环境建议启用 systemd 的 Restart=on-failure,并配合告警,避免“反复重启风暴”(必要时加入重启间隔与上限)。
  • 安全与权限:以专用 oracle 用户运行,脚本与日志目录权限最小化;SSH 批量执行需使用密钥并限制 sudo 权限到必要命令。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian lsnrctl如何自动化运维
本文地址: https://pptw.com/jishu/750375.html
Ubuntu swapper大小影响性能吗 Debian lsnrctl如何修改监听地址

游客 回复需填写必要信息