deploy/ansible/roles-db/4.1.3-ora-dg/tasks/ora-dg-setup-secondary.yaml (747 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. --- # /*---------------------------------------------------------------------------8 # | | # | Execute the SQL scripts for Oracle Data Guard configuration. | # | | # +------------------------------------4--------------------------------------*/ # Set Primary and Secondary node names. - name: "Oracle Data Guard - Setup Secondary: Setting the primary and Secondary DB names" ansible.builtin.set_fact: ora_primary: "{{ ansible_play_hosts_all[0] }}" # Oracle Primary Host ora_secondary: "{{ ansible_play_hosts_all[1] }}" # Oracle Secondary Host current_host: "{{ ansible_hostname }}" # Configuration on the Secondary DB - name: "Oracle Data Guard - Setup Secondary: Copy initSID.ora to Secondary" become: true become_user: "root" ansible.builtin.copy: src: "{{ target_media_location }}/downloads/{{ db_sid | upper }}/init{{ db_sid | upper }}.ora" dest: /oracle/{{ db_sid | upper }}/{{ ora_release }}/dbs/init{{ db_sid | upper }}.ora remote_src: true owner: oracle group: oinstall mode: "{{ '0777' | int - (custom_umask | default('022') | int) }}" when: current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Copy orapwSID to Secondary" become: true become_user: "root" ansible.builtin.copy: src: "{{ target_media_location }}/downloads/{{ db_sid | upper }}/orapw{{ db_sid | upper }}" dest: /oracle/{{ db_sid | upper }}/{{ ora_release }}/dbs/orapw{{ db_sid | upper }} remote_src: true owner: oracle group: dba mode: "{{ '0777' | int - (custom_umask | default('022') | int) }}" when: current_host == ora_secondary # Add additional parameters for Oracle ASM to match the file locations of Primary in secondary. # This has to be done to prevent rman shooting file systems all over the disk groups. - name: "Oracle Data Guard - Update the initSID.ora for changing the control file location" ansible.builtin.replace: path: /oracle/{{ db_sid | upper }}/{{ ora_release }}/dbs/init{{ db_sid | upper }}.ora regexp: '/{{ db_sid | upper }}/c' replace: '/{{ db_sid | upper }}_STDBY/c' backup: true when: - node_tier == "oracle-asm" - name: "Oracle Data Guard - File update wait for 15 sec to avoid multiple locks" ansible.builtin.wait_for: timeout: 15 - name: "Oracle Data Guard - Update the initSID.ora for adopting oraarch location" ansible.builtin.replace: path: /oracle/{{ db_sid | upper }}/{{ ora_release }}/dbs/init{{ db_sid | upper }}.ora regexp: '{{ db_sid | upper }}/oraarch' replace: '{{ db_sid | upper }}_STDBY/oraarch' when: - node_tier == "oracle-asm" # You can also use "sed" to replace the string. sed -i 's|/DBSID/c|/DBSID_STDBY/c|g' - name: "Oracle Data Guard - File update wait for 15 sec to avoid multiple locks" ansible.builtin.wait_for: timeout: 15 - name: "Oracle Data Guard - Update the initSID.ora to delete the old local_listener value" become: true become_user: "root" ansible.builtin.lineinfile: path: /oracle/{{ db_sid | upper }}/{{ ora_release }}/dbs/init{{ db_sid | upper }}.ora regexp: '^local_listener=' state: absent - name: "Oracle Data Guard - File update wait for 15 sec to avoid multiple locks" ansible.builtin.wait_for: timeout: 15 - name: "Oracle Data Guard - Replace the local listener entires in initSID.ora" ansible.builtin.blockinfile: path: /oracle/{{ db_sid | upper }}/{{ ora_release }}/dbs/init{{ db_sid | upper }}.ora marker_begin: "-- BEGIN" marker_end: "-- END" insertafter: ".db_name='{{ db_sid | upper }}'" block: | *.db_create_file_dest='+DATA' *.db_unique_name ='{{ db_sid | upper }}_STDBY' *.log_file_name_convert='{{ db_sid | upper }}','{{ db_sid | upper }}' *.db_create_online_log_dest_1='+DATA' *.db_create_online_log_dest_2='+DATA' when: - node_tier == "oracle-asm" - name: "Oracle Data Guard - Replace the local listener entires in initSID.ora" ansible.builtin.blockinfile: path: /oracle/{{ db_sid | upper }}/{{ ora_release }}/dbs/init{{ db_sid | upper }}.ora marker_begin: "-- BEGIN" marker_end: "-- END" insertafter: ".db_name='{{ db_sid | upper }}'" block: | *.db_unique_name ='{{ db_sid | upper }}_STDBY' *.log_file_name_convert='{{ db_sid | upper }}','{{ db_sid | upper }}' *.local_listener='(Address=(Protocol=TCP)(Host={{ ora_secondary }})(Port=1521))' when: - node_tier == "oracle" - name: "Oracle Data Guard - Setup Secondary: start lsnrctl on Secondary" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: lsnrctl start register: lsnrctl_start_secondary_results failed_when: lsnrctl_start_secondary_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/lsnrctl_started_sec.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - current_host == ora_secondary - node_tier == "oracle" - name: "Oracle Data Guard - Setup Secondary: started lsnrctl on Secondary (Debug)" ansible.builtin.debug: var: lsnrctl_start_secondary_results.stdout_lines verbosity: 2 - name: "Oracle Data Guard - Setup Secondary: restart lsnrctl on Secondary (save output)" ansible.builtin.copy: dest: /etc/sap_deployment_automation/lsnrctl_start_primary.log content: "{{ lsnrctl_start_secondary_results.stdout }}" mode: '0777' when: lsnrctl_start_secondary_results.stdout is defined - name: "Oracle Data Guard - Setup Secondary: Create lsnrctl_started_sec.txt" become: true become_user: "oracle" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/lsnrctl_started_sec.txt state: touch mode: '0755' when: - node_tier == "oracle" - current_host == ora_secondary - lsnrctl_start_secondary_results.rc == 0 # Restart the Listener on Secondary node when the node_tier is Oracle-ASM. - name: "Oracle Data Guard - ASM - Setup Secondary: Stop lsnrctl on Secondary" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: lsnrctl stop register: lsnrctl_stop_secondary_results failed_when: lsnrctl_stop_secondary_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/lsnrctl_stopped_sec.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle-asm" - current_host == ora_secondary - name: "Oracle Data Guard - ASM - Setup Secondary: Create lsnrctl_stopped_sec.txt" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/lsnrctl_stopped_sec.txt state: touch mode: '0755' when: - node_tier == "oracle-asm" - current_host == ora_secondary - lsnrctl_stop_secondary_results.rc == 0 - name: "Oracle Data Guard - ASM - Setup Secondary: Start lsnrctl on Secondary" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: lsnrctl start register: lsnrctl_asm_start_secondary_results failed_when: lsnrctl_asm_start_secondary_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/lsnrctl_asm_started_sec.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle-asm" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: restart lsnrctl on Secondary (Debug)" ansible.builtin.debug: var: lsnrctl_asm_start_secondary_results.stdout_lines verbosity: 2 - name: "Oracle Data Guard - Setup Secondary: restart lsnrctl on Secondary (save output)" ansible.builtin.copy: dest: /etc/sap_deployment_automation/lsnrctl_start_primary.log content: "{{ lsnrctl_asm_start_secondary_results.stdout }}" mode: '0777' when: lsnrctl_asm_start_secondary_results.stdout is defined - name: "Oracle Data Guard - Setup Secondary: Create lsnrctl_started_sec.txt" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/lsnrctl_asm_started_sec.txt state: touch mode: '0755' when: - node_tier == "oracle-asm" - current_host == ora_secondary - lsnrctl_asm_start_secondary_results.rc == 0 - name: "Oracle Data Guard - ASM Listener Starting: Sleep for 40 seconds and continue with play" ansible.builtin.wait_for: timeout: 40 # Restart the Listener on Secondary node when the node_tier is Oracle-ASM. - name: "Oracle Data Guard - ASM - Setup Secondary: Stop lsnrctl on Secondary" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: lsnrctl stop register: lsnrctl_stop_secondary_results failed_when: lsnrctl_stop_secondary_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/lsnrctl_stopped_sec.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle-asm" - current_host == ora_secondary - name: "Oracle Data Guard - ASM - Setup Secondary: Create lsnrctl_stopped_sec.txt" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/lsnrctl_stopped_sec.txt state: touch mode: '0755' when: - node_tier == "oracle-asm" - current_host == ora_secondary - lsnrctl_stop_secondary_results.rc == 0 - name: "Oracle Data Guard - ASM - Setup Secondary: Start lsnrctl on Secondary" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: lsnrctl start register: lsnrctl_asm_start_secondary_results failed_when: lsnrctl_asm_start_secondary_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/lsnrctl_asm_started_sec.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle-asm" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: restart lsnrctl on Secondary (Debug)" ansible.builtin.debug: var: lsnrctl_asm_start_secondary_results.stdout_lines verbosity: 2 - name: "Oracle Data Guard - Setup Secondary: restart lsnrctl on Secondary (save output)" ansible.builtin.copy: dest: /etc/sap_deployment_automation/lsnrctl_start_primary.log content: "{{ lsnrctl_asm_start_secondary_results.stdout }}" mode: '0777' when: lsnrctl_asm_start_secondary_results.stdout is defined - name: "Oracle Data Guard - Setup Secondary: Create lsnrctl_started_sec.txt" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/lsnrctl_asm_started_sec.txt state: touch mode: '0755' when: - node_tier == "oracle-asm" - current_host == ora_secondary - lsnrctl_asm_start_secondary_results.rc == 0 - name: "Oracle Data Guard - ASM Listener Starting: Sleep for 40 seconds and continue with play" ansible.builtin.wait_for: timeout: 40 - name: "Oracle Data Guard - Setup Secondary: Startup secondary DB using pfile" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @secondarystartup.sql | tee /etc/sap_deployment_automation/dgscripts/secondary_startup.log register: secondary_startup_results failed_when: secondary_startup_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/secondary_startup.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: startup DG Broker on Secondary (Debug)" ansible.builtin.debug: var: secondary_startup_results.stdout_lines verbosity: 2 when: current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: startup DG Broker on Secondary (save output)" ansible.builtin.copy: dest: /etc/sap_deployment_automation/dgscripts/secondary_startup.log content: "{{ secondary_startup_results.stdout }}" mode: '0777' when: secondary_startup_results.stdout is defined - name: "Oracle Data Guard - Setup Secondary: Create secondary_startup.txt" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/secondary_startup.txt state: touch mode: '0755' when: - current_host == ora_secondary - secondary_startup_results.rc == 0 - name: "Oracle Data Guard - Setup Secondary: Duplicate Secondary DB from Primary DB using RMAN" block: - name: "Oracle Data Guard - Setup Secondary: Duplicate Secondary DB from Primary DB using RMAN" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: rman TARGET sys/{{ main_password }}@{{ db_sid | upper }} AUXILIARY sys/{{ main_password }}@{{ db_sid | upper }}_STDBY @rman-restore.rman register: rman_results failed_when: rman_results.rc > 1 args: creates: /etc/sap_deployment_automation/dgscripts/restore_completed.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh rescue: ##################################################################### # # If this fails remove the contents from the directories and try again # ##################################################################### - name: "Oracle Data Guard - Setup Secondary: Duplicate Secondary DB from Primary DB using RMAN (Debug)" ansible.builtin.debug: var: rman_results.stdout_lines - name: "Oracle Data Guard - Setup Secondary: Shutdown secondary DB" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: sqlplus / as sysdba @shutdownsecondary.sql register: secondary_shutdown_results failed_when: secondary_shutdown_results.rc > 0 args: chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh - name: "Oracle Data Guard - Setup Secondary: Remove files" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.file: path: "{{ item.directory_to_empty }}" state: absent loop: - { directory_to_empty: '/oracle/{{ db_sid | upper }}/sapdata1' } - { directory_to_empty: '/oracle/{{ db_sid | upper }}/sapdata2' } - { directory_to_empty: '/oracle/{{ db_sid | upper }}/sapdata3' } - { directory_to_empty: '/oracle/{{ db_sid | upper }}/sapdata4' } - { directory_to_empty: '/oracle/{{ db_sid | upper }}/origlogA' } - { directory_to_empty: '/oracle/{{ db_sid | upper }}/origlogB' } - { directory_to_empty: '/oracle/{{ db_sid | upper }}/mirrlogA' } - { directory_to_empty: '/oracle/{{ db_sid | upper }}/mirrlogB' } tags: - skip_ansible_lint - name: "Oracle Data Guard - Setup Secondary: Startup secondary DB" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: sqlplus / as sysdba @secondarystartup.sql register: secondary_startup_results2 args: chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh - name: "Oracle Data Guard - Setup Secondary: startup DG Broker on Secondary (Debug)" ansible.builtin.debug: var: secondary_startup_results2.stdout_lines verbosity: 2 when: current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: startup DG Broker on Secondary (save output)" ansible.builtin.copy: dest: /etc/sap_deployment_automation/dgscripts/secondary_startup2.log content: "{{ secondary_startup_results2.stdout }}" mode: '0777' when: secondary_startup_results.stdout2 is defined - name: "Oracle Data Guard - Setup Secondary: Duplicate Secondary DB from Primary DB using RMAN" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: rman TARGET sys/{{ main_password }}@{{ db_sid | upper }} AUXILIARY sys/{{ main_password }}@{{ db_sid | upper }}_STDBY @rman-restore.rman register: rman_results failed_when: rman_results.rc > 1 args: chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Duplicate Secondary DB from Primary DB using RMAN (Debug)" ansible.builtin.debug: var: rman_results.stdout_lines verbosity: 2 - name: "Oracle Data Guard - Setup Secondary: Duplicate Secondary DB from Primary DB using RMAN (save output)" ansible.builtin.copy: dest: /etc/sap_deployment_automation/dgscripts/restore.log content: "{{ rman_results.stdout }}" mode: '0777' when: rman_results.stdout is defined - name: "Oracle Data Guard - Setup Secondary: Create flag for post-processing on Primary DB" become: true become_user: "root" ansible.builtin.file: path: /usr/sap/install/downloads/{{ db_sid | upper }}/restore_completed.txt state: touch mode: '0755' owner: oracle group: oinstall when: rman_results.rc == 0 # Work around for Oracle Bug Duplicate for Standby fails with RMAN-05535 even when LOG_FILE_NAME_CONVERT is set (Doc ID 2756315.1) # Collecting the required regolog file and renaming and creating in the correct directories as Primary. # Renaming the Brokenredo files to the correct names and creating the required directories. # RUn the redolog clear to physical creation of files. - name: "Oracle Data Guard - Oracle Secondary Redo log rename using template" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.template: backup: true src: standbyredolog.j2 dest: "/etc/sap_deployment_automation/dgscripts/standbyredolog.sql" mode: '0644' force: true when: node_tier == "oracle" - name: "Oracle Data Guard - Setup Secondary: Rename the redolog files afer RMAN Restore" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @standbyredolog.sql | tee /etc/sap_deployment_automation/dgscripts/standbyredolog.log register: redo_rename_results failed_when: redo_rename_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/redo_rename.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Create redo_rename.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/redo_rename.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle" - redo_rename_results.rc == 0 - name: "Oracle Data Guard - Setup Secondary: Create restore_completed.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/restore_completed.txt state: touch mode: '0755' owner: oracle group: oinstall when: rman_results.rc == 0 # Create the oraarch and spfile parameter folder on ASM for recovery - name: "Oracle Data Guard - ASM - Create oraarch and parameter folders" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | /oracle/GRID/{{ ora_version }}/bin/asmcmd --privilege sysdba mkdir +ARCH/{{ db_sid | upper }}_STDBY/oraarch /oracle/GRID/{{ ora_version }}/bin/asmcmd --privilege sysdba mkdir +DATA/{{ db_sid | upper }}_STDBY/PARAMETERFILE register: asm_oraarch_created_results failed_when: asm_oraarch_created_results.rc > 0 args: executable: /bin/csh creates: /etc/sap_deployment_automation/dgscripts/asm_oraarch_created.txt when: - node_tier == "oracle-asm" - current_host == ora_secondary - name: "Oracle Data Guard - ASM - Setup Secondary: Create asm_oraarch_created.txt" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/asm_oraarch_created.txt state: touch mode: '0755' when: - node_tier == "oracle-asm" - current_host == ora_secondary - asm_oraarch_created_results.rc == 0 # --------------------------------------------------------------------------------------------------------------- # Create the SPFILE from PFILE on Standby and Start the Standby Database using PFILE for non-ASM. - name: "Oracle Data Guard - Setup Secondary: Create spfile on non-ASM" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @createspfile.sql | tee /etc/sap_deployment_automation/dgscripts/create_spfile.log register: create_spfile_results failed_when: create_spfile_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/spfile_created.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Create spfile_created.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/spfile_created.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle" - create_spfile_results.rc == 0 - current_host == ora_secondary # Backup the PFILE and Create new PFILE refering to SPFILE. - name: "Oracle Data Guard - Setup Secondary: Backup and remove pfile" become: true become_user: "oracle" ansible.builtin.shell: | set -o pipefail mv init{{ db_sid | upper}}.ora init{{ db_sid | upper}}.ora_backup_after_restore register: backup_pfile_results failed_when: backup_pfile_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/pfile_backup_created.txt chdir: /oracle/{{ db_sid |upper }}/{{ ora_release}}/dbs executable: /bin/csh when: - node_tier == "oracle" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Create pfile_backup_created.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/pfile_backup_created.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle" - backup_pfile_results.rc == 0 - current_host == ora_secondary - name: "Oracle Data Guard - Update the Local_Listener Value on secondary" become: true become_user: "oracle" ansible.builtin.shell: sqlplus / as sysdba @listenerupdate.sql register: local_listener_on_secondary_results failed_when: local_listener_on_secondary_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/local_listener_on_secondary.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - current_host == ora_secondary # Stop the Secondary Database. - name: "Oracle Data Guard - Setup Secondary: Stop secondary DB for spfile" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @shutdownsecondary.sql | tee /etc/sap_deployment_automation/dgscripts/ora_secondary_shutdown.log register: secondary_shutdown_results failed_when: secondary_shutdown_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/ora_secondary_shutdown.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Create ora_secondary_shutdown.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/ora_secondary_shutdown.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle" - secondary_shutdown_results.rc == 0 - current_host == ora_secondary # # Create new PFILE with SPFILE Details for NON-ASM. - name: "Oracle Data Guard - Preparation: create createspfile" become: true become_user: "oracle" ansible.builtin.blockinfile: create: true path: /oracle/{{ db_sid |upper }}/{{ ora_release}}/dbs/init{{ db_sid | upper }}.ora marker_begin: "-- BEGIN" marker_end: "-- END" block: | spfile='/oracle/{{ db_sid |upper }}/{{ ora_release}}/dbs/spfile{{ db_sid | upper }}.ora' mode: '0755' when: - node_tier == "oracle" - current_host == ora_secondary # Start the Secondary Database with the new SPFILE; - name: "Oracle Data Guard - Setup Secondary: Start secondary DB with spfile" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @orasecondarystartup.sql | tee /etc/sap_deployment_automation/dgscripts/ora_secondary_startup_spfile.log register: ora_secondary_startup_spfile_results failed_when: ora_secondary_startup_spfile_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/ora_secondary_startup_spfile.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Create ora_secondary_startup_spfile.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/ora_secondary_startup_spfile.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle" - ora_secondary_startup_spfile_results.rc == 0 - current_host == ora_secondary # --------------------------------------------------------------------------------------------------------------- # Create the SPFILE from PFILE on Standby and Start the Standby Database using PFILE. - name: "Oracle Data Guard - Setup Secondary: Create spfile on ASM" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @createspfilesecondary.sql | tee /etc/sap_deployment_automation/dgscripts/create_spfile.log register: create_spfile_results failed_when: create_spfile_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/spfile_created.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle-asm" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Create spfile_created.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/spfile_created.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle-asm" - create_spfile_results.rc == 0 - current_host == ora_secondary # Backup the PFILE and Create new PFILE refering to SPFILE. - name: "Oracle Data Guard - Setup Secondary: Backup and remove pfile" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail mv init{{ db_sid | upper}}.ora init{{ db_sid | upper}}.ora_backup_after_restore register: backup_pfile_results failed_when: backup_pfile_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/pfile_backup_created.txt chdir: /oracle/{{ db_sid |upper }}/{{ ora_release}}/dbs executable: /bin/csh when: - node_tier == "oracle-asm" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Create pfile_backup_created.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/pfile_backup_created.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle-asm" - backup_pfile_results.rc == 0 - current_host == ora_secondary # Stop the Secondary Database. - name: "Oracle Data Guard - Setup Secondary: Stop secondary DB for spfile" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @shutdownsecondary.sql | tee /etc/sap_deployment_automation/dgscripts/asm_secondary_shutdown.log register: secondary_shutdown_results failed_when: secondary_shutdown_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/asm_secondary_shutdown.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle-asm" - current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: Create asm_secondary_shutdown.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/asm_secondary_shutdown.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle-asm" - secondary_shutdown_results.rc == 0 - current_host == ora_secondary # Create new PFILE with SPFILE Details for ASM. - name: "Oracle Data Guard for ASM - Preparation: create createspfile" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.blockinfile: create: true path: /oracle/{{ db_sid |upper }}/{{ ora_release}}/dbs/init{{ db_sid | upper }}.ora marker_begin: "-- BEGIN" marker_end: "-- END" block: | spfile='+DATA/{{ db_sid | upper }}_STDBY/PARAMETERFILE/spfile{{ db_sid | upper }}.ora' mode: '0755' when: - node_tier == "oracle-asm" - current_host == ora_secondary # Start the Secondary Database with the new SPFILE; - name: "Oracle Data Guard - Setup Secondary: Start secondary DB with spfile" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: | set -o pipefail sqlplus / as sysdba @asmsecondarystartup.sql | tee /etc/sap_deployment_automation/dgscripts/asm_secondary_startup_spfile.log register: asm_secondary_startup_spfile_results failed_when: asm_secondary_startup_spfile_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/asm_secondary_startup_spfile.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: - node_tier == "oracle-asm" - current_host == ora_secondary - name: "Oracle Data Guard - ASM - Setup Secondary: Create asm_secondary_startup_spfile.txt" become: true become_user: "root" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/asm_secondary_startup_spfile.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle-asm" - asm_secondary_startup_spfile_results.rc == 0 - current_host == ora_secondary - name: "Oracle Data Guard - ASM - Create local_listener_on_secondary on secondary" become: true become_user: root ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/local_listener_on_secondary.txt state: touch mode: '0755' owner: oracle group: oinstall when: - node_tier == "oracle-asm" - local_listener_on_secondary_results.rc == 0 - current_host == ora_secondary # Enable the DataGaurd Broker - name: "Oracle Data Guard - Setup Secondary: startup DG Broker on Secondary" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.shell: sqlplus / as sysdba @enabledgbroker.sql register: secondary_startup_results failed_when: secondary_startup_results.rc > 0 args: creates: /etc/sap_deployment_automation/dgscripts/enable_dg_broker.txt chdir: /etc/sap_deployment_automation/dgscripts executable: /bin/csh when: current_host == ora_secondary - name: "Oracle Data Guard - Setup Secondary: startup DG Broker on Secondary (Debug)" ansible.builtin.debug: var: secondary_startup_results.stdout_lines verbosity: 2 - name: "Oracle Data Guard - Setup Secondary: startup DG Broker on Secondary (save output)" ansible.builtin.copy: dest: /etc/sap_deployment_automation/dgscripts/secondary_startup.log content: "{{ secondary_startup_results.stdout }}" mode: '0777' when: secondary_startup_results.stdout is defined - name: "Oracle Data Guard - Setup Secondary: Create enable_dg_broker.txt" become: true become_user: "{{ oracle_user_name }}" ansible.builtin.file: path: /etc/sap_deployment_automation/dgscripts/enable_dg_broker.txt state: touch mode: '0755' when: - current_host == ora_secondary - secondary_startup_results.rc == 0 ... # /*---------------------------------------------------------------------------8 # | END | # +------------------------------------4--------------------------------------*/