Introduction
Le précédent billet présentait l'installation d'un serveur Oracle 19c en mode stand-alone. Il peut être intéressant d'utiliser ansible pour des déploiement massifs. C'est ce que détaille cet article. Le système d'exploitation est Red Hat / CentOS 7.
Pré-requis
Il faut dans un premier temps disposer du fichier des binaires oracle 19c -> LINUX.X64_193000_db_home.zip ( voir site oracle ou billet précédent )
Il est également nécessaire de prévoir certains fichiers qui seront utilisés soit par le module copy, soit par le module template.
Le playbook fait référence à des machines regroupées dans l'inventaire sous le nom oracle.
Fichier db19c.rsp ( installation silencieuse oracle )
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0 oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/ora01/app/oraInventory ORACLE_HOME=/ora01/app/oracle/product/19/DB ORACLE_BASE=/ora01/app/oracle oracle.install.db.InstallEdition=EE oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP=oper oracle.install.db.OSBACKUPDBA_GROUP=backupdba oracle.install.db.OSDGDBA_GROUP=dgdba oracle.install.db.OSKMDBA_GROUP=kmdba oracle.install.db.OSRACDBA_GROUP=racdba oracle.install.db.rootconfig.executeRootScript=false
Fichier listener.j2 ( module template )
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS=(PROTOCOL = TCP)(HOST = {{ansible_fqdn}} )(PORT = 1521))
)
)
On utilise ici la variable ansible_fqdn qui donne le nom complet du serveur.
Fichier login.sql ( Paramétrage sqlplus )
define _editor=vi set sqlprompt '&_user.@&_connect_identifier. >' set linesize 250 set pagesize 50
Fichier oracle.service ( Demarrage via systemctl )
[Unit]
Description=oracle
After=syslog.target
After=network.target
[Service]
Type=forking
Environment=ORACLE_HOME=/ora01/app/oracle/product/19/DB
User=oracle
Group=oinstall
ExecStart=/ora01/app/oracle/product/19/DB/bin/dbstart ${ORACLE_HOME}
ExecStop=/ora01/app/oracle/product/19/DB/bin/dbshut ${ORACLE_HOME}
[Install]
WantedBy=multi-user.target
Le playbook
---
- name: "Configuration Oracle 19c stand-alone"
hosts: oracle
tasks:
- name: Packages oracle19c pour CentOS 7 ( obligatoires )
yum:
name: ['compat-libcap1','gcc','gcc-c++','ksh','libaio-devel','nfs-utils','sysstat','unzip','bind-utils','smartmontools','libXtst']
state: present
- name: Packages oracle19c pour CentOS 7 ( optionnels )
yum:
name: ['vim-enhanced','psmisc','net-tools','perl-TermReadKey']
state: present
- name : Parametrage noyau oracle19c
sysctl:
name: "{{ item.name }}"
value: "{{ item.value }}"
loop:
- { name: 'kernel.shmall',value: '2097152' }
- { name: 'kernel.shmmax',value: '8589934592' }
- { name: 'kernel.shmmni',value: '4096' }
- { name: 'kernel.sem',value: '250 32000 100 128' }
- { name: 'kernel.panic_on_oops',value: '1' }
- { name: 'fs.file-max',value: '6815744' }
- { name: 'fs.aio-max-nr',value: '1048576' }
- { name: 'net.ipv4.ip_local_port_range',value: '9000 65500' }
- { name: 'net.core.rmem_default',value: '262144' }
- { name: 'net.core.rmem_max',value: '4194304' }
- { name: 'net.core.wmem_default',value: '262144' }
- { name: 'net.core.wmem_max',value: '1048576' }
- { name: 'net.ipv6.conf.all.disable_ipv6',value: '1' }
- { name: 'net.ipv6.conf.default.disable_ipv6',value: '1' }
- { name: 'vm.swappiness',value: '1' }
- { name: 'vm.dirty_background_ratio',value: '3' }
- { name: 'vm.dirty_ratio',value: '80' }
- { name: 'vm.dirty_expire_centisecs',value: '500' }
- { name: 'vm.dirty_writeback_centisecs',value: '100' }
- name: Parametrage limites pour oracle 19c
pam_limits:
domain: "{{item.domain}}"
limit_type: "{{item.limit_type}}"
limit_item: "{{item.it}}"
value: "{{item.value}}"
loop:
- { domain: 'oracle', limit_type: 'soft', it: 'nproc', value: '16384' }
- { domain: 'oracle', limit_type: 'hard', it: 'nproc', value: '16384' }
- { domain: 'oracle', limit_type: 'soft', it: 'nofile', value: '1024' }
- { domain: 'oracle', limit_type: 'hard', it: 'nofile', value: '65536' }
- { domain: 'oracle', limit_type: 'soft', it: 'stack', value: '10240' }
- { domain: 'oracle', limit_type: 'hard', it: 'stack', value: '32768' }
- name : Creation des groupes
group:
name: "{{ item.name }}"
gid: "{{ item.gid }}"
loop:
- { name: 'oinstall', gid: '1001' }
- { name: 'dba', gid: '1002' }
- { name: 'oper', gid: '1003' }
- { name: 'backupdba', gid: '1004' }
- { name: 'dgdba', gid: '1005' }
- { name: 'kmdba', gid: '1006' }
- { name: 'racdba', gid: '1007' }
- { name: 'asmadmin', gid: '1008' }
- { name: 'asmdba', gid: '1009' }
- { name: 'asmoper', gid: '1010' }
- name: Creation user oracle
user:
name: oracle
uid: 1001
group: oinstall
groups: dba,oper,backupdba,dgdba,kmdba,racdba,asmdba
password: orPMdIdQOZmn.
# Le mot de passe oracle est oracle01
- name: Suppression fichier profile
file:
path: /etc/profile.d/oracle.sh
state: absent
- name: Profile oracle
blockinfile:
path: /etc/profile.d/oracle.sh
create: yes
block: |
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
- name: Suppresion repertoire
file:
path: /ora01
state: absent
- name: Suppression de /etc/oraInst.loc
file:
path: /etc/oraInst.loc
state: absent
- name: Création répertoire
file:
path: /ora01/app/oracle/product/19/DB
state: directory
owner: oracle
group: oinstall
- name: Repertoire INSTALL
file:
path: /INSTALL
state: directory
mode: 1777
- name: Copie fichier zip
copy:
src: LINUX.X64_193000_db_home.zip
dest: /INSTALL
- name: Extraction du binaire
unarchive:
src: /INSTALL/LINUX.X64_193000_db_home.zip
dest: /ora01/app/oracle/product/19/DB
owner: oracle
group: oinstall
remote_src: yes
- name: Fichier réponse
copy:
src: db19c.rsp
dest: /home/oracle
owner: oracle
group: oinstall
- name: Configuration pare-feu
firewalld:
port: 1521/tcp
permanent: yes
state: enabled
immediate: yes
- name: Installation
command: /ora01/app/oracle/product/19/DB/runInstaller -silent -responsefile /home/oracle/db19c.rsp -waitforcompletion
become: yes
become_user: oracle
- name: Changement des droits
command: /ora01/app/oraInventory/orainstRoot.sh
- name: Suppression bash_profile de oracle
file:
path: /home/oracle/.bash_profile
state: absent
- name: Configuration bash_profile oracle
blockinfile:
path: /home/oracle/.bash_profile
block: |
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
export ORACLE_BASE=/ora01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19/DB
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_OWNER=oracle
export PATH=$PATH:$ORACLE_HOME/bin
export NLS_LANG=FRENCH_FRANCE.UTF8
export NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS'
export SQLPATH=$HOME/sql
export ORACLE_PATH=$SQLPATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
create: yes
owner: oracle
group: oinstall
- name: Configuration listener
template:
src: /home/listener.j2
dest: /ora01/app/oracle/product/19/DB/network/admin/listener.ora
owner: oracle
group: oinstall
- name: Script demmarage oracle
copy:
src: oracle.service
dest: /usr/lib/systemd/system
- name: Activation script oracle
service:
name: oracle
enabled: yes
- name: Fichier /etc/oratab
file:
path: /etc/oratab
owner: oracle
group: oinstall
mode: 0664
state: touch
- name: Repertoire SQL
file:
path=/home/oracle/sql
state=directory
owner=oracle
group=oinstall
- name: Copie login.sql
copy:
src=login.sql
dest=/home/oracle/sql
owner=oracle
group=oinstall
Conclusion
Ce playbook utilise le compte root pour déployer sur les serveurs distants. Il est facilement modifiable pour y ajouter toute autre configuration ...


