ansible_role_oracle_manage_patches
Роль Ansible: oracle-manage-patches
Эта роль управляет патчами Oracle.
Она применяет и откатывает патчи (одиночные и квартальные) для Grid Infrastructure и/или Oracle Homes базы данных (как для PRIMARY, так и для STANDBY).
Кроме того, можно ограничить затрагиваемые ORACLE_HOMEs, предоставив либо пути к ORACLE_HOME напрямую (oracle_manage_patches_oracle_home_name_patterns
), либо версии программного обеспечения (oracle_manage_patches_oracle_home_version_patterns
). В противном случае будут затронуты все ORACLE_HOMEs любой версии, связанные с заданным именем патча. Другие ORACLE_HOMEs и базы данных, не связанные с выбранным именем патча, не будут затронуты.
Роль учитывает кластер RAC и применяет патчи ко всем узлам кластера, когда обнаруживается Real Application Cluster, даже если playbook выполняется только на одном из узлов RAC (аргумент --limit
в ansible-playbook).
Для резервных баз данных патчатся только бинарные файлы, никакие SQL/Datapatch скрипты не выполняются.
В качестве опций доступны следующие функции:
- Резервное копирование ORACLE_HOMEs (до установки патча) - (
oracle_manage_patches_backup_oracle_home
+ рольoracle-homes-backup
) - Резервное копирование метаданных ASM (до установки патча) - (
oracle_manage_patches_backup_asm_metadata
и переменнаяoracle_manage_patches_backup_dir
) - Скрипты предварительной и последующей проверки (вывод опции opatch lsinventory, список объектов INVALID, вывод таблиц
registry$history
,dba_registry_sqlpatch
,dba_registry_history
иdba_registry
), которые записывают свою деятельность в директориюoracle_manage_patches_log_dir
на целевых машинах. - Загрузка патча напрямую из My Oracle Support (
oracle_manage_patches_download_patch_from_mos
+ рольoracle-download-patches
).
Эта роль ожидает, что будут установлены следующие переменные (либо в playbook, либо через --extra-vars
- смотрите примеры ниже):
oracle_manage_patches_task
- либоapply
, либоrollback
oracle_manage_patches_patch_type
- либо 'oneoff', либо любой ключ из 'oracle_manage_patches_quarterly_patches' (например, ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)oracle_manage_patches_patch_name
- имя патча (например, OCT2018/JUL2018) для квартальных патчей.
Список баз данных должен быть предоставлен с переменной oracle_databases
(смотрите роль oracle
для справки). Его можно определить вручную или заполнить динамически с помощью роли автопоиска oracle-gatherinfo-databases
(смотрите пример в разделе Пример Playbook). При ручной настройке oracle_databases
должен быть определён следующим образом:
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"
- (...)
Аналогично, конфигурация Grid Infrastructure должна быть предоставлена с помощью переменной-словаря oracle_gi_info
(смотрите роль oracle
для справки). Её можно определить вручную или заполнить динамически с помощью роли автопоиска oracle-gatherinfo-gi
(смотрите пример в разделе Пример Playbook). При ручной настройке oracle_gi_info
должен быть определён следующим образом (пример):
oracle_gi_info:
oracle_home: "/u01/app/12.1.0/grid"
rac_nodes: []
rac_remote_nodes: []
software_version: "12.1.0.2.0"
или
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"
Настоятельно рекомендуется запускать роли автопоиска oracle-gatherinfo-listener
и oracle-gatherinfo-dbconsole
перед выполнением этой роли (смотрите пример в разделе Пример Playbook). Эти роли заполняют переменные oracle_running_listeners
и oracle_dbconsole_running_services
, которые используются этой ролью oracle-manage-patches
для возврата систем в точно такое же состояние, как до патчирования.
Списки патчей определяются с помощью переменных oracle_manage_patches_opatch
, oracle_manage_patches_quarterly_patches
и oracle_manage_patches_oneoff_patches
. Смотрите Переменные роли для деталей.
Zip-файлы патчей могут быть доступны как на удалённых системах, так и локально, на контроллере Ansible. Чтобы указать, какая конфигурация применима, используйте переменную oracle_manage_patches_remote_stage
.
Роль автоматически устанавливает последнюю утилиту OPatch для затрагиваемых ORACLE_HOMEs в соответствии с данными oracle_manage_patches_opatch
.
Поддерживаемые ОС:
- RedHat
- CentOS
- OracleLinux
Требования
Эта роль использует роли oracle
, oracle-asm-metadata
, oracle-homes-backup
и oracle-download-patches
.
Эта роль ожидает, что будут установлены следующие переменные (либо в playbook, либо через --extra-vars
- смотрите примеры ниже):
oracle_manage_patches_task
- либоapply
, либоrollback
oracle_manage_patches_patch_type
- либо 'oneoff', либо любой ключ из 'oracle_manage_patches_quarterly_patches' (например, ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)oracle_manage_patches_patch_name
- имя патча (например, OCT2018/JUL2018) для квартальных патчей.
Переменные роли
Доступные переменные перечислены ниже с установками по умолчанию (смотрите defaults/main.yml
):
#
# Входные параметры
#
# Либо 'oneoff', либо любой ключ из 'oracle_manage_patches_quarterly_patches' (например, ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)
oracle_manage_patches_patch_type:
# Имя патча (например, OCT2018/JUL2018) для квартальных патчей
oracle_manage_patches_patch_name:
# Задача патча - либо применение, либо откат
oracle_manage_patches_task: apply
#
# Условные выражения и управление
#
# Резервное копирование ORACLE_HOME перед применением патча
oracle_manage_patches_backup_oracle_home: false
# Резервное копирование метаданных ASM перед применением патча
oracle_manage_patches_backup_asm_metadata: false
# Загрузка патчей из My Oracle Support
oracle_manage_patches_download_patch_from_mos: false
# Патч ORACLE_HOMEs/GRID_HOMEs с именами, совпадающими с любой строкой из этого списка (ИЛИ)
oracle_manage_patches_oracle_home_name_patterns: []
# Пример:
#oracle_manage_patches_oracle_home_name_patterns:
# - '/u01/app/oracle/product/11.2.0/dbhome_1'
# - '/u01/app/oracle/product/12.1.0/dbhome_2'
# - '/u01/app/12.1.0/grid'
# Патч ORACLE_HOMEs/GRID_HOMEs с версией, совпадающей с любой строкой из этого списка (ИЛИ)
oracle_manage_patches_oracle_home_version_patterns: []
# Пример:
#oracle_manage_patches_oracle_home_version_patterns:
# - 11.2.0.4.0
# - 12.1.0.2.0
# Показать вывод 'opatch lsinventory'
oracle_manage_patches_display_opatch_lsinventory_output: true
# Показать вывод 'opatchauto -analyze'
oracle_manage_patches_display_opatchauto_analyze_output: true
# Показать вывод 'ojvm conflict detection'
oracle_manage_patches_display_ojvm_conflict_detection_output: true
# Показать вывод 'opatchauto apply'
oracle_manage_patches_display_opatchauto_apply_output: true
# Показать вывод 'datapatch'
oracle_manage_patches_display_datapatch_output: true
# Выполнять ли предскрипты (opatch lsinventory/db_psu_apply_checks.sql и др.)
oracle_manage_patches_run_pre_scripts: true
# Выполнять ли постскрипты (opatch lsinventory/db_psu_apply_checks.sql и др.)
oracle_manage_patches_run_post_scripts: true
# Выполнять проверку конфликтов патча
oracle_manage_patches_conflict_detection: true
# Выполнять установку патча (установите 'false' только для отладки)
oracle_manage_patches_patch_installation: true
#
# Папки для установки, резервного копирования и логирования
#
# Папка для резервного копирования, используемая для различных не баз данных резервных копий, таких как метаданные ASM, резервная копия реестра OCR и т.д.
oracle_manage_patches_backup_dir: '{{ oracle_default_backup_dir|default( "/u01/app/psu/backup", true ) }}'
# Логовая папка
oracle_manage_patches_log_dir: '{{ oracle_default_log_dir|default( "/u01/app/psu/log", true ) }}'
# Папка для установки
oracle_manage_patches_stage_install_dir: '{{ oracle_default_stage_install_dir|default( "/u01/app/oracle/install", true ) }}'
#
# Информация для отладки
#
# (отладка) показать информацию о патчах
oracle_manage_patches_debug_display_patches_info: true
# (отладка) показать выбранные для патчирования ORACLE_HOMEs
oracle_manage_patches_debug_display_homes_selected_for_patching: true
Зависимости
Эта роль использует роли oracle
, oracle-asm-metadata
, oracle-homes-backup
и oracle-download-patches
.
Пример Playbook
Простой пример:
- name: Применить патчи Oracle
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
Сложный пример (с дополнительными функциями, такими как автопоиск GI/DB, управление cron и поддержка мониторинга [выключение/включение]):
- name: Применить патчи Oracle
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: Проверка режима одиночного хоста
assert:
that:
- "play_hosts|length == 1"
fail_msg: "Это режим 'одиночного хоста', но в текущем play кажется, что больше одного хоста"
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
Внутри vars/main.yml
или group_vars/..
или host_vars/..
:
#-------------------------------------------------
# переопределяет переменные роли 'oracle-manage-patches'
#-------------------------------------------------
# Установите в 'true', чтобы указать, что каталог с zip-файлами патчей доступен на удаленной системе,
# а не локально на контроллере Ansible
# Установите в 'false', чтобы скопировать файлы патчей с контроллера Ansible на удалённую систему
oracle_manage_patches_remote_stage: true
# Каталог для утилиты OPatch
oracle_manage_patches_stage_dir_opatch: /software/rdbms/opatch
# Каталог для архивов квартальных патчей Oracle (PSU/RU и т.д.)
oracle_manage_patches_stage_dir_quarterly_patches: /software/rdbms/quarterly_patches
# Список файлов opatch
# 'filename' должен быть полным путём, иначе он будет искаться в каталоге '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
# Список квартальных патчей
# 'filename' должен быть полным путём, иначе он будет искаться в каталоге 'oracle_manage_patches_stage_dir_quarterly_patches'
oracle_manage_patches_quarterly_patches:
ojvmgicombo:
description: 'Комбо из DB PSU компонента OJVM + 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: 'Комбо из DB PSU компонента OJVM + 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
# ... и т.д. ...
Лицензия
GPLv3 - GNU Общая Публичная Лицензия версии 3.0
Авторская информация
Эта роль была создана в 2018 году Кшиштофом Левандовским.
ansible-galaxy install klewan/ansible-role-oracle-manage-patches