使用Ansible playbook运行Oracle SQL脚本

时间:2016-12-27 08:45:32

标签: oracle ansible ansible-playbook ansible-galaxy

查看Ansible documentation中的核心数据库模块,没有显示Oracle模块的迹象。通过Ansible for Oracle数据库处理SQL / PLSQL部署的最佳方法是什么?

我们是否希望使用Ansible Galaxy中的角色来处理此问题?似乎很少有人下载Galaxy for Oracle上列出的角色。

2 个答案:

答案 0 :(得分:0)

我已经创建了一个角色来安装apex 5(我首先卸载apex 4)。我使用像' script'这样的模块。并且' shell'我对环境初始化不太满意,但我还在学习。对于任何SQL / PLSQL任务,sqlplus是正确的工具。 (也许SQLcl可以做得更好......?)

- name: Determine apex version
  become: yes
  become_user: oracle
  shell: source /etc/profile &&  sqlplus -S / as sysdba @"{{ temp_dir }}/apexver.sql"
  register: apexver
  args:
     executable: /bin/bash
  changed_when: "'APEX_040000' in apexver.stdout"

- name: oracle apex remove
  become: yes
  become_user: oracle
  script: apex_remove.sh {{ item }} 
  with_items: 
    - 'XE'
  ignore_errors: yes
  register: result
  when: "'APEX_040000' in apexver.stdout"

22:18 $ cat apex_remove.sh
#!/bin/sh

# set oracle environment
. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
ORACLE_SID=$1

sqlplus -s /nolog <<EOF
connect / as sysdba
@?/apex/apxremov.sql
exit
EOF

答案 1 :(得分:0)

我不确定这是否与您的问题有关,但是我最初是在寻找Ansible模块来启动/停止并获取Oracle数据库的状态。我找不到合适的东西,所以我写了自己的ansible模块。模块使您能够定义标准接口,具有对任务的OK / Failed / Changed任务响应,同时可以根据需要执行尽可能多的低级活动/命令(通过这种方式,它们比简单的Shell /命令模块要灵活得多) )。我将模块写为幂等的-它们不会尝试启动已经启动的数据库,也不会尝试停止已经停止的数据库。并且,如果停止/停止功能不成功,则返回stdout / stderr失败。

关于Oracle数据库,我还编写了一些模块来为Business Objects和Weblogic服务提供接口。这些模块是一项重要的前期工作,但是一旦稳定下来,便可以在各种剧本中使用。

我没有看过Galaxy是否有其他类似的东西,但是不幸的是,由于我的客户/合同的性质,我不确定我是否可以共享我们开发的模块。我只是想为您提供探索的可能途径。