samedi, février 13 2021

Playbook ansible pour installation Oracle 19c

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: dba
        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 ...

jeudi, décembre 10 2020

Installation Oracle 19c

version_oracle.jpg, janv. 2020

Introduction L'objectif de ce billet est de présenter la mise en place d'un serveur Oracle en stand-alone version 19c. La version 19c est en fait la version 12.2.0.3, depuis 2018 Oracle a modifié la numérotation des versions en se basant sur l'année de sortie. L'accent est mis avant tout sur le coté  […]

Lire la suite

vendredi, octobre 2 2020

Installer VirtualBox sous CentOS 7

Introduction Virtualbox est une solution très simple et gratuite de gestion des machines virtuelles. Bien que disposant d'une interface graphique, il est possible de gérer VirtualBox via la commande vboxmanage. Ce billet présente l'installation et une configuration simple de l'environnement  […]

Lire la suite

mercredi, mars 4 2020

Synchronisation horaire Cluster RAC Oracle

Introduction La synchronisation horaire est vitale dans un cluster RAC. L'éviction de noeud peut être générée en cas de différence. Par défaut Oracle utilise NTP pour assurer la synchronisation horaire. Toutefois il est possible de laisser le cluster gérer ceci via CTSS. Ce billet présente  […]

Lire la suite

mardi, janvier 28 2020

Serveur physique ou virtuel

Comment savoir si la machine sur laquelle on travaille est un vrai serveur ou une machine virtuelle. Il existe plusieurs méthodes. Il faut disposer d'un accès root ou via sudo. Installer les packages dmidecode et facter yum -y install dmidecode facter Par la commande dmidecode dmidecode -s  […]

Lire la suite

vendredi, janvier 24 2020

Red Hat/CentOS 7 , perte du mot de passe root

Depuis la version 7 de Red Hat/CentOS la procédure de changement en cas de perte du mot de passe root a changé. Pour ce faire, il faut disposer d' un accès console. Redémarrer la machine et interrompre le chargeur GRUB par la touche « e ». Se déplacer sur la ligne contenant /boot/vmlinuz… Remplacer  […]

Lire la suite

vendredi, septembre 13 2019

Récupérer les enregistrements type A d'une zone DNS

Utilisation de la commande dig dig -tAXFR formation.maison ; <<>> DiG 9.9.4-RedHat-9.9.4-72.el7 <<>> -tAXFR formation.maison ;; global options: +cmd formation.maison. 38400 IN SOA ns.formation.maison. root.formation.maison. 2019071901 3600 3600 604800 86400 formation.maison.  […]

Lire la suite

mercredi, juin 5 2019

Exporter des données depuis une standby database

Introduction Dans une configuration dataguard il est intéressant d'utiliser la base standby pour procéder à un export. Ceci permet d'éviter une surcharge de la base primaire. Il faut toutefois différentier deux cas selon l'outil utilisé. EXP : Déprécié certes mais encore très utilisé. EXPDP :  […]

Lire la suite

mercredi, mars 13 2019

Modification informations avec DataPump

Introduction Il est parfois souhaitable lors d'un export par DataPump de modifier certaines données dites confidentielles. Un bon exemple est un numéro de carte bancaire ou de sécurité sociale. Ce billet présente l'option remap_data de la commande expdp qui permet cette transformation. La syntaxe  […]

Lire la suite

jeudi, janvier 10 2019

Réplication de données Oracle avec Streams

replication_streams_red_black_blog.jpg

