klewan.ansible_role_oracle_manage_patches
Ansibleロール: oracle-manage-patches
このロールはOracleのパッチを管理します。
パッチ(単発および四半期パッチ)をグリッドインフラストラクチャおよび/またはデータベースOracleホーム(PRIMARYおよびSTANDBY両方)に適用およびロールバックします。
影響を受けるORACLE_HOMEを制限するために、ORACLE_HOMEパスを直接指定する(oracle_manage_patches_oracle_home_name_patterns
)か、ソフトウェアバージョン(oracle_manage_patches_oracle_home_version_patterns
)を提供することができます。そうでなければ、提供されたパッチ名に関連する全てのORACLE_HOMEが影響を受けます。選択されたパッチ名に関連しないその他のORACLE_HOMEやデータベースには影響しません。
このロールはRACに対応しており、RACノードのいずれかでプレイブックが実行された場合でも、全クラスターノードにパッチを適用します。
スタンバイデータベースでは、バイナリのみがパッチを適用され、sql/datapatchスクリプトは実行されません。
次のオプション機能が利用可能です:
- ORACLE_HOMEのバックアップ(パッチインストール前) - (
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
ロール)
このロールは、プレイブック内または--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
で動的に生成することもできます(Example 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"
- (...)
同様に、グリッドインフラストラクチャ構成はoracle_gi_info
辞書変数で提供する必要があります(oracle
ロールを参照)。手動で定義することも、自動発見ロールoracle-gatherinfo-gi
で動的に生成することもできます(Example 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
を起動することを強くお勧めします(Example Playbookセクションの例を参照)。これらのロールは、システムを元の状態に戻すために使用されるoracle_running_listeners
およびoracle_dbconsole_running_services
変数を生成します。
パッチのリストはoracle_manage_patches_opatch
、oracle_manage_patches_quarterly_patches
およびoracle_manage_patches_oneoff_patches
変数で定義されます。詳細についてはRole Variablesを参照してください。
パッチのzipファイルは、リモートシステムまたはローカルのAnsibleコントローラーでアクセス可能です。どの構成が適用可能かを示すには、oracle_manage_patches_remote_stage
変数を使用します。
このロールは、影響を受けるORACLE_HOMEに最新のOPatchユーティリティを自動的にインストールします。
対応しているOS:
- RedHat
- CentOS
- OracleLinux
要件
このロールは、oracle
、oracle-asm-metadata
、oracle-homes-backup
およびoracle-download-patches
ロールを使用します。
このロールは、プレイブック内または--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:
# パッチタスク - 'apply'または'rollback'
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にパッチを適用(OR)
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にパッチを適用(OR)
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
# 前スクリプトを実行するかどうか
oracle_manage_patches_run_pre_scripts: true
# 後スクリプトを実行するかどうか
oracle_manage_patches_run_post_scripts: true
# パッチコンフリクト検出を実行
oracle_manage_patches_conflict_detection: true
# パッチインストールを実行(デバッグ用に'false'に設定することも)
oracle_manage_patches_patch_installation: true
#
# ステージ位置、インストールファイル
#
# ステージディレクトリがリモートシステムで利用可能な場合は'true'に設定
# ステージディレクトリがAnsibleコントローラーにローカルな場合は'false'に設定
oracle_manage_patches_remote_stage: true
# OPatchユーティリティのステージディレクトリ
oracle_manage_patches_stage_dir_opatch: /software/rdbms/opatch
# OPatchユーティリティを更新(抽出)するかどうか
oracle_manage_patches_update_opatch: true
# パッチzipファイルを抽出するかどうか
oracle_manage_patches_extract_patch_file: true
# 四半期パッチアーカイブ用のステージディレクトリ
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.1:
filename: p6880880_112000_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
11.2.0.2:
filename: p6880880_112000_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
11.2.0.3:
filename: p6880880_112000_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
11.2.0.4:
filename: p6880880_112000_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
12.1.0.1:
filename: p6880880_121010_{{ 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: 'OJVMコンポーネントDB PSU + GI PSUのコンボ'
12.1.0.2:
JAN2019:
patchversion: 12.1.0.2.190115
filename: p28980120_121020_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
patchid: 28980120
gi_patchid: 28813884
ojvm_patchid: 28790654
OCT2018:
patchversion: 12.1.0.2.181016
filename: p28689148_121020_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
patchid: 28689148
gi_patchid: 28349311
ojvm_patchid: 28440711
JUL2018:
patchversion: 12.1.0.2.180717
filename: p28317214_121020_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
patchid: 28317214
gi_patchid: 27967747
ojvm_patchid: 27923320
12.2.0.1:
JAN2018:
patchversion: 12.2.0.1.180116
filename: p27010711_122010_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
patchid: 27010711
gi_patchid: 27100009
ojvm_patchid: 27001739
ojvmdbcombo:
description: 'OJVMコンポーネント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
JUL2018:
patchversion: 11.2.0.4.180717
filename: p28317183_112040_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
patchid: 28317183
db_patchid: 27734982
ojvm_patchid: 27923163
ru:
description: 'リリース更新パッチ(RU)'
12.2.0.1:
JUL2018:
patchversion: 12.2.0.1.180717
filename: p28183653_122010_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
patchid: 28183653
si_patchid: 28163133
dbbp:
description: 'データベースプラクティブバンドルパッチ(BP)'
12.1.0.2:
JUL2017:
patchversion: 12.1.0.2.170718
filename: p26022196_121020_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
patchid: 26022196
si_patchid: 25869760
psu:
description: 'パッチセット更新(PSU)'
11.2.0.4:
JUL2017:
patchversion: 11.2.0.4.170718
filename: p26030799_112040_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
patchid: 26030799
si_patchid: 25869727
oracle_manage_patches_oneoff_patches: []
#
# ログ/バックアップ/インストールディレクトリ
#
# 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`ロールを使用します。
例プレイブック
----------------
シンプルな例:
```yaml
- 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: "これはシングルホストモードですが、複数のホストが現在のプレイに存在しているようです"
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'に設定
# ステージディレクトリがAnsibleコントローラーにローカルな場合は'false'に設定
oracle_manage_patches_remote_stage: true
# OPatchユーティリティのステージディレクトリ
oracle_manage_patches_stage_dir_opatch: /software/rdbms/opatch
# 四半期パッチアーカイブ用のステージディレクトリ
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: 'OJVMコンポーネント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: 'OJVMコンポーネント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
# ... その他 ...
ライセンス
GPLv3 - GNU一般公衆ライセンス v3.0
著者情報
このロールは、2018年にKrzysztof Lewandowskiによって作成されました。