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$historydba_registry_sqlpatchdba_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_opatchoracle_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

要件

このロールは、oracleoracle-asm-metadataoracle-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によって作成されました。

インストール
ansible-galaxy install klewan.ansible_role_oracle_manage_patches
ライセンス
gpl-3.0
ダウンロード
133