deploy/ansible/roles-sap/5.1-dbload/tasks/oracle-postprocessing.yaml (147 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. - name: "ORACLE Post Processing: Set Variables" ansible.builtin.set_fact: PAS: 'pas' pga_temp_l4tb_std: "{{ ((ansible_memory_mb.real.total * 0.60 ) * 0.2) | round | int }}" pga_temp_l4tb_dis: "{{ ((ansible_memory_mb.real.total * 0.80 ) * 0.2) | round | int }}" # pga_temp_g4tb: "{{ ((ansible_memory_mb.real.total*0.85)*0.2) |round |int }}" # PGA & SGA for RAM < 4TB - name: "ORACLE Post Processing: Set the SGA and PGA Sizes for RAM < 4TB" ansible.builtin.set_fact: main_mem1: "{{ ansible_memory_mb.real.total }}" ora_sga: "{{ (ansible_memory_mb.real.total * 0.60) | round | int }}" ora_pga: "{{ [(pga_temp_l4tb_std | int), 4194304] | min }}" when: - ansible_memory_mb.real.total < 4194304 - "PAS not in supported_tiers" - name: "ORACLE Post Processing: Set the SGA and PGA Sizes for RAM < 4TB Single Node Deployments" ansible.builtin.set_fact: main_mem1: "{{ ansible_memory_mb.real.total }}" ora_sga: "{{ (ansible_memory_mb.real.total * 0.75) | round | int }}" ora_pga: "{{ [(pga_temp_l4tb_std | int), 4194304] | min }}" when: - ansible_memory_mb.real.total < 4194304 - "PAS in supported_tiers" - name: "ORACLE Post Processing: Show Main Memory" ansible.builtin.debug: msg: - "Total memory: {{ main_mem1 }}" - "sga_max_size: {{ ora_sga }}" - "pga_aggregate_target: {{ ora_pga }}" - name: "ORACLE Post Processing: Set the SGA and PGA Sizes for RAM > 4TB" ansible.builtin.set_fact: ora_sga: "{{ (ansible_memory_mb.real.total * 0.65) | round | int }}" ora_pga: "{{ ((ansible_memory_mb.real.total*0.65)*0.2) | round | int }}" when: - ansible_memory_mb.real.total > 4194304 - supported_tiers != "pas" - supported_tiers == "scs" # Block to check if a reboot has been performed already after updating SGA & PGS - name: "ORACLE Post Processing: DBLoad: - check if DBLoad is performed for {{ sid_to_be_deployed.sid | upper }}" ansible.builtin.stat: path: "/etc/sap_deployment_automation/{{ sid_to_be_deployed.sid | upper }}/ora_sga_updated.txt" register: sga_update_status - name: "ORACLE Post Processing: Oracle SGA & PGA: create updatesga.sql" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.blockinfile: create: true path: /etc/sap_deployment_automation/{{ db_sid | upper }}/updatesga.sql marker_begin: "-- BEGIN" marker_end: "-- END" block: | ALTER SYSTEM SET sga_max_size={{ ora_sga }}M SCOPE=spfile; ALTER SYSTEM SET pga_aggregate_target={{ ora_pga }}M SCOPE=spfile; ALTER SYSTEM SET use_large_pages=only SCOPE=spfile; alter system set LOCAL_LISTENER="(ADDRESS=(PROTOCOL=TCP)(HOST={{ ansible_hostname }})(PORT=1521))" scope=both; SHUTDOWN IMMEDIATE; exit; mode: '0755' - name: "ORACLE Post Processing: Oracle Startup: create startup.sql" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.blockinfile: create: true path: /etc/sap_deployment_automation/{{ db_sid | upper }}/startup.sql marker_begin: "-- BEGIN" marker_end: "-- END" block: | STARTUP; exit mode: '0755' - name: "ORACLE Post Processing: Oracle SGA Change Execution" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @updatesga.sql | tee updatesga.log register: updatesga_results failed_when: updatesga_results.rc != 0 args: creates: /etc/sap_deployment_automation/{{ db_sid | upper }}/sgaupdated.txt chdir: /etc/sap_deployment_automation/{{ db_sid | upper }} executable: /bin/csh - name: "ORACLE Post Processing: Create sgaupdated.txt" ansible.builtin.file: path: /etc/sap_deployment_automation/{{ db_sid | upper }}/sgaupdated.txt state: touch mode: '0755' when: updatesga_results.rc == 0 # Wait for creation of HugePages # Reboot the VM to avoid the error "ORA-27102: out of memory" - name: "ORACLE Post Processing: DB VM reboot" block: - name: "ORACLE Post Processing: Reboot after the Enabling HugePages" ansible.builtin.debug: msg: "Reboot after the Enabling HugePages" - name: "ORACLE Post Processing: Reboot after the Enabling HugePages" become: true become_user: root ansible.builtin.reboot: reboot_timeout: 300 failed_when: false - name: "ORACLE Post Processing: Clear the failed state of hosts" ansible.builtin.meta: clear_host_errors # Wait for Connection after reboot - name: "ORACLE Post Processing: Wait for Connection after reboot" ansible.builtin.wait_for_connection: delay: 10 timeout: 300 when: - not sga_update_status.stat.exists - name: "ORACLE Post Processing: Start Oracle after SGA Change" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @startup.sql | tee startup.log register: dbstarted_results failed_when: dbstarted_results.rc != 0 args: creates: /etc/sap_deployment_automation/{{ db_sid | upper }}/db_startup_completed.txt chdir: /etc/sap_deployment_automation/{{ db_sid | upper }} executable: /bin/csh # Create a block for starting the oracle listener on primary node - name: "Oracle Post-Processing - start lsnrctl on Primary" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: lsnrctl start register: lsnrctl_start_primary_results failed_when: lsnrctl_start_primary_results.rc > 1 args: creates: /etc/sap_deployment_automation/{{ db_sid | upper }}/lsnrctl_started.txt chdir: /etc/sap_deployment_automation/{{ db_sid | upper }} executable: /bin/csh - name: "Oracle Post-Processing: Create lsnrctl_started.txt" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.file: path: /etc/sap_deployment_automation/{{ db_sid | upper }}/lsnrctl_started.txt state: touch mode: '0755' when: - lsnrctl_start_primary_results.rc == 0 - name: "ORACLE Post Processing: Create db_startup_completed.txt" ansible.builtin.file: path: /etc/sap_deployment_automation/{{ db_sid | upper }}/db_startup_completed.txt state: touch mode: '0755' when: updatesga_results.rc == 0 - name: "ORACLE Post Processing: Create sgaupdated.txt" ansible.builtin.file: path: /etc/sap_deployment_automation/{{ db_sid | upper }}/ora_sga_updated.txt state: touch mode: '0755' when: updatesga_results.rc == 0