Introduction Streams n'a pas une très bonne réputation auprès des DBA Oracle, toutefois si l'on souhaite mettre de manière simple et peu onéreuse une réplication de données entre deux serveurs, cette solution n'est pas dénuée d'intérêt. Oracle déconseille Streams au profit de GoldenGate ( coût  […]

Lire la suite

dimanche, novembre 25 2018

Sql*Loader et les dates

sqlloader.png

Introduction SQL*Loader est un utilitaire fourni avec Oracle permettant de charger des données dans des tables Oracle depuis des fichiers plats. Le schéma ci-dessous présente le principe de SQL*Loader. En entrée, SQL*Loader prend un fichier de contrôle ( rien à voir avec le fichier de contrôle de la  […]

Lire la suite

jeudi, novembre 8 2018

Déplacer la base MGMTDB vers un autre diskgroup sur un cluster Oracle 12c.

Introduction Cette procédure explique comment déplacer la base _MGMTDB vers un autre diskgroup. Cette base gère les informations sur la "santé" du cluster RAC. Lors de la création du cluster cette base est créée sur le diskgroup de l'OCR soit +OCR_VOTING. Il s'agit ici de la déplacer sur  […]

Lire la suite

jeudi, juin 14 2018

Traces Oracle et ADRCI

Introduction Trois shell Linux très simples pour configurer de manière rapide et efficace la gestion des traces Oracle via ADRCI. Automatic Diagnostic Repository introduit en 11g permet une centralisation des traces Oracle en un point unique ( BD, Listener,... ). la politique de conservation de ces  […]

Lire la suite

samedi, juin 9 2018

Cluster RAC et Dataguard avec Oracle 12c

cluster test dataguard.jpg

Introduction Ce billet, assez conséquent, détaille la mise en place d'un environnement Dataguard Oracle 12c en utilisant deux clusters RAC à deux noeuds sur des sites distants. La version de l'OS est CentOS 7.4. La version de Oracle est la 12.1.0.2 avec application du PSU de avril 2018. Il est  […]

Lire la suite

mercredi, mars 7 2018

Monitoring RMAN

Les sauvegardes et restaurations RMAN sont parfois longues et le Recovery MANager n'est pas toujours très bavard. les requêtes suivantes sont utiles afin de suivre l'avancement du processus. Cette requête permet de suivre l'avancement et surtout de déterminer une date de fin approximative. alter  […]

Lire la suite

dimanche, janvier 14 2018

Creation d'un base de données Stand-Alone

Introduction Dans un précédent billet il fut présenté un script de création d'une base Oracle 12c sur un cluster RAC à 2 noeuds. Ici il s'agit d'un script basé sur le même modèle mais pour la création d'une base en mode stand-alone de type non-CDB ( pas de pluggable database ). La version de Oracle  […]

Lire la suite

jeudi, novembre 16 2017

Informations sur les sauvegardes RMAN

Il est intéressant de connaitre la durée et le volume des sauvegardes RMAN. La vue v$rman_backup_job_details permet de retrouver facilement un bon nombre d'informations. la requête présentée ici donne le type de sauvegarde : archivelog ou base ainsi que la durée en heures et le volume. select  […]

Lire la suite

vendredi, novembre 3 2017

Fonctionnalité In-Database Archiving Oracle 12c

La version 12c de oracle Database a introduit une fonctionnalité intéressante vis à vis des données dites d'archives. Il est en effet courant de stocker des milliers, voir des millions de lignes dans des tables et qui ne sont jamais ou très peu utilisées. Ceci peut être particulièrement gênant dans  […]

Lire la suite

dimanche, juillet 30 2017

Channel bonding et VirtualBox

Capture_du_2017-07-30_17-19-08.png

Le channel bonding ou agrégation de lien permet de configurer deux cartes réseau vue comme une seule. Chaque carte est reliée à un port du switch selon le schéma ci-dessous. L'objectif ici n'est pas de détailler la configuration channel bonding qui est largement référencée sur le Net, mais  […]

Lire la suite

lundi, juillet 10 2017

Installer Oracle 12c sur CentOS/RedHat 7

download_12c.png

Introduction L'installation du SGBD Oracle sur un serveur Linux peut sembler simple. Il y a toutefois des précautions à prendre afin d'obtenir une plate-forme stable. Ce billet présente l'installation de la version 12.2.0.1 de Oracle sur CentOS 7 en utilisant le mode silencieux, c'est à dire sans  […]

Lire la suite

- page 1 de 11