klewan.ansible_role_oracle_manage_patches

Ansible-Rolle: oracle-manage-patches

Diese Rolle verwaltet Oracle-Patches.

Sie wendet Patches an und rollt diese zurück (Einzelpatches und vierteljährliche Patches) für die Grid Infrastructure und/oder Oracle Database Homes (sowohl PRIMARY als auch STANDBY).

Zusätzlich ist es möglich, betroffene ORACLE_HOMEs einzuschränken, indem entweder ORACLE_HOME-Pfade direkt angegeben werden (oracle_manage_patches_oracle_home_name_patterns) oder Softwareversionen (oracle_manage_patches_oracle_home_version_patterns). Andernfalls werden alle ORACLE_HOMEs einer beliebigen Version, die mit dem bereitgestellten Patch-Namen verbunden sind, betroffen sein. Andere ORACLE_HOMEs und Datenbanken, die nicht mit dem ausgewählten Patch-Namen verbunden sind, werden nicht berührt.

Die Rolle ist RAC-bewusst und wendet Patches auf allen Clusterknoten an, wenn ein Real Application Cluster erkannt wird, selbst wenn das Playbook nur auf einem der RAC-Knoten ausgeführt wird (Argument --limit von ansible-playbook).

Bei Standby-Datenbanken werden nur die Binärdateien gepatcht, keine SQL-/Datapatch-Skripte werden ausgeführt.

Folgende Optionen sind verfügbar:

  • ORACLE_HOMEs-Backup (vor der Patch-Installation) - (oracle_manage_patches_backup_oracle_home Switch + oracle-homes-backup Rolle)
  • ASM-Metadaten-Backup (vor der Patch-Installation) - (oracle_manage_patches_backup_asm_metadata Switch und oracle_manage_patches_backup_dir Variable)
  • Vor- und Nach-Check-Skripte (Ausgabe von opatch lsinventory, Liste der INVALID-Objekte, Ausgabe der Tabellen registry$history, dba_registry_sqlpatch, dba_registry_history und dba_registry), die ihre Aktivitäten im Verzeichnis oracle_manage_patches_log_dir auf den Zielen protokollieren
  • Patch direkt von My Oracle Support herunterladen (oracle_manage_patches_download_patch_from_mos Switch + oracle-download-patches Rolle)

Diese Rolle erwartet, dass folgende Variablen gesetzt werden (entweder im Playbook oder über --extra-vars - siehe Beispiele unten):

  • oracle_manage_patches_task - entweder apply oder rollback
  • oracle_manage_patches_patch_type - entweder 'oneoff' oder einer der Schlüssel 'oracle_manage_patches_quarterly_patches' (z.B. ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)
  • oracle_manage_patches_patch_name - Patch-Name (z.B. OCT2018/JUL2018) für vierteljährliche Patches

Eine Liste von Datenbanken sollte mit der Variable oracle_databases bereitgestellt werden (siehe Rolle oracle zur Referenz). Sie kann manuell definiert oder dynamisch mit der Auto-Discovery-Rolle oracle-gatherinfo-databases gefüllt werden (siehe Beispiel im Abschnitt Beispiel-Playbook). Bei manueller Einrichtung sollte oracle_databases wie folgt definiert werden:

oracle_databases:
  - cluster_database: "false"
    database_role: "PRIMARY"
    database_type: "SINGLE"
    db_name: "ORCL"
    db_unique_name: "ORCL"
    edition: "Enterprise"
    instance_name: "ORCL"
    instances: "ORCL"
    is_registered_in_gi: "true"
    oracle_home: "/u01/app/oracle/product/11.2.0.4/dbhome1"
    software_version: "11.2.0.4.0"
  - (...)

Ähnlich sollte die Konfiguration der Grid Infrastructure mit der oracle_gi_info dict-Variablen bereitgestellt werden (siehe Rolle oracle zur Referenz). Sie kann manuell definiert oder dynamisch mit der Auto-Discovery-Rolle oracle-gatherinfo-gi gefüllt werden (siehe Beispiel im Abschnitt Beispiel-Playbook). Bei manueller Einrichtung sollte oracle_gi_info wie folgt definiert werden (Beispiel):

