From 65c80c1b7e98a81387387ae2fe7f1d3ca38f8246 Mon Sep 17 00:00:00 2001 From: Thorsten Bruhns Date: Sun, 6 Jun 2021 07:32:25 +0000 Subject: [PATCH 1/5] oradb-manage-statspack: new role for Statspack The new role could be used to install and configure Statspack jobs. The support is limited to CDB or nonCDB at the moment. --- roles/oradb-manage-statspack/README.md | 25 ++++ .../oradb-manage-statspack/defaults/main.yml | 21 +++ .../oradb-manage-statspack/files/spcreate.sh | 27 ++++ roles/oradb-manage-statspack/files/spdrop.sh | 11 ++ roles/oradb-manage-statspack/meta/main.yml | 2 + roles/oradb-manage-statspack/tasks/main.yml | 124 ++++++++++++++++++ 6 files changed, 210 insertions(+) create mode 100644 roles/oradb-manage-statspack/README.md create mode 100644 roles/oradb-manage-statspack/defaults/main.yml create mode 100644 roles/oradb-manage-statspack/files/spcreate.sh create mode 100644 roles/oradb-manage-statspack/files/spdrop.sh create mode 100644 roles/oradb-manage-statspack/meta/main.yml create mode 100644 roles/oradb-manage-statspack/tasks/main.yml diff --git a/roles/oradb-manage-statspack/README.md b/roles/oradb-manage-statspack/README.md new file mode 100644 index 000000000..4063159bb --- /dev/null +++ b/roles/oradb-manage-statspack/README.md @@ -0,0 +1,25 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Do not create the perfstat user before creating the statspack +inside the database. The detection of existing statspack installation +is based on the perfstat user. The installation will be skkipped when +user is existing. + + +Role Variables +-------------- + +Dependencies +------------ + + +Author Information +------------------ + +Thorsten Bruhns \ No newline at end of file diff --git a/roles/oradb-manage-statspack/defaults/main.yml b/roles/oradb-manage-statspack/defaults/main.yml new file mode 100644 index 000000000..000198509 --- /dev/null +++ b/roles/oradb-manage-statspack/defaults/main.yml @@ -0,0 +1,21 @@ +--- +# Global Defaults for Purge and Snapshot-Jobs. +# could be overwritten per dtabase with: +# oracle_databases: +# - oracle_db_name: test +# statspack: +# purgedays: 60 +purgedays: 35 +purgeinterval: "FREQ=daily;byhour=3;byminute=15;bysecond=0" +snapinterval: "FREQ=hourly;byminute=0;bysecond=0" +snaplevel: 7 + +db_user: system +db_password_cdb: "{% if dbpasswords is defined and dbpasswords[dbh.oracle_db_name] is defined and dbpasswords[dbh.oracle_db_name][db_user] is defined%}{{dbpasswords[dbh.oracle_db_name][db_user]}}{% else %}{{ default_dbpass}}{% endif%}" + +db_service_name: "{% if dbh is defined %} + {%- if dbh.oracle_db_unique_name is defined %}{{ dbh.oracle_db_unique_name }} + {%- elif dbh.oracle_db_instance_name is defined %}{{ dbh.oracle_db_instance_name }} + {%- else %}{{ dbh.oracle_db_name }} + {%- endif %} + {%- endif %}" diff --git a/roles/oradb-manage-statspack/files/spcreate.sh b/roles/oradb-manage-statspack/files/spcreate.sh new file mode 100644 index 000000000..89faeaeb3 --- /dev/null +++ b/roles/oradb-manage-statspack/files/spcreate.sh @@ -0,0 +1,27 @@ +#!/usr/bin/bash +cd $HOME + +${ORACLE_HOME}/bin/sqlplus -S -L /nolog < {{ dbh.statspack.snaplevel | default(snaplevel)}});" + logging_level: "runs" + repeat_interval: "{{ dbh.statspack.snapinterval | default(snapinterval) }}" + state: "present" + environment: + ORACLE_HOME: "{{ oracle_home_db}}" + ORACLE_SID: "{{ dbh.oracle_db_instance_name | default(dbh.oracle_db_unique_name | default(dbh.oracle_db_name)) }}" + with_items: + - "{{oracle_databases}}" + when: + - oracle_databases is defined + - dbh.statspack is defined + - dbh.statspack.state | default('present') == 'present' + become_user: "{{ oracle_user }}" + loop_control: + loop_var: dbh + label: "{{ dbh.oracle_db_name }}" + tags: spjob From 87051a0c2bfc052b6f6c9f7623c50ffc7bdee691 Mon Sep 17 00:00:00 2001 From: Thorsten Bruhns Date: Sun, 6 Jun 2021 18:17:41 +0000 Subject: [PATCH 2/5] oradb-manage-statspack: added Support for PDBs Refactoring of whole role with adding support for PDBs --- .../oradb-manage-statspack/defaults/main.yml | 5 + .../oradb-manage-statspack/files/spcreate.sh | 16 ++ roles/oradb-manage-statspack/files/spdrop.sh | 12 ++ roles/oradb-manage-statspack/tasks/main.yml | 154 +++++++++++++++++- 4 files changed, 185 insertions(+), 2 deletions(-) diff --git a/roles/oradb-manage-statspack/defaults/main.yml b/roles/oradb-manage-statspack/defaults/main.yml index 000198509..1168254e6 100644 --- a/roles/oradb-manage-statspack/defaults/main.yml +++ b/roles/oradb-manage-statspack/defaults/main.yml @@ -12,6 +12,11 @@ snaplevel: 7 db_user: system db_password_cdb: "{% if dbpasswords is defined and dbpasswords[dbh.oracle_db_name] is defined and dbpasswords[dbh.oracle_db_name][db_user] is defined%}{{dbpasswords[dbh.oracle_db_name][db_user]}}{% else %}{{ default_dbpass}}{% endif%}" +db_password_pdb: "{%- if dbpasswords is defined and dbpasswords[pdb.0.cdb] is defined and dbpasswords[pdb.0.cdb][db_user] is defined -%} + {{dbpasswords[pdb.0.cdb][db_user]}} + {%- else -%} + {{ default_dbpass}} + {%- endif -%}" db_service_name: "{% if dbh is defined %} {%- if dbh.oracle_db_unique_name is defined %}{{ dbh.oracle_db_unique_name }} diff --git a/roles/oradb-manage-statspack/files/spcreate.sh b/roles/oradb-manage-statspack/files/spcreate.sh index 89faeaeb3..374cc2125 100644 --- a/roles/oradb-manage-statspack/files/spcreate.sh +++ b/roles/oradb-manage-statspack/files/spcreate.sh @@ -1,6 +1,12 @@ #!/usr/bin/bash +set -euo pipefail + cd $HOME +env | grep ^ORACLE | sort + +PDB=${pdb_name:-"_"} + ${ORACLE_HOME}/bin/sqlplus -S -L /nolog < '_' then + execute immediate 'alter session set container = ${PDB}'; + end if; +end; +/ + @?/rdbms/admin/spcreate set echo on alter session set current_schema=perfstat; +PROMPT Fixup for idle Events (old stupid bug from Oracle...) -- Re-fill STATS\$IDLE_EVENT with latest idle events that Oracle regularly forgets to update. delete from perfstat.STATS\$IDLE_EVENT; insert into perfstat.STATS\$IDLE_EVENT select name from V\$EVENT_NAME where wait_class='Idle'; commit; +PROMPT Create custom index for selecting sql_id from STATS\$SQLTEXT create index perfstat.STATS\$SQLTEXT_UK1 on STATS\$SQLTEXT(sql_id, piece); exit diff --git a/roles/oradb-manage-statspack/files/spdrop.sh b/roles/oradb-manage-statspack/files/spdrop.sh index 06db06b02..f09a7b7b3 100644 --- a/roles/oradb-manage-statspack/files/spdrop.sh +++ b/roles/oradb-manage-statspack/files/spdrop.sh @@ -1,10 +1,22 @@ #!/usr/bin/bash +set -euo pipefail + cd $HOME +env | grep ^ORACLE | sort + +PDB=${pdb_name:-"_"} + ${ORACLE_HOME}/bin/sqlplus -S -L /nolog < '_' then + execute immediate 'alter session set container = ${PDB}'; + end if; +end; +/ @?/rdbms/admin/spdrop exit diff --git a/roles/oradb-manage-statspack/tasks/main.yml b/roles/oradb-manage-statspack/tasks/main.yml index 850728266..2e86e0185 100644 --- a/roles/oradb-manage-statspack/tasks/main.yml +++ b/roles/oradb-manage-statspack/tasks/main.yml @@ -27,6 +27,7 @@ tags: - spdrop + - spcdb - block: - name: oradb-manage-statspack | Create Statspack Schema (existing user is ignored) @@ -63,6 +64,7 @@ - item.stdout_lines is defined tags: - spcreate + - spcdb - name: oradb-manage-statspack | Create/Modify Purge Job oracle_job: @@ -92,7 +94,9 @@ loop_control: loop_var: dbh label: "{{ dbh.oracle_db_name }}" - tags: spjob + tags: + - spjob + - spcdb - name: oradb-manage-statspack | Create/Modify Snapshot Job oracle_job: @@ -121,4 +125,150 @@ loop_control: loop_var: dbh label: "{{ dbh.oracle_db_name }}" - tags: spjob + tags: + - spjob + - spcdb + +- block: + - name: oradb-manage-statspack | Drop Statspack Schema (PDB) + script: spdrop.sh + environment: + ORACLE_HOME: "{{ oracle_home_db }}" + ORACLE_SID: "{{ oracle_db_instance_name }}" + pdb_name: "{{ pdb.0.pdb_name }}" + loop: + - "{{ oracle_pdbs |flatten(levels=1) }}" + loop_control: + loop_var: pdb + label: "{{ pdb.0.cdb | default('')}} {{ pdb.0.pdb_name | default('') }} {{ oracle_db_instance_name | default('') }}" + register: statspackdropcmd + become: yes + become_user: "{{ oracle_user }}" + failed_when: + - statspackdropcmd.rc != 0 + - '"ORA-01920:" not in statspackdropcmd.stdout' # ORA-01920: user name 'PERFSTAT' conflicts with another user + when: + - oracle_pdbs is defined + - pdb.0.statspack is defined + - pdb.0.statspack.state | default('present') == 'absent' + + - debug: msg="{{ item.stdout_lines }}" + with_items: + - "{{ statspackdropcmd.results }}" + loop_control: + label: "" + when: + - statspackdropcmd is defined + - item.stdout_lines is defined + become: yes + become_user: "{{ oracle_user }}" + tags: + - spdrop + - sppdb + +- block: + - name: oradb-manage-statspack | Create Statspack Schema in PDBs (existing user is ignored) + script: spcreate.sh + environment: + ORACLE_HOME: "{{ oracle_home_db }}" + ORACLE_SID: "{{ oracle_db_instance_name }}" + perfstat_password: perfstat + temporary_tablespace: "{{ pdb.statspack.tablespace_temp | default('temp')}}" + default_tablespace: "{{ pdb.statspack.tablespace | default('sysaux')}}" + purgedates: "{{ pdb.statspack.purgedays | default(35)}}" + snaplevel: "{{ pdb.statspack.snaplevel | default(7) }}" + pdb_name: "{{ pdb.0.pdb_name }}" + loop: + - "{{ oracle_pdbs |flatten(levels=1) }}" + loop_control: + loop_var: pdb + label: "{{ pdb.0.cdb | default('')}} {{ pdb.0.pdb_name | default('') }} {{ oracle_db_instance_name | default('') }}" + register: statspackcmd + become: yes + become_user: "{{ oracle_user }}" + failed_when: + - statspackcmd.rc != 0 + - '"ORA-01920:" not in statspackcmd.stdout' # ORA-01920: user name 'PERFSTAT' conflicts with another user + when: + - oracle_pdbs is defined + - pdb.0.statspack is defined + - pdb.0.statspack.state | default('present') == 'present' + + - debug: msg="{{ item.stdout_lines }}" + with_items: + - "{{ statspackcmd.results }}" + loop_control: + label: "" + when: + - statspackcmd is defined + - item.stdout_lines is defined + become: yes + become_user: "{{ oracle_user }}" + tags: + - spcreate + - sppdb + +- name: oradb-manage-statspack | Create/Modify Purge Job (PDB) + oracle_job: + hostname: "{{ ansible_hostname }}" + service_name: "{{ pdb.0.pdb_name }}" + port: "{{ pdb.listener_port | default(listener_port | default(1521)) }}" + user: "{{ db_user }}" + password: "{{ db_password_pdb }}" + job_name: "PERFSTAT.PURGE" + comments: "Statspack Purge-Job" + job_type: "plsql_block" + job_action: "PERFSTAT.STATSPACK.PURGE({{ pdb.statspack.purgedays | default(purgedays)}});" + logging_level: "runs" + repeat_interval: "{{ pdb.0.statspack.purgeinterval | default(purgeinterval) }}" + state: "present" + environment: + ORACLE_HOME: "{{ oracle_home_db }}" + loop: + - "{{ oracle_pdbs |flatten(levels=1) }}" + loop_control: + loop_var: pdb + label: "{{ pdb.0.cdb | default('') }} {{ pdb.0.pdb_name | default('') }}" + when: + - oracle_pdbs is defined + - pdb.0.cdb is defined + - pdb.0.pdb_name is defined + - pdb.0.statspack is defined + - pdb.0.statspack.state | default('present') == 'present' + become_user: "{{ oracle_user }}" + tags: + - spjob + - sppdb + +- name: oradb-manage-statspack | Create/Modify Snapshot Job (PDB) + oracle_job: + hostname: "{{ ansible_hostname }}" + service_name: "{{ pdb.0.pdb_name }}" + port: "{{ pdb.listener_port | default(listener_port | default(1521)) }}" + user: "{{ db_user }}" + password: "{{ db_password_pdb }}" + job_name: "PERFSTAT.SNAPSHOT" + comments: "Statspack Snapshot-Job" + job_type: "plsql_block" + job_action: "PERFSTAT.STATSPACK.SNAP(i_snap_level => {{ pdb.0.statspack.snaplevel | default(snaplevel)}});" + logging_level: "runs" + repeat_interval: "{{ pdb.0.statspack.snapinterval | default(snapinterval) }}" + state: "present" + environment: + ORACLE_HOME: "{{ oracle_home_db }}" + loop: + - "{{ oracle_pdbs |flatten(levels=1) }}" + loop_control: + loop_var: pdb + label: "{{ pdb.0.cdb | default('') }} {{ pdb.0.pdb_name | default('') }}" + when: + - oracle_pdbs is defined + - pdb.0.cdb is defined + - pdb.0.pdb_name is defined + - pdb.0.statspack is defined + - pdb.0.statspack.state | default('present') == 'present' + become: yes + become_user: "{{ oracle_user }}" + tags: + - spjob + - sppdb \ No newline at end of file From 00045bd37e783fd04e4f88ee3591486e42b83284 Mon Sep 17 00:00:00 2001 From: Thorsten Bruhns Date: Sun, 6 Jun 2021 18:23:58 +0000 Subject: [PATCH 3/5] orasw-meta: added new defaults for Statspack The added defaults are used for future code refactoring. --- roles/orasw-meta/defaults/main.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/roles/orasw-meta/defaults/main.yml b/roles/orasw-meta/defaults/main.yml index e05385b8d..c9d41e7b6 100644 --- a/roles/orasw-meta/defaults/main.yml +++ b/roles/orasw-meta/defaults/main.yml @@ -172,6 +172,12 @@ oracle_home_db: "{%- if dbh is defined -%} {%- else -%} {{oracle_base}}/{{db_homes_config[dbh.home]['version']}}/{{db_homes_config[dbh.home]['home']}} {%- endif -%} + {%- elif pdb.0.home is defined %} + {%- if db_homes_config[pdb.0.home]['oracle_home'] is defined -%} + {{db_homes_config[pdb.0.home]['oracle_home']}} + {%- else -%} + {{oracle_base}}/{{db_homes_config[pdb.0.home]['version']}}/{{db_homes_config[pdb.0.home]['home']}} + {%- endif -%} {%- elif item.0 is defined -%} {%- if db_homes_config[item.0.home]['oracle_home'] is defined -%} {{db_homes_config[item[0].home]['oracle_home']}} @@ -214,6 +220,14 @@ db_version: "{%- if dbh is defined and db_homes_config[dbh.home] is defined -%} {%- endif -%} {%- endif -%}" +oracle_db_instance_name: "{%- if pdb.0.cdb is defined -%} + {%- for db in oracle_databases -%} + {%- if db.oracle_db_name == pdb.0.cdb -%} + {{ db.oracle_db_instance_name | default(db.oracle_db_unique_name | default(db.oracle_db_name)) }} + {%- endif -%} + {%- endfor -%} + {%- endif -%}" + oracle_home_gi: "{% if configure_cluster %}{{ oracle_home_gi_cl }}{% else %}{{ oracle_home_gi_so }}{% endif %}" oracle_home_gi_cl: "/u01/app/{{ oracle_install_version_gi }}/grid" # ORACLE_HOME for Grid Infrastructure (Clustered) oracle_home_gi_so: "{{ oracle_base }}/{{ oracle_install_version_gi }}/grid" # ORACLE_HOME for Grid Infrastructure (Stand Alone) From 17f67ecbd12bea01c1e3f924c47f88637e477533 Mon Sep 17 00:00:00 2001 From: Thorsten Bruhns Date: Sat, 11 Sep 2021 10:07:04 +0000 Subject: [PATCH 4/5] oradb-manage-statspack: ansible-lint --- .../oradb-manage-statspack/defaults/main.yml | 2 +- roles/oradb-manage-statspack/meta/main.yml | 3 +- roles/oradb-manage-statspack/tasks/main.yml | 280 +++++++++--------- 3 files changed, 143 insertions(+), 142 deletions(-) diff --git a/roles/oradb-manage-statspack/defaults/main.yml b/roles/oradb-manage-statspack/defaults/main.yml index 1168254e6..5c7f3336e 100644 --- a/roles/oradb-manage-statspack/defaults/main.yml +++ b/roles/oradb-manage-statspack/defaults/main.yml @@ -11,7 +11,7 @@ snapinterval: "FREQ=hourly;byminute=0;bysecond=0" snaplevel: 7 db_user: system -db_password_cdb: "{% if dbpasswords is defined and dbpasswords[dbh.oracle_db_name] is defined and dbpasswords[dbh.oracle_db_name][db_user] is defined%}{{dbpasswords[dbh.oracle_db_name][db_user]}}{% else %}{{ default_dbpass}}{% endif%}" +db_password_cdb: "{% if dbpasswords is defined and dbpasswords[dbh.oracle_db_name] is defined and dbpasswords[dbh.oracle_db_name][db_user] is defined%}{{dbpasswords[dbh.oracle_db_name][db_user]}}{% else %}{{ default_dbpass}}{% endif%}" # noqa yaml db_password_pdb: "{%- if dbpasswords is defined and dbpasswords[pdb.0.cdb] is defined and dbpasswords[pdb.0.cdb][db_user] is defined -%} {{dbpasswords[pdb.0.cdb][db_user]}} {%- else -%} diff --git a/roles/oradb-manage-statspack/meta/main.yml b/roles/oradb-manage-statspack/meta/main.yml index 20862b632..30ea1b718 100644 --- a/roles/oradb-manage-statspack/meta/main.yml +++ b/roles/oradb-manage-statspack/meta/main.yml @@ -1,2 +1,3 @@ +--- dependencies: - - { role: orasw-meta } + - role: orasw-meta diff --git a/roles/oradb-manage-statspack/tasks/main.yml b/roles/oradb-manage-statspack/tasks/main.yml index 2e86e0185..28a37ba8c 100644 --- a/roles/oradb-manage-statspack/tasks/main.yml +++ b/roles/oradb-manage-statspack/tasks/main.yml @@ -1,67 +1,67 @@ --- - block: - - name: oradb-manage-statspack | Drop Statspack Schema - script: spdrop.sh - environment: - ORACLE_HOME: "{{ oracle_home_db}}" - ORACLE_SID: "{{ dbh.oracle_db_instance_name | default(dbh.oracle_db_unique_name | default(dbh.oracle_db_name)) }}" - with_items: "{{ oracle_databases }}" - loop_control: - loop_var: dbh - label: "{{ dbh.oracle_db_name }}" - register: statspackdropcmd - become: yes - become_user: "{{ oracle_user }}" - when: - - dbh.statspack is defined - - dbh.statspack.state | default('present') == 'absent' + - name: oradb-manage-statspack | Drop Statspack Schema + script: spdrop.sh + environment: + ORACLE_HOME: "{{ oracle_home_db }}" + ORACLE_SID: "{{ dbh.oracle_db_instance_name | default(dbh.oracle_db_unique_name | default(dbh.oracle_db_name)) }}" + with_items: "{{ oracle_databases }}" + loop_control: + loop_var: dbh + label: "{{ dbh.oracle_db_name }}" + register: statspackdropcmd + become: true + become_user: "{{ oracle_user }}" + when: + - dbh.statspack is defined + - dbh.statspack.state | default('present') == 'absent' - - debug: msg="{{ item.stdout_lines }}" - with_items: - - "{{ statspackdropcmd.results }}" - loop_control: - label: "" - when: - - statspackdropcmd is defined - - item.stdout_lines is defined + - debug: msg="{{ item.stdout_lines }}" # noqa unnamed-task + with_items: + - "{{ statspackdropcmd.results }}" + loop_control: + label: "" + when: + - statspackdropcmd is defined + - item.stdout_lines is defined tags: - spdrop - spcdb - block: - - name: oradb-manage-statspack | Create Statspack Schema (existing user is ignored) - script: spcreate.sh - environment: - ORACLE_HOME: "{{ oracle_home_db}}" - ORACLE_SID: "{{ dbh.oracle_db_instance_name | default(dbh.oracle_db_unique_name | default(dbh.oracle_db_name)) }}" - perfstat_password: perfstat - temporary_tablespace: "{{ dbh.statspack.tablespace_temp | default('temp')}}" - default_tablespace: "{{ dbh.statspack.tablespace | default('sysaux')}}" - purgedates: "{{ dbh.statspack.purgedays | default(35)}}" - snaplevel: "{{ dbh.statspack.snaplevel | default(7) }}" - with_items: "{{ oracle_databases }}" - loop_control: - loop_var: dbh - label: "{{ dbh.oracle_db_name }}" - register: statspackcmd - become: yes - become_user: "{{ oracle_user }}" - failed_when: - - statspackcmd.rc != 0 - - '"ORA-01920:" not in statspackcmd.stdout' # ORA-01920: user name 'PERFSTAT' conflicts with another user - when: - - dbh.statspack is defined - - dbh.statspack.state | default('present') == 'present' + - name: oradb-manage-statspack | Create Statspack Schema (existing user is ignored) + script: spcreate.sh + environment: + ORACLE_HOME: "{{ oracle_home_db }}" + ORACLE_SID: "{{ dbh.oracle_db_instance_name | default(dbh.oracle_db_unique_name | default(dbh.oracle_db_name)) }}" + perfstat_password: perfstat + temporary_tablespace: "{{ dbh.statspack.tablespace_temp | default('temp') }}" + default_tablespace: "{{ dbh.statspack.tablespace | default('sysaux') }}" + purgedates: "{{ dbh.statspack.purgedays | default(35) }}" + snaplevel: "{{ dbh.statspack.snaplevel | default(7) }}" + with_items: "{{ oracle_databases }}" + loop_control: + loop_var: dbh + label: "{{ dbh.oracle_db_name }}" + register: statspackcmd + become: true + become_user: "{{ oracle_user }}" + failed_when: + - statspackcmd.rc != 0 + - '"ORA-01920:" not in statspackcmd.stdout' # ORA-01920: user name 'PERFSTAT' conflicts with another user + when: + - dbh.statspack is defined + - dbh.statspack.state | default('present') == 'present' - - debug: msg="{{ item.stdout_lines }}" - with_items: - - "{{ statspackcmd.results }}" - loop_control: - label: "" - when: - - statspackcmd is defined - - item.stdout_lines is defined + - debug: msg="{{ item.stdout_lines }}" # noqa unnamed-task + with_items: + - "{{ statspackcmd.results }}" + loop_control: + label: "" + when: + - statspackcmd is defined + - item.stdout_lines is defined tags: - spcreate - spcdb @@ -76,25 +76,25 @@ job_name: "PERFSTAT.PURGE" comments: "Statspack Purge-Job" job_type: "plsql_block" - job_action: "PERFSTAT.STATSPACK.PURGE({{ dbh.statspack.purgedays | default(purgedays)}});" + job_action: "PERFSTAT.STATSPACK.PURGE({{ dbh.statspack.purgedays | default(purgedays) }});" logging_level: "runs" repeat_interval: "{{ dbh.statspack.purgeinterval | default(purgeinterval) }}" state: "present" environment: - ORACLE_HOME: "{{ oracle_home_db}}" + ORACLE_HOME: "{{ oracle_home_db }}" ORACLE_SID: "{{ dbh.oracle_db_instance_name | default(dbh.oracle_db_unique_name | default(dbh.oracle_db_name)) }}" with_items: - - "{{oracle_databases}}" + - "{{ oracle_databases }}" when: - oracle_databases is defined - dbh.statspack is defined - dbh.statspack.state | default('present') == 'present' become_user: "{{ oracle_user }}" loop_control: - loop_var: dbh - label: "{{ dbh.oracle_db_name }}" - tags: + loop_var: dbh + label: "{{ dbh.oracle_db_name }}" + tags: - spjob - spcdb @@ -108,101 +108,101 @@ job_name: "PERFSTAT.SNAPSHOT" comments: "Statspack Snapshot-Job" job_type: "plsql_block" - job_action: "PERFSTAT.STATSPACK.SNAP(i_snap_level => {{ dbh.statspack.snaplevel | default(snaplevel)}});" + job_action: "PERFSTAT.STATSPACK.SNAP(i_snap_level => {{ dbh.statspack.snaplevel | default(snaplevel) }});" logging_level: "runs" repeat_interval: "{{ dbh.statspack.snapinterval | default(snapinterval) }}" state: "present" environment: - ORACLE_HOME: "{{ oracle_home_db}}" + ORACLE_HOME: "{{ oracle_home_db }}" ORACLE_SID: "{{ dbh.oracle_db_instance_name | default(dbh.oracle_db_unique_name | default(dbh.oracle_db_name)) }}" with_items: - - "{{oracle_databases}}" + - "{{ oracle_databases }}" when: - oracle_databases is defined - dbh.statspack is defined - dbh.statspack.state | default('present') == 'present' become_user: "{{ oracle_user }}" loop_control: - loop_var: dbh - label: "{{ dbh.oracle_db_name }}" - tags: + loop_var: dbh + label: "{{ dbh.oracle_db_name }}" + tags: - spjob - spcdb - block: - - name: oradb-manage-statspack | Drop Statspack Schema (PDB) - script: spdrop.sh - environment: - ORACLE_HOME: "{{ oracle_home_db }}" - ORACLE_SID: "{{ oracle_db_instance_name }}" - pdb_name: "{{ pdb.0.pdb_name }}" - loop: - - "{{ oracle_pdbs |flatten(levels=1) }}" - loop_control: - loop_var: pdb - label: "{{ pdb.0.cdb | default('')}} {{ pdb.0.pdb_name | default('') }} {{ oracle_db_instance_name | default('') }}" - register: statspackdropcmd - become: yes - become_user: "{{ oracle_user }}" - failed_when: - - statspackdropcmd.rc != 0 - - '"ORA-01920:" not in statspackdropcmd.stdout' # ORA-01920: user name 'PERFSTAT' conflicts with another user - when: - - oracle_pdbs is defined - - pdb.0.statspack is defined - - pdb.0.statspack.state | default('present') == 'absent' + - name: oradb-manage-statspack | Drop Statspack Schema (PDB) + script: spdrop.sh + environment: + ORACLE_HOME: "{{ oracle_home_db }}" + ORACLE_SID: "{{ oracle_db_instance_name }}" + pdb_name: "{{ pdb.0.pdb_name }}" + loop: + - "{{ oracle_pdbs |flatten(levels=1) }}" + loop_control: + loop_var: pdb + label: "{{ pdb.0.cdb | default('') }} {{ pdb.0.pdb_name | default('') }} {{ oracle_db_instance_name | default('') }}" + register: statspackdropcmd + become: true + become_user: "{{ oracle_user }}" + failed_when: + - statspackdropcmd.rc != 0 + - '"ORA-01920:" not in statspackdropcmd.stdout' # ORA-01920: user name 'PERFSTAT' conflicts with another user + when: + - oracle_pdbs is defined + - pdb.0.statspack is defined + - pdb.0.statspack.state | default('present') == 'absent' - - debug: msg="{{ item.stdout_lines }}" - with_items: - - "{{ statspackdropcmd.results }}" - loop_control: - label: "" - when: - - statspackdropcmd is defined - - item.stdout_lines is defined - become: yes + - debug: msg="{{ item.stdout_lines }}" # noqa unnamed-task + with_items: + - "{{ statspackdropcmd.results }}" + loop_control: + label: "" + when: + - statspackdropcmd is defined + - item.stdout_lines is defined + become: true become_user: "{{ oracle_user }}" tags: - spdrop - sppdb - block: - - name: oradb-manage-statspack | Create Statspack Schema in PDBs (existing user is ignored) - script: spcreate.sh - environment: - ORACLE_HOME: "{{ oracle_home_db }}" - ORACLE_SID: "{{ oracle_db_instance_name }}" - perfstat_password: perfstat - temporary_tablespace: "{{ pdb.statspack.tablespace_temp | default('temp')}}" - default_tablespace: "{{ pdb.statspack.tablespace | default('sysaux')}}" - purgedates: "{{ pdb.statspack.purgedays | default(35)}}" - snaplevel: "{{ pdb.statspack.snaplevel | default(7) }}" - pdb_name: "{{ pdb.0.pdb_name }}" - loop: - - "{{ oracle_pdbs |flatten(levels=1) }}" - loop_control: - loop_var: pdb - label: "{{ pdb.0.cdb | default('')}} {{ pdb.0.pdb_name | default('') }} {{ oracle_db_instance_name | default('') }}" - register: statspackcmd - become: yes - become_user: "{{ oracle_user }}" - failed_when: - - statspackcmd.rc != 0 - - '"ORA-01920:" not in statspackcmd.stdout' # ORA-01920: user name 'PERFSTAT' conflicts with another user - when: - - oracle_pdbs is defined - - pdb.0.statspack is defined - - pdb.0.statspack.state | default('present') == 'present' + - name: oradb-manage-statspack | Create Statspack Schema in PDBs (existing user is ignored) + script: spcreate.sh + environment: + ORACLE_HOME: "{{ oracle_home_db }}" + ORACLE_SID: "{{ oracle_db_instance_name }}" + perfstat_password: perfstat + temporary_tablespace: "{{ pdb.statspack.tablespace_temp | default('temp') }}" + default_tablespace: "{{ pdb.statspack.tablespace | default('sysaux') }}" + purgedates: "{{ pdb.statspack.purgedays | default(35) }}" + snaplevel: "{{ pdb.statspack.snaplevel | default(7) }}" + pdb_name: "{{ pdb.0.pdb_name }}" + loop: + - "{{ oracle_pdbs |flatten(levels=1) }}" + loop_control: + loop_var: pdb + label: "{{ pdb.0.cdb | default('') }} {{ pdb.0.pdb_name | default('') }} {{ oracle_db_instance_name | default('') }}" + register: statspackcmd + become: true + become_user: "{{ oracle_user }}" + failed_when: + - statspackcmd.rc != 0 + - '"ORA-01920:" not in statspackcmd.stdout' # ORA-01920: user name 'PERFSTAT' conflicts with another user + when: + - oracle_pdbs is defined + - pdb.0.statspack is defined + - pdb.0.statspack.state | default('present') == 'present' - - debug: msg="{{ item.stdout_lines }}" - with_items: - - "{{ statspackcmd.results }}" - loop_control: - label: "" - when: - - statspackcmd is defined - - item.stdout_lines is defined - become: yes + - debug: msg="{{ item.stdout_lines }}" # noqa unnamed-task + with_items: + - "{{ statspackcmd.results }}" + loop_control: + label: "" + when: + - statspackcmd is defined + - item.stdout_lines is defined + become: true become_user: "{{ oracle_user }}" tags: - spcreate @@ -218,7 +218,7 @@ job_name: "PERFSTAT.PURGE" comments: "Statspack Purge-Job" job_type: "plsql_block" - job_action: "PERFSTAT.STATSPACK.PURGE({{ pdb.statspack.purgedays | default(purgedays)}});" + job_action: "PERFSTAT.STATSPACK.PURGE({{ pdb.statspack.purgedays | default(purgedays) }});" logging_level: "runs" repeat_interval: "{{ pdb.0.statspack.purgeinterval | default(purgeinterval) }}" state: "present" @@ -227,8 +227,8 @@ loop: - "{{ oracle_pdbs |flatten(levels=1) }}" loop_control: - loop_var: pdb - label: "{{ pdb.0.cdb | default('') }} {{ pdb.0.pdb_name | default('') }}" + loop_var: pdb + label: "{{ pdb.0.cdb | default('') }} {{ pdb.0.pdb_name | default('') }}" when: - oracle_pdbs is defined - pdb.0.cdb is defined @@ -236,7 +236,7 @@ - pdb.0.statspack is defined - pdb.0.statspack.state | default('present') == 'present' become_user: "{{ oracle_user }}" - tags: + tags: - spjob - sppdb @@ -250,7 +250,7 @@ job_name: "PERFSTAT.SNAPSHOT" comments: "Statspack Snapshot-Job" job_type: "plsql_block" - job_action: "PERFSTAT.STATSPACK.SNAP(i_snap_level => {{ pdb.0.statspack.snaplevel | default(snaplevel)}});" + job_action: "PERFSTAT.STATSPACK.SNAP(i_snap_level => {{ pdb.0.statspack.snaplevel | default(snaplevel) }});" logging_level: "runs" repeat_interval: "{{ pdb.0.statspack.snapinterval | default(snapinterval) }}" state: "present" @@ -259,16 +259,16 @@ loop: - "{{ oracle_pdbs |flatten(levels=1) }}" loop_control: - loop_var: pdb - label: "{{ pdb.0.cdb | default('') }} {{ pdb.0.pdb_name | default('') }}" + loop_var: pdb + label: "{{ pdb.0.cdb | default('') }} {{ pdb.0.pdb_name | default('') }}" when: - oracle_pdbs is defined - pdb.0.cdb is defined - pdb.0.pdb_name is defined - pdb.0.statspack is defined - pdb.0.statspack.state | default('present') == 'present' - become: yes + become: true become_user: "{{ oracle_user }}" tags: - spjob - - sppdb \ No newline at end of file + - sppdb From d368c3ceaf0ae644311e9c35424875aa919f91dd Mon Sep 17 00:00:00 2001 From: Thorsten Bruhns Date: Sat, 11 Sep 2021 18:39:24 +0000 Subject: [PATCH 5/5] oradb-manage-statspack: README + fixes --- roles/oradb-manage-statspack/README.md | 19 ++++++++++++++++--- roles/oradb-manage-statspack/tasks/main.yml | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/roles/oradb-manage-statspack/README.md b/roles/oradb-manage-statspack/README.md index 4063159bb..fd8702f38 100644 --- a/roles/oradb-manage-statspack/README.md +++ b/roles/oradb-manage-statspack/README.md @@ -11,15 +11,28 @@ inside the database. The detection of existing statspack installation is based on the perfstat user. The installation will be skkipped when user is existing. - Role Variables -------------- +The following example only shows mandatory variables from oracle_databases: + +```yaml +oracle_databases: + - oracle_db_name: DB1 + oracle_db_type: SI + statspack: + state: present + tablespace: sysaux + tablespace_temp: temp + purgedays: 14 + snaplevel: 7 + snapinterval: "FREQ=hourly;byminute=0;bysecond=0" +``` + Dependencies ------------ - Author Information ------------------ -Thorsten Bruhns \ No newline at end of file +Thorsten Bruhns diff --git a/roles/oradb-manage-statspack/tasks/main.yml b/roles/oradb-manage-statspack/tasks/main.yml index 28a37ba8c..a2d70600b 100644 --- a/roles/oradb-manage-statspack/tasks/main.yml +++ b/roles/oradb-manage-statspack/tasks/main.yml @@ -35,7 +35,7 @@ environment: ORACLE_HOME: "{{ oracle_home_db }}" ORACLE_SID: "{{ dbh.oracle_db_instance_name | default(dbh.oracle_db_unique_name | default(dbh.oracle_db_name)) }}" - perfstat_password: perfstat + perfstat_password: "{{ db_password_cdb }}" temporary_tablespace: "{{ dbh.statspack.tablespace_temp | default('temp') }}" default_tablespace: "{{ dbh.statspack.tablespace | default('sysaux') }}" purgedates: "{{ dbh.statspack.purgedays | default(35) }}"