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 undoracle_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
unddba_registry
), die ihre Aktivitäten im Verzeichnisoracle_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
- entwederapply
oderrollback
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.
Manage Oracle patches
ansible-galaxy install klewan.ansible_role_oracle_manage_patches