oracle_gi_info:
  oracle_home: "/u01/app/12.1.0/grid"
  rac_nodes: []
  rac_remote_nodes: []
  software_version: "12.1.0.2.0"

oder

oracle_gi_info:
  oracle_home: "/u01/app/12.1.0/grid"
  rac_nodes: [ 'server1', 'server2' ]
  rac_remote_nodes: [ 'server2' ]
  software_version: "12.1.0.2.0"

Es wird dringend empfohlen, die Auto-Discovery-Rollen oracle-gatherinfo-listener und oracle-gatherinfo-dbconsole vor dem Ausführen dieser Rolle zu aktivieren (siehe Beispiel im Abschnitt Beispiel-Playbook). Diese Rollen füllen die Variablen oracle_running_listeners und oracle_dbconsole_running_services, die von dieser Rolle (oracle-manage-patches) verwendet werden, um die Systeme in denselben Zustand wie zuvor zurückzubringen.

Die Patch-Listen sind mithilfe der Variablen oracle_manage_patches_opatch, oracle_manage_patches_quarterly_patches und oracle_manage_patches_oneoff_patches definiert. Siehe Rollenvariablen für Details.

Patch-ZIP-Dateien können entweder auf den entfernten Systemen oder lokal auf dem Ansible-Controller zugänglich sein. Um anzugeben, welche Konfiguration anwendbar ist, verwenden Sie die Variable oracle_manage_patches_remote_stage.

Die Rolle installiert automatisch das neueste OPatch-Tool für die betroffenen ORACLE_HOMEs gemäß den Daten von oracle_manage_patches_opatch.

Unterstützte Betriebssysteme:

  • RedHat
  • CentOS
  • OracleLinux

Anforderungen

Diese Rolle verwendet die Rollen oracle, oracle-asm-metadata, oracle-homes-backup und oracle-download-patches.

Beispiel-Playbook

Ein einfaches Beispiel:

- name: Oracle-Patches anwenden
  hosts: ora-servers
  gather_facts: true
  become: true
  become_user: '{{ oracle_user }}'

  tasks:
  
  - import_role:
      name: oracle-manage-patches
    vars:
      oracle_manage_patches_task: apply
      oracle_manage_patches_patch_type: ojvmgicombo   
      oracle_manage_patches_patch_name: OCT2018
    tags:
      - oracle-manage-patches

Ein komplexes Beispiel (mit zusätzlichen Funktionen, wie GI/DB Auto-Discovery, Cronjobs und Unterstützung für Überwachung [deaktivieren/aktivieren]):

- name: Oracle-Patches anwenden
  hosts: ora-servers
  gather_facts: true
  become: true
  become_user: '{{ oracle_user }}'

  vars:
    oracle_apply_patches_manage_monitoring: true
    oracle_apply_patches_manage_cron_jobs: true
    oracle_apply_patches_downtime_duration: '3h'
    oracle_apply_patches_single_host_mode: true

  tasks:

  - name: Einzelhost-Modus überprüfen
    assert:
      that:
        - "play_hosts|length == 1"
      fail_msg: "Dies ist ein 'Einzelhost'-Modus, aber mehr als ein Host scheint im aktuellen Play zu sein"
    run_once: true
    when: oracle_apply_patches_single_host_mode
    tags:
      - oracle_apply_patches_precheck
      - always

  - import_role:
      name: oracle-gatherinfo-gi
    tags:
      - oracle-gatherinfo-gi
      - oracle-gatherinfo-allcomponents

  - import_role:
      name: oracle-gatherinfo-databases
    tags:
      - oracle-gatherinfo-databases
      - oracle-gatherinfo-allcomponents

  - import_role:
      name: oracle-gatherinfo-listener
    tags:
      - oracle-gatherinfo-listener
      - oracle-gatherinfo-allcomponents

  - import_role:
      name: oracle-gatherinfo-dbconsole
    tags:
      - oracle-gatherinfo-dbconsole
      - oracle-gatherinfo-allcomponents

  - include_role:
      name: oracle-host-cron
    vars:
      oracle_host_cron_copy_scripts: false
      oracle_host_cron_disable_jobs: true
      oracle_host_cron_manage_cron_jobs: '{{ oracle_apply_patches_manage_cron_jobs }}'
    when: oracle_apply_patches_manage_cron_jobs
    tags:
      - oracle_disable_cron_jobs

  - include_tasks: monitoring_set_downtime.yml
    with_items:
      - '{{ inventory_hostname }}'
      - '{{ oracle_gi_info.rac_remote_nodes }}'
    loop_control:
      label: "[host: {{ _oracle_apply_patches_host_outer_item }}]"
      loop_var: _oracle_apply_patches_host_outer_item
    when: oracle_apply_patches_manage_monitoring
    tags:
      - nacl_manage_checks_set_downtime

  - import_role:
      name: oracle-manage-patches
    vars:
      oracle_manage_patches_task: apply
      oracle_manage_patches_patch_type: ojvmgicombo   
      oracle_manage_patches_patch_name: OCT2018
    tags:
      - oracle-manage-patches

  - include_tasks: monitoring_cancel_downtime.yml
    with_items:
      - '{{ inventory_hostname }}'
      - '{{ oracle_gi_info.rac_remote_nodes }}'
    loop_control:
      label: "[host: {{ _oracle_apply_patches_host_outer_item }}]"
      loop_var: _oracle_apply_patches_host_outer_item
    when: oracle_apply_patches_manage_monitoring
    tags:
      - nacl_manage_checks_cancel_downtime

  - include_role:
      name: oracle-host-cron
    vars:
      oracle_host_cron_copy_scripts: false
      oracle_host_cron_disable_jobs: false
      oracle_host_cron_manage_cron_jobs: '{{ oracle_apply_patches_manage_cron_jobs }}'
    when: oracle_apply_patches_manage_cron_jobs
    tags:
      - oracle_enable_cron_jobs

