You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Ansible在Linux上连接Oracle DB并执行启停及查看PDB操作

Ansible操作Oracle数据库:查看PDB、启停数据库的修复方案

错误原因分析

你之前的代码直接将Shell循环逻辑写入command模块,同时违反了YAML语法规则:

  1. command模块不支持Shell的管道、循环、重定向等特性,需改用shell模块
  2. YAML中多行脚本需用|标记声明,否则会触发映射值不允许的语法错误

修复后的完整任务代码

以下是实现提取Oracle路径、查看PDB、关闭数据库、启动数据库的完整Ansible任务:

1. 提取/etc/oratab中的CDB信息

- name: 提取/etc/oratab中的CDB条目(排除ASM和注释行)
  shell: cat /etc/oratab | egrep -v '^#|^$' | grep -v ASM | grep -v agent
  register: cdb_list

2. 查看所有CDB的可插拔数据库(PDB)

- name: 执行show pdbs命令查看PDB信息
  shell: |
    # 从条目解析ORACLE_HOME和ORACLE_SID
    ORACLE_HOME=$(echo {{ item }} | awk -F":" '{print $2}')
    ORACLE_SID=$(echo {{ item }} | awk -F":" '{print $1}')
    # 设置Oracle环境变量
    export ORACLE_HOME ORACLE_SID
    # 静默模式执行sqlplus命令
    $ORACLE_HOME/bin/sqlplus -s / as sysdba <<EOF
    show pdbs;
    exit;
    EOF
  loop: "{{ cdb_list.stdout_lines }}"
  register: show_pdbs_result

- name: 打印PDB查询结果
  debug:
    var: show_pdbs_result.results

3. 关闭所有CDB数据库

- name: 执行shutdown immediate关闭数据库
  shell: |
    ORACLE_HOME=$(echo {{ item }} | awk -F":" '{print $2}')
    ORACLE_SID=$(echo {{ item }} | awk -F":" '{print $1}')
    export ORACLE_HOME ORACLE_SID
    $ORACLE_HOME/bin/sqlplus -s / as sysdba <<EOF
    shutdown immediate;
    exit;
    EOF
  loop: "{{ cdb_list.stdout_lines }}"
  register: shutdown_result

- name: 打印数据库关闭结果
  debug:
    var: shutdown_result.results

4. 启动所有CDB数据库

- name: 执行startup启动数据库
  shell: |
    ORACLE_HOME=$(echo {{ item }} | awk -F":" '{print $2}')
    ORACLE_SID=$(echo {{ item }} | awk -F":" '{print $1}')
    export ORACLE_HOME ORACLE_SID
    $ORACLE_HOME/bin/sqlplus -s / as sysdba <<EOF
    startup;
    exit;
    EOF
  loop: "{{ cdb_list.stdout_lines }}"
  register: startup_result

- name: 打印数据库启动结果
  debug:
    var: startup_result.results

关键优化点说明

  • 使用shell模块替代command:支持Shell语法特性(管道、循环、Here Document)
  • 单独提取CDB列表并注册变量:避免重复解析/etc/oratab,提升可维护性
  • 显式设置环境变量:确保sqlplus能正确定位目标数据库实例
  • 静默模式(-s参数):减少sqlplus的冗余输出,便于结果解析
  • 循环遍历CDB条目:自动处理oratab中所有符合条件的数据库实例

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:57:32