Variablen

In vars/main.yml oder group_vars/.. oder host_vars/..:

#-------------------------------------------------
# Überschreibt die Variablen der Rolle 'oracle-manage-patches'
#-------------------------------------------------

# Setzen auf 'true', um anzuzeigen, dass das Verzeichnis mit Patch-ZIP-Dateien auf dem entfernten System zugänglich ist
# und nicht lokal zum Ansible-Controller
# Setzen auf 'false', um Patch-Dateien vom Ansible-Controller auf das entfernte System zu kopieren
oracle_manage_patches_remote_stage: true

# Stage-Verzeichnis für OPatch-Tool
oracle_manage_patches_stage_dir_opatch: /software/rdbms/opatch

# Stage-Verzeichnis für Archive vierteljährlicher Patches (PSU/RU usw.)
oracle_manage_patches_stage_dir_quarterly_patches: /software/rdbms/quarterly_patches

# Eine Liste von OPatch-Dateien
# 'filename' sollte entweder ein vollständiger Pfad sein oder sucht im Verzeichnis 'oracle_manage_patches_stage_dir_opatch'
oracle_manage_patches_opatch:
  11.2.0.4:
    filename: p6880880_112000_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
  12.1.0.2:
    filename: p6880880_122010_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
  12.2.0.1:
    filename: p6880880_122010_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
  18.0.0.0:
    filename: p6880880_180000_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip

# Eine Liste von vierteljährlichen Patches
# 'filename' sollte entweder ein vollständiger Pfad sein oder sucht im Verzeichnis 'oracle_manage_patches_stage_dir_quarterly_patches'

oracle_manage_patches_quarterly_patches:
  ojvmgicombo:
    description: 'Kombination aus OJVM-Komponenten DB PSU + GI PSU'
    12.1.0.2:
      OCT2018:
        patchversion: 12.1.0.2.181016
        filename: p28689148_121020_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
        patchid: 28689148
        gi_patchid: 28349311
        ojvm_patchid: 28440711
  ojvmdbcombo:
    description: 'Kombination aus OJVM-Komponenten DB PSU + DB PSU'
    11.2.0.4:
      OCT2018:
        patchversion: 11.2.0.4.181016
        filename: p28689165_112040_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
        patchid: 28689165
        db_patchid: 28204707
        ojvm_patchid: 28440700

Lizenz

GPLv3 - GNU General Public License v3.0

Autoreninformation

Diese Rolle wurde 2018 von Krzysztof Lewandowski erstellt.

Installieren
ansible-galaxy install klewan.ansible_role_oracle_manage_patches
GitHub Repository
Lizenz
gpl-3.0
Downloads
133