├── .gitignore ├── README.md ├── a.sql ├── aa.sql ├── aas.sql ├── ah.sql ├── ahs.sql ├── alert_log_tail.sql ├── am.sql ├── archived_log.sql ├── as.sql ├── ashrpt.sql ├── awr_snapshot.sql ├── awrddrpt.sql ├── awrrpt.sql ├── awrsqrpt.sql ├── bs.sql ├── cdb.sql ├── cdb_attributes_setup.sql ├── cdb_tablespace_usage_metrics.sql ├── coe_xfr_sql_profile.sql ├── cpu.sql ├── create_spb_from_awr.sql ├── create_spb_from_cur.sql ├── cs_CKPT_trc.sql ├── cs_LGWR_chart.sql ├── cs_LGWR_report.sql ├── cs_LGWR_trc.sql ├── cs_acs_disable.sql ├── cs_acs_enable.sql ├── cs_active_sessions.sql ├── cs_alert_log.sql ├── cs_all_application_segments.sql ├── cs_all_sysmetric_for_cdb_hist.sql ├── cs_all_sysmetric_for_cdb_mem.sql ├── cs_all_sysmetric_for_pdb_hist.sql ├── cs_all_sysmetric_for_pdb_mem.sql ├── cs_amw_report.sql ├── cs_application_tables.sql ├── cs_ash_analytics.sql ├── cs_ash_awr_block_chains_report.sql ├── cs_ash_awr_peaks_bubble.sql ├── cs_ash_awr_peaks_chart.sql ├── cs_ash_awr_peaks_report.sql ├── cs_ash_awr_sample_report.sql ├── cs_ash_mem_block_chains_report.sql ├── cs_ash_mem_peaks_bubble.sql ├── cs_ash_mem_peaks_chart.sql ├── cs_ash_mem_peaks_report.sql ├── cs_ash_mem_sample_report.sql ├── cs_ash_snap_sample_report.sql ├── cs_ash_snapshot.sql ├── cs_average_active_sessions.sql ├── cs_binds.sql ├── cs_blocked_sessions_ash_awr_report.sql ├── cs_blocked_sessions_by_machine_ash_awr_chart.sql ├── cs_blocked_sessions_by_module_ash_awr_chart.sql ├── cs_blocked_sessions_by_sid_ash_awr_chart.sql ├── cs_blocked_sessions_by_state_ash_awr_chart.sql ├── cs_blocked_sessions_report.sql ├── cs_burn_cpu.sql ├── cs_common_tables.sql ├── cs_cpu_demand.sql ├── cs_cpu_sysmetric_for_cdb_hist_chart.sql ├── cs_cpu_sysmetric_for_cdb_mem_chart.sql ├── cs_cpu_sysmetric_for_pdb_hist_chart.sql ├── cs_cpu_sysmetric_for_pdb_mem_chart.sql ├── cs_dba_hist_parameter.sql ├── cs_dbc_snapshot_log_v.sql ├── cs_dbms_stats_age.sql ├── cs_dbms_stats_auto.sql ├── cs_dbms_stats_gather_database_stats.sql ├── cs_dbms_stats_gather_database_stats_job.sql ├── cs_dbms_stats_operations.sql ├── cs_df_u02_chart.sql ├── cs_dg.sql ├── cs_dg_protection_mode_switches.sql ├── cs_dg_redo_dest_resp_histogram_chart.sql ├── cs_dg_redo_dest_resp_histogram_report.sql ├── cs_diag_trace.sql ├── cs_drop_redef_table.sql ├── cs_epoch_to_time.sql ├── cs_estimate_index_size.sql ├── cs_estimate_table_size.sql ├── cs_extents_map.sql ├── cs_foreign_key_fk_constraints_missing_indexes.sql ├── cs_fs.sql ├── cs_hanganalyze.sql ├── cs_hexdump_to_timestamp.sql ├── cs_high_execution_rate_rps.sql ├── cs_index_part_reorg.sql ├── cs_index_rebuild_hist_report.sql ├── cs_index_usage.sql ├── cs_internal ├── cs_acs_internal.sql ├── cs_active_sessions.sql ├── cs_active_sessions_internal.sql ├── cs_active_sessions_peaks_internal_v5.sql ├── cs_active_sessions_peaks_internal_v5_s.sql ├── cs_active_sessions_peaks_internal_v6.sql ├── cs_ash_analytics_footer.sql ├── cs_ash_block_chains.sql ├── cs_ash_block_chains_s.sql ├── cs_ash_sample_detail.sql ├── cs_bind_capture_hist.sql ├── cs_bind_capture_mem.sql ├── cs_binds_xml.sql ├── cs_blocked_sessions_ash_awr_internal.sql ├── cs_cdb_warn.sql ├── cs_cdb_warn2.sql ├── cs_cursors_not_shared.sql ├── cs_dba_hist_sqlstat_daily.sql ├── cs_dba_hist_sqlstat_detailed.sql ├── cs_dba_hist_sqlstat_global.sql ├── cs_dba_hist_sqlstat_hourly.sql ├── cs_def.sql ├── cs_dependency_index_columns.sql ├── cs_dependency_indexes.sql ├── cs_dependency_lobs.sql ├── cs_dependency_metadata.sql ├── cs_dependency_part_keys.sql ├── cs_dependency_segments.sql ├── cs_dependency_table_columns.sql ├── cs_dependency_tables.sql ├── cs_file_prefix.sql ├── cs_fs_internal_query_1.sql ├── cs_fs_internal_query_2.sql ├── cs_fs_internal_query_3.sql ├── cs_fs_internal_query_4.sql ├── cs_fs_internal_query_5.sql ├── cs_gv_sql_global.sql ├── cs_gv_sql_stability.sql ├── cs_gv_sqlstat_global.sql ├── cs_internal_list_dg_members.sql ├── cs_internal_purge_cursor.sql ├── cs_last_snap.sql ├── cs_latency_hist_internal_1.sql ├── cs_latency_hist_internal_2.sql ├── cs_latency_internal_cols.sql ├── cs_latency_internal_foot.sql ├── cs_latency_internal_query_1.sql ├── cs_latency_internal_query_4.sql ├── cs_latency_internal_query_5.sql ├── cs_latency_internal_snapshot.sql ├── cs_list_cbo_hints.sql ├── cs_list_cbo_hints_b.sql ├── cs_load_per_machine.sql ├── cs_lobs_internal.sql ├── cs_locks_internal.sql ├── cs_locks_mon_internal.sql ├── cs_max_ash_analytics_footer.sql ├── cs_null.sql ├── cs_oem_me_sqlperf.sql ├── cs_plans_awr_1.sql ├── cs_plans_awr_2.sql ├── cs_plans_mem_0.sql ├── cs_plans_mem_1.sql ├── cs_plans_mem_2.sql ├── cs_plans_performance.sql ├── cs_pr_internal.sql ├── cs_primary.sql ├── cs_primary_warn.sql ├── cs_print_sql_text.sql ├── cs_recent_sessions.sql ├── cs_reset.sql ├── cs_sample_time_boundaries.sql ├── cs_sample_time_from_and_to.sql ├── cs_sessions_by_machine_footer.sql ├── cs_set.sql ├── cs_set_container_to_cdb_root.sql ├── cs_set_container_to_curr_pdb.sql ├── cs_set_quota_tools_owner.sql ├── cs_signature.sql ├── cs_snap_id_from_and_to.sql ├── cs_spbl_create_post.sql ├── cs_spbl_create_pre.sql ├── cs_spbl_evolve_internal.sql ├── cs_spbl_internal_list.sql ├── cs_spbl_internal_list_debug.sql ├── cs_spbl_internal_list_simple.sql ├── cs_spbl_internal_pack.sql ├── cs_spbl_internal_plan.sql ├── cs_spbl_internal_stgtab.sql ├── cs_spbl_internal_stgtab_baseline.sql ├── cs_spbl_internal_stgtab_delete.sql ├── cs_spbl_validate.sql ├── cs_spch_internal_category.sql ├── cs_spch_internal_create.sql ├── cs_spch_internal_drop.sql ├── cs_spch_internal_list.sql ├── cs_spch_internal_pack.sql ├── cs_spch_internal_plan.sql ├── cs_spch_internal_stgtab.sql ├── cs_spch_internal_stgtab_sqlpatch.sql ├── cs_spool_head.sql ├── cs_spool_head_chart.sql ├── cs_spool_id.sql ├── cs_spool_id_chart.sql ├── cs_spool_id_chart_post.sql ├── cs_spool_id_chart_pre.sql ├── cs_spool_id_list.sql ├── cs_spool_id_list_sql_id.sql ├── cs_spool_id_sample_time.sql ├── cs_spool_tail.sql ├── cs_spool_tail_chart.sql ├── cs_spool_time.sql ├── cs_sprf_internal_drop.sql ├── cs_sprf_internal_list.sql ├── cs_sprf_internal_pack.sql ├── cs_sprf_internal_plan.sql ├── cs_sprf_internal_stgtab.sql ├── cs_sprf_internal_stgtab_sqlprofile.sql ├── cs_sql_ash.sql ├── cs_sqlmon_hist_internal.sql ├── cs_sqlmon_mem_internal.sql ├── cs_sqlstat_analytics_footer.sql ├── cs_sqlstat_clear.sql ├── cs_sqlstat_cols.sql ├── cs_sqlstat_compute.sql ├── cs_sqlstat_foot.sql ├── cs_tables_internal.sql ├── cs_temp_dir_create.sql ├── cs_temp_dir_drop.sql ├── cs_top_14_footer.sql ├── cs_top_activity_internal.sql ├── cs_top_activity_internal_range.sql ├── cs_top_internal_foot.sql ├── cs_top_keys_sql.sql ├── cs_top_primary_keys_table.sql ├── cs_top_secondary_keys_table.sql └── cs_undef.sql ├── cs_kill_machine.sql ├── cs_kill_root_blockers.sql ├── cs_kill_scheduler.sql ├── cs_kill_sid.sql ├── cs_kill_sql_id.sql ├── cs_latency.sql ├── cs_latency_1m.sql ├── cs_latency_1m_extended.sql ├── cs_latency_extended.sql ├── cs_latency_hist.sql ├── cs_latency_range.sql ├── cs_latency_range_extended.sql ├── cs_latency_snapshot.sql ├── cs_latency_snapshot_extended.sql ├── cs_listener_log.sql ├── cs_load_sysmetric_for_cdb_hist.sql ├── cs_load_sysmetric_for_cdb_mem.sql ├── cs_load_sysmetric_for_pdb_hist.sql ├── cs_load_sysmetric_for_pdb_mem.sql ├── cs_load_sysmetric_per_pdb_hist.sql ├── cs_load_sysmetric_per_pdb_mem.sql ├── cs_locks.sql ├── cs_locks_mon.sql ├── cs_mark_sql_hot.sql ├── cs_max_ash_analytics.sql ├── cs_maximum_active_sessions.sql ├── cs_one_sysmetric_per_pdb_chart.sql ├── cs_opened_cursors_current_per_session.sql ├── cs_osstat_chart.sql ├── cs_osstat_cpu_busy_chart.sql ├── cs_osstat_cpu_load_chart.sql ├── cs_osstat_cpu_report.sql ├── cs_osstat_cpu_util_perc_chart.sql ├── cs_osstat_cpu_util_perc_now.sql ├── cs_past_days_to_epoch.sql ├── cs_pdbs.sql ├── cs_pdbs_cost.sql ├── cs_pdbs_cost_unpivot.sql ├── cs_pga_consumers.sql ├── cs_planh.sql ├── cs_planm.sql ├── cs_planx.sql ├── cs_pr.sql ├── cs_purge_cursor.sql ├── cs_recyclebin.sql ├── cs_redef_remove_lob_dedup_on_pdb.sql ├── cs_redef_schema.sql ├── cs_redef_table.sql ├── cs_redef_table_OLD.sql ├── cs_redef_table_no_dedup_OLD.sql ├── cs_redef_table_silent.sql ├── cs_redef_table_with_purge.sql ├── cs_resource_limit_chart.sql ├── cs_segment_chart.sql ├── cs_sess_mon.sql ├── cs_sessions.sql ├── cs_sessions_PCTL_by_machine.sql ├── cs_sessions_age_by_machine_chart.sql ├── cs_sessions_by_machine_chart.sql ├── cs_sessions_by_pdb_chart.sql ├── cs_sessions_by_type_and_status_chart.sql ├── cs_sessions_high_pga_memory.sql ├── cs_sessions_hist.sql ├── cs_sgastat_awr_area_chart.sql ├── cs_sgastat_awr_line_chart.sql ├── cs_sgastat_awr_report.sql ├── cs_snapper_machine.sql ├── cs_snapper_module.sql ├── cs_snapper_service.sql ├── cs_snapper_sid.sql ├── cs_snapper_spid.sql ├── cs_snapper_sql_id.sql ├── cs_snapper_top.sql ├── cs_some_sysmetric_for_cdb_hist_chart.sql ├── cs_some_sysmetric_for_cdb_mem_chart.sql ├── cs_some_sysmetric_for_pdb_hist_chart.sql ├── cs_some_sysmetric_for_pdb_mem_chart.sql ├── cs_spbl_accept.sql ├── cs_spbl_corrupt.sql ├── cs_spbl_create.sql ├── cs_spbl_disable.sql ├── cs_spbl_drop.sql ├── cs_spbl_drop_all.sql ├── cs_spbl_enable.sql ├── cs_spbl_evolve.sql ├── cs_spbl_expdp.sql ├── cs_spbl_failed.sql ├── cs_spbl_fix.sql ├── cs_spbl_impdp.sql ├── cs_spbl_indexes.sql ├── cs_spbl_list.sql ├── cs_spbl_list_all_cdb.sql ├── cs_spbl_list_all_pdb.sql ├── cs_spbl_meta.sql ├── cs_spbl_pack.sql ├── cs_spbl_plan.sql ├── cs_spbl_purge_outdated.sql ├── cs_spbl_refresh.sql ├── cs_spbl_sprf_spch_cnt.sql ├── cs_spbl_sprf_spch_drop_all.sql ├── cs_spbl_sprf_spch_list_all.sql ├── cs_spbl_stgtab.sql ├── cs_spbl_stgtab_delete.sql ├── cs_spbl_unfix.sql ├── cs_spbl_unpack.sql ├── cs_spch_category.sql ├── cs_spch_create.sql ├── cs_spch_disable.sql ├── cs_spch_drop.sql ├── cs_spch_drop_all.sql ├── cs_spch_enable.sql ├── cs_spch_first_rows.sql ├── cs_spch_list.sql ├── cs_spch_list_all_cdb.sql ├── cs_spch_list_all_pdb.sql ├── cs_spch_pack.sql ├── cs_spch_plan.sql ├── cs_spch_scan_create.sql ├── cs_spch_stgtab.sql ├── cs_spch_unpack.sql ├── cs_spch_xfr.sql ├── cs_sprf_category.sql ├── cs_sprf_create.sql ├── cs_sprf_disable.sql ├── cs_sprf_drop.sql ├── cs_sprf_drop_all.sql ├── cs_sprf_drop_all_unused.sql ├── cs_sprf_enable.sql ├── cs_sprf_export.sql ├── cs_sprf_indexes.sql ├── cs_sprf_list.sql ├── cs_sprf_list_all_cdb.sql ├── cs_sprf_list_all_pdb.sql ├── cs_sprf_pack.sql ├── cs_sprf_plan.sql ├── cs_sprf_stgtab.sql ├── cs_sprf_unpack.sql ├── cs_sprf_xfr.sql ├── cs_sql_bind_capture.sql ├── cs_sql_bind_capture_one.sql ├── cs_sql_bind_capture_one_chart.sql ├── cs_sql_latency_histogram.sql ├── cs_sql_perf_concurrency.sql ├── cs_sql_perf_high_aas.sql ├── cs_sql_perf_histogram.sql ├── cs_sql_perf_long_executions.sql ├── cs_sql_plan_directives.sql ├── cs_sql_sessions.sql ├── cs_sqlarea_per_pdb.sql ├── cs_sqlmon_binds.sql ├── cs_sqlmon_capture.sql ├── cs_sqlmon_duration_chart.sql ├── cs_sqlmon_hist.sql ├── cs_sqlmon_mem.sql ├── cs_sqlmon_top_binds.sql ├── cs_sqlperf.sql ├── cs_sqlperf_plus.sql ├── cs_sqlstat_analytics.sql ├── cs_sqlstat_analytics_aggregate.sql ├── cs_sqlstat_report.sql ├── cs_sqltext.sql ├── cs_sysstat_hist_chart.sql ├── cs_sysstat_hist_chart_io.sql ├── cs_system_event_hist_latency_chart.sql ├── cs_system_event_hist_load_char.sql ├── cs_system_event_hist_total_waits_chart.sql ├── cs_system_event_histogram_chart.sql ├── cs_systemstate.sql ├── cs_table.sql ├── cs_table_mod_chart.sql ├── cs_table_mod_report.sql ├── cs_table_redefinition_hist_report.sql ├── cs_table_segments_chart.sql ├── cs_table_stats_30d_chart.sql ├── cs_table_stats_chart.sql ├── cs_table_stats_report.sql ├── cs_tables.sql ├── cs_tables_rows_vs_count.sql ├── cs_tables_rows_vs_count_outliers.sql ├── cs_tablespace_chart.sql ├── cs_tablespaces.sql ├── cs_tbs_resize.sql ├── cs_tcb.sql ├── cs_tempseg_usage.sql ├── cs_time_to_epoch.sql ├── cs_timed_event_top_consumers_pie.sql ├── cs_timed_event_top_consumers_report.sql ├── cs_top.sql ├── cs_top_application_segments.sql ├── cs_top_bloated_indexes.sql ├── cs_top_indexes.sql ├── cs_top_lobs.sql ├── cs_top_pdb_chart.sql ├── cs_top_pdb_size_chart.sql ├── cs_top_pdb_tps_chart.sql ├── cs_top_range.sql ├── cs_top_segments.sql ├── cs_top_segments_pdb.sql ├── cs_top_table_size_chart.sql ├── cs_top_tables.sql ├── cs_total_and_parse_cpu_to_db_chart.sql ├── cs_total_and_parse_db_and_cpu_aas_chart.sql ├── cs_trace_session.sql ├── cs_unmark_sql_hot.sql ├── cs_vcn_entity_change_events_rgn.sql ├── cs_vcn_events.sql ├── cs_vcn_events_v2.sql ├── cs_wait_chains.sql ├── dba_high_water_mark_statistics.sql ├── dc.sql ├── dp.sql ├── find_all_privs.sql ├── fk_indexes.sql ├── gc_status_setup.sql ├── get_compartments3.sql ├── h.sql ├── help.sql ├── hidden_parameter.sql ├── hidden_parameters.sql ├── l.sql ├── la.sql ├── lah.sql ├── le.sql ├── lh.sql ├── locks.sql ├── locks2.sql ├── log.sql ├── log_history.sql ├── loop.sql ├── lr.sql ├── lre.sql ├── ls.sql ├── ma.sql ├── mas.sql ├── metadata_ddl.sql ├── mysid.sql ├── opatch.sql ├── open_cursor.sql ├── p.sql ├── parameter_change.sql ├── pdb.sql ├── pdb_attributes_setup.sql ├── pdb_config_hist.sql ├── pdb_move_list.sql ├── pdb_spfile.sql ├── pdb_spfile_diff.sql ├── pdb_spfile_sessions_ne_200.sql ├── ph.sql ├── planx.sql ├── pm.sql ├── pp.sql ├── pr.sql ├── reason_not_shared.sql ├── session_undo.sql ├── set.sql ├── spfile.sql ├── spm_backup.sql ├── ssa.sql ├── ssaa.sql ├── ssaai.sql ├── ssai.sql ├── ssr.sql ├── ssri.sql ├── syncup_pdb_parameters_to_standbys.sql ├── sysdate.sql ├── t.sql ├── ta.sql ├── tr.sql ├── trace_10046_10053_mysid_off.sql ├── trace_10046_10053_mysid_on.sql ├── trace_10046_mysid_off.sql ├── trace_10046_mysid_on.sql ├── trace_10046_sql_id.sql ├── trace_10053_mysid_off.sql ├── trace_10053_mysid_on.sql ├── trace_10053_sql_id.sql ├── trace_DUMP_sql_id.sql ├── trace_SPM_sql_id.sql ├── view.sql └── x.sql /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /a.sql: -------------------------------------------------------------------------------- 1 | @@cs_active_sessions.sql -------------------------------------------------------------------------------- /aa.sql: -------------------------------------------------------------------------------- 1 | @@cs_ash_analytics.sql -------------------------------------------------------------------------------- /aas.sql: -------------------------------------------------------------------------------- 1 | @@cs_average_active_sessions.sql -------------------------------------------------------------------------------- /ah.sql: -------------------------------------------------------------------------------- 1 | @@cs_ash_awr_sample_report.sql -------------------------------------------------------------------------------- /ahs.sql: -------------------------------------------------------------------------------- 1 | @@cs_ash_snap_sample_report.sql -------------------------------------------------------------------------------- /alert_log_tail.sql: -------------------------------------------------------------------------------- 1 | -- Last 50 lines of alert log refreshed every 5 seconds 20 times 2 | COL alert_log NEW_V alert_log FOR A150; 3 | SELECT d.value||'/alert_'||t.instance||'.log' alert_log FROM v$diag_info d, v$thread t WHERE d.name = 'Diag Trace'; 4 | HOS tail -n 50 &&alert_log. 5 | PRO Executing alert_log_tail.sql 20 times... 6 | EXEC DBMS_LOCK.sleep(5); 7 | CLEAR SCREEN; 8 | @@alert_log_tail.sql -------------------------------------------------------------------------------- /am.sql: -------------------------------------------------------------------------------- 1 | @@cs_ash_mem_sample_report.sql -------------------------------------------------------------------------------- /archived_log.sql: -------------------------------------------------------------------------------- 1 | -- archived_log.sql - Archived Logs list 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; 3 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 4 | -- 5 | COL recid_range FOR A13; 6 | -- 7 | SELECT first_time, next_time, 8 | (next_time - first_time) * 24 * 3600 seconds, 9 | ROUND(AVG(blocks * block_size) / POWER(2,30), 3) size_gbs, MIN(recid)||'-'||MAX(recid) recid_range 10 | FROM v$archived_log 11 | WHERE name IS NOT NULL 12 | GROUP BY 13 | first_time, next_time 14 | ORDER BY 15 | first_time, next_time 16 | / -------------------------------------------------------------------------------- /as.sql: -------------------------------------------------------------------------------- 1 | @@cs_internal/cs_active_sessions_internal.sql -------------------------------------------------------------------------------- /ashrpt.sql: -------------------------------------------------------------------------------- 1 | -- ASH report 2 | @$ORACLE_HOME/rdbms/admin/ashrpt.sql 3 | -- 4 | HOS cp ashrpt_*.* /tmp 5 | HOS chmod 644 /tmp/ashrpt_*.* 6 | PRO 7 | PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: 8 | HOS echo "scp $HOSTNAME:/tmp/ashrpt_*.* ." -------------------------------------------------------------------------------- /awr_snapshot.sql: -------------------------------------------------------------------------------- 1 | -- Create AWR snapshot 2 | EXEC DBMS_WORKLOAD_REPOSITORY.create_snapshot; -------------------------------------------------------------------------------- /awrddrpt.sql: -------------------------------------------------------------------------------- 1 | -- AWR Difference Report 2 | @$ORACLE_HOME/rdbms/admin/awrddrpt.sql 3 | -- 4 | HOS cp awrdiff_*.* /tmp 5 | HOS chmod 644 /tmp/awrdiff_*.* 6 | PRO 7 | PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: 8 | HOS echo "scp $HOSTNAME:/tmp/awrdiff_*.* ." -------------------------------------------------------------------------------- /awrrpt.sql: -------------------------------------------------------------------------------- 1 | -- AWR Report 2 | @$ORACLE_HOME/rdbms/admin/awrrpt.sql 3 | -- 4 | HOS cp awrrpt_*.* /tmp 5 | HOS chmod 644 /tmp/awrrpt_*.* 6 | PRO 7 | PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: 8 | HOS echo "scp $HOSTNAME:/tmp/awrrpt_*.* ." -------------------------------------------------------------------------------- /awrsqrpt.sql: -------------------------------------------------------------------------------- 1 | -- AWR SQL Report 2 | @$ORACLE_HOME/rdbms/admin/awrsqrpt.sql 3 | -- 4 | HOS cp awrsqlrpt_*.* /tmp 5 | HOS chmod 644 /tmp/awrsqlrpt_*.* 6 | PRO 7 | PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: 8 | HOS echo "scp $HOSTNAME:/tmp/awrsqlrpt_*.* ." -------------------------------------------------------------------------------- /bs.sql: -------------------------------------------------------------------------------- 1 | @@cs_blocked_sessions_report.sql -------------------------------------------------------------------------------- /cdb.sql: -------------------------------------------------------------------------------- 1 | -- @@cs_internal/&&cs_set_container_to_cdb_root. 2 | ALTER SESSION SET container = CDB$ROOT; 3 | -- 4 | UNDEF 1 2 3 4 5 6 7 8 9 10 11 12; 5 | @@set.sql 6 | CLEAR BREAK COLUMNS COMPUTE; 7 | -- -------------------------------------------------------------------------------- /cpu.sql: -------------------------------------------------------------------------------- 1 | @@cs_cpu_demand.sql -------------------------------------------------------------------------------- /create_spb_from_cur.sql: -------------------------------------------------------------------------------- 1 | REM $Header: 215187.1 create_spb_from_cur.sql 12.1.02 2013/09/09 carlos.sierra $ 2 | -- Create SQL Plan Baseline from SQL Cursor 3 | ACC sql_text_piece PROMPT 'Enter SQL Text piece: ' 4 | 5 | SET PAGES 200 LONG 80000 ECHO ON; 6 | 7 | COL sql_text PRI; 8 | 9 | SELECT sql_id, sql_text /* exclude_me */ 10 | FROM v$sqlarea 11 | WHERE sql_text LIKE '%&&sql_text_piece.%' 12 | AND sql_text NOT LIKE '%/* exclude_me */%'; 13 | 14 | ACC sql_id PROMPT 'Enter SQL_ID: '; 15 | 16 | SELECT plan_hash_value, SUM(executions) executions, SUM(elapsed_time) elapsed_time, /* exclude_me */ 17 | CASE WHEN SUM(executions) > 0 THEN ROUND(SUM(elapsed_time)/SUM(executions)/1e6, 3) END avg_secs_per_exec 18 | FROM v$sql 19 | WHERE sql_id = '&&sql_id.' 20 | GROUP BY 21 | plan_hash_value 22 | ORDER BY 23 | 4 DESC NULLS FIRST; 24 | 25 | ACC plan_hash_value PROMPT 'Enter Plan Hash Value: '; 26 | 27 | VAR plans NUMBER; 28 | 29 | EXEC :plans := DBMS_SPM.load_plans_from_cursor_cache('&&sql_id.', TO_NUMBER('&&plan_hash_value.')); 30 | 31 | PRINT plans; 32 | 33 | SET PAGES 14 LONG 80 ECHO OFF; 34 | 35 | UNDEF sql_text_piece sql_id plan_hash_value 36 | -------------------------------------------------------------------------------- /cs_CKPT_trc.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_CKPT_trc.sql 4 | -- 5 | -- Purpose: Get check point CKPT trace 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/09/08 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_CKPT_trc.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_set.sql 21 | @@cs_internal/cs_def.sql 22 | -- 23 | COL trace_dir NEW_V trace_dir FOR A100 NOPRI; 24 | COL ckpt_trc NEW_V ckpt_trc FOR A30 NOPRI; 25 | SELECT d.value AS trace_dir, LOWER('&&cs_db_name._')||LOWER(p.pname)||'_'||p.spid||'.trc' AS ckpt_trc FROM v$diag_info d, v$process p WHERE d.name = 'Diag Trace' AND p.pname = 'CKPT'; 26 | -- 27 | HOS cat &&trace_dir./&&ckpt_trc. 28 | PRO 29 | PRO &&trace_dir./&&ckpt_trc. 30 | PRO 31 | HOS cp &&trace_dir./&&ckpt_trc. /tmp/ 32 | HOS chmod 644 /tmp/&&ckpt_trc. 33 | PRO 34 | PRO Preserved CKPT trace on /tmp 35 | PRO ~~~~~~~~~~~~~~~~~~~~~~~ 36 | HOS ls -oX /tmp/&&ckpt_trc. 37 | PRO 38 | PRO If you want to copy CKPT trace file, execute scp command below, from a TERM session running on your Mac/PC: 39 | PRO 40 | PRO scp &&cs_host_name.:/tmp/&&ckpt_trc. &&cs_local_dir. 41 | -- 42 | @@cs_internal/cs_undef.sql 43 | @@cs_internal/cs_reset.sql 44 | -- 45 | -------------------------------------------------------------------------------- /cs_acs_disable.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_acs_disable.sql 4 | -- 5 | -- Purpose: Disable Adaptive Cursor Sharing (ACS) 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/02/07 10 | -- 11 | -- Usage: Connecting into PDB or CDB. 12 | -- 13 | -- Confirm when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_acs_disable.sql 17 | -- 18 | -- Notes: Developed and tested on 19c. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | -- 27 | PRO 28 | PRO *** 29 | PRO *** You are about to DISABLE Adaptive Cursor Sharing (ACS) for &&cs_con_name. 30 | PRO *** 31 | PRO 32 | PRO 1. Enter "Yes" (case sensitive) to continue, else -C 33 | DEF cs_confirm = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SET SERVEROUT ON; 37 | BEGIN 38 | IF '&&cs_confirm.' = 'Yes' THEN 39 | EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_adaptive_cursor_sharing" = FALSE'; 40 | EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_extended_cursor_sharing_rel" = "NONE"'; 41 | EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_extended_cursor_sharing" = "NONE"'; 42 | DBMS_OUTPUT.put_line('Done'); 43 | ELSE 44 | DBMS_OUTPUT.put_line('Null'); 45 | END IF; 46 | END; 47 | / 48 | -- 49 | @@cs_internal/cs_undef.sql 50 | @@cs_internal/cs_reset.sql 51 | -- -------------------------------------------------------------------------------- /cs_acs_enable.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_acs_enable.sql 4 | -- 5 | -- Purpose: Enable Adaptive Cursor Sharing (ACS) 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/02/07 10 | -- 11 | -- Usage: Connecting into PDB or CDB. 12 | -- 13 | -- Confirm when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_acs_enable.sql 17 | -- 18 | -- Notes: Developed and tested on 19c. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | -- 27 | PRO 28 | PRO *** 29 | PRO *** You are about to ENABLE Adaptive Cursor Sharing (ACS) for &&cs_con_name. 30 | PRO *** 31 | PRO 32 | PRO 1. Enter "Yes" (case sensitive) to continue, else -C 33 | DEF cs_confirm = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SET SERVEROUT ON; 37 | BEGIN 38 | IF '&&cs_confirm.' = 'Yes' THEN 39 | EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_adaptive_cursor_sharing" = TRUE'; 40 | EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_extended_cursor_sharing_rel" = "SIMPLE"'; 41 | EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_extended_cursor_sharing" = "UDO"'; 42 | DBMS_OUTPUT.put_line('Done'); 43 | ELSE 44 | DBMS_OUTPUT.put_line('Null'); 45 | END IF; 46 | END; 47 | / 48 | -- 49 | @@cs_internal/cs_undef.sql 50 | @@cs_internal/cs_reset.sql 51 | -- 52 | -------------------------------------------------------------------------------- /cs_active_sessions.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: a.sql | as.sql | cs_active_sessions.sql 4 | -- 5 | -- Purpose: Active Sessions including SQL Text and Exection Plan 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/16 10 | -- 11 | -- Usage: Execute connected to PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_active_sessions.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | @@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_active_sessions'; 27 | DEF cs_script_acronym = 'a.sql | as.sql | '; 28 | -- 29 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 30 | -- 31 | @@cs_internal/cs_spool_head.sql 32 | PRO SQL> @&&cs_script_name..sql 33 | @@cs_internal/cs_spool_id.sql 34 | -- 35 | @@cs_internal/cs_active_sessions_internal.sql 36 | -- 37 | PRO 38 | PRO SQL> @&&cs_script_name..sql 39 | -- 40 | @@cs_internal/cs_spool_tail.sql 41 | @@cs_internal/cs_undef.sql 42 | @@cs_internal/cs_reset.sql 43 | -- -------------------------------------------------------------------------------- /cs_alert_log.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_alert_log.sql 4 | -- 5 | -- Purpose: Get alert log 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/05 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_alert_log.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_set.sql 21 | @@cs_internal/cs_def.sql 22 | -- 23 | COL trace_dir NEW_V trace_dir FOR A100 NOPRI; 24 | COL alert_log NEW_V alert_log FOR A30 NOPRI; 25 | SELECT d.value trace_dir, 'alert_'||t.instance||'.log' alert_log FROM v$diag_info d, v$thread t WHERE d.name = 'Diag Trace'; 26 | HOS cp &&trace_dir./&&alert_log.* /tmp/ 27 | HOS chmod 644 /tmp/&&alert_log.* 28 | PRO 29 | PRO Current and prior alert logs on &&trace_dir. 30 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31 | HOS ls -oX &&trace_dir./&&alert_log.* 32 | PRO 33 | PRO Preserved alert logs on /tmp 34 | PRO ~~~~~~~~~~~~~~~~~~~~~~~ 35 | HOS ls -oX /tmp/alert*.log* 36 | PRO 37 | PRO If you want to copy alert log file(s), execute one scp command below, from a TERM session running on your Mac/PC: 38 | PRO 39 | PRO scp &&cs_host_name.:/tmp/&&alert_log. &&cs_local_dir. 40 | PRO scp &&cs_host_name.:/tmp/&&alert_log.* &&cs_local_dir. 41 | -- 42 | @@cs_internal/cs_undef.sql 43 | @@cs_internal/cs_reset.sql 44 | -- 45 | -------------------------------------------------------------------------------- /cs_application_tables.sql: -------------------------------------------------------------------------------- 1 | SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 2 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 3 | COL owner FOR A30; 4 | COL table_name FOR A30; 5 | COL num_rows FOR 999,999,999,999; 6 | COL blocks FOR 9,999,999,999; 7 | SELECT u.common, t.owner, t.table_name, t.num_rows, t.blocks, t.last_analyzed, t.tablespace_name 8 | FROM dba_tables t, dba_users u 9 | WHERE u.username = t.owner 10 | AND u.oracle_maintained = 'N' 11 | ORDER BY 12 | u.common DESC, 13 | t.owner, 14 | t.table_name 15 | / -------------------------------------------------------------------------------- /cs_ash_awr_block_chains_report.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_ash_awr_block_chains_report.sql 4 | -- 5 | -- Purpose: ASH Block Chains Report from AWR 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/02/04 10 | -- 11 | -- Usage: Execute connected to CDB or PDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_ash_awr_block_chains_report.sql 15 | -- 16 | -- Notes: Developed and tested on 19c. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | @@cs_internal/cs_set.sql 22 | @@cs_internal/cs_def.sql 23 | @@cs_internal/cs_file_prefix.sql 24 | -- 25 | DEF cs_script_name = 'cs_ash_awr_block_chains_report'; 26 | -- 27 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 28 | -- 29 | DEF cs_hours_range_default = '24'; 30 | @@cs_internal/cs_sample_time_from_and_to.sql 31 | @@cs_internal/cs_snap_id_from_and_to.sql 32 | -- 33 | PRO To report on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below 34 | PRO 35 | PRO 3. Threshold: [{1}|0-10] 36 | DEF times_cpu_cores = '&3.'; 37 | UNDEF 3; 38 | COL times_cpu_cores NEW_V times_cpu_cores NOPRI; 39 | SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL 40 | / 41 | -- 42 | @@cs_internal/cs_spool_head.sql 43 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." 44 | @@cs_internal/cs_spool_id.sql 45 | -- 46 | @@cs_internal/cs_spool_id_sample_time.sql 47 | -- 48 | PRO THRESHOLD : "&×_cpu_cores.x NUM_CPU_CORES" 49 | -- 50 | -- @@cs_internal/&&cs_set_container_to_cdb_root. 51 | -- 52 | -- DEF times_cpu_cores = '1'; 53 | DEF include_hist = 'Y'; 54 | DEF include_mem = 'N'; 55 | -- 56 | @@cs_internal/cs_ash_block_chains.sql 57 | -- 58 | PRO 59 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." 60 | -- 61 | @@cs_internal/cs_spool_tail.sql 62 | -- 63 | -- @@cs_internal/&&cs_set_container_to_curr_pdb. 64 | -- 65 | @@cs_internal/cs_undef.sql 66 | @@cs_internal/cs_reset.sql 67 | -- -------------------------------------------------------------------------------- /cs_ash_mem_block_chains_report.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_ash_mem_block_chains_report.sql 4 | -- 5 | -- Purpose: ASH Block Chains Report from MEM 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/02/04 10 | -- 11 | -- Usage: Execute connected to CDB or PDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_ash_mem_block_chains_report.sql 15 | -- 16 | -- Notes: Developed and tested on 19c. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | @@cs_internal/cs_set.sql 22 | @@cs_internal/cs_def.sql 23 | @@cs_internal/cs_file_prefix.sql 24 | -- 25 | DEF cs_script_name = 'cs_ash_mem_block_chains_report'; 26 | -- 27 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 28 | -- 29 | DEF cs_hours_range_default = '3'; 30 | @@cs_internal/cs_sample_time_from_and_to.sql 31 | @@cs_internal/cs_snap_id_from_and_to.sql 32 | -- 33 | PRO To report on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below 34 | PRO 35 | PRO 3. Threshold: [{1}|0-10] 36 | DEF times_cpu_cores = '&3.'; 37 | UNDEF 3; 38 | COL times_cpu_cores NEW_V times_cpu_cores NOPRI; 39 | SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL 40 | / 41 | -- 42 | @@cs_internal/cs_spool_head.sql 43 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." 44 | @@cs_internal/cs_spool_id.sql 45 | -- 46 | @@cs_internal/cs_spool_id_sample_time.sql 47 | -- 48 | PRO THRESHOLD : "&×_cpu_cores.x NUM_CPU_CORES" 49 | -- 50 | -- @@cs_internal/&&cs_set_container_to_cdb_root. 51 | -- 52 | -- DEF times_cpu_cores = '1'; 53 | DEF include_hist = 'N'; 54 | DEF include_mem = 'Y'; 55 | -- 56 | @@cs_internal/cs_ash_block_chains.sql 57 | -- 58 | PRO 59 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." 60 | -- 61 | @@cs_internal/cs_spool_tail.sql 62 | -- 63 | -- @@cs_internal/&&cs_set_container_to_curr_pdb. 64 | -- 65 | @@cs_internal/cs_undef.sql 66 | @@cs_internal/cs_reset.sql 67 | -- -------------------------------------------------------------------------------- /cs_ash_snapshot.sql: -------------------------------------------------------------------------------- 1 | REM Merges a snapshot of v$active_session_history into C##IOD.iod_active_session_history 2 | select count(*) from c##iod.iod_active_session_history; 3 | EXEC C##IOD.IOD_SESS.snap_ash(p_force => 'Y'); 4 | select count(*) from c##iod.iod_active_session_history; -------------------------------------------------------------------------------- /cs_binds.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_binds.sql 4 | -- 5 | -- Purpose: Binds for a given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Execute connected to PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_binds.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_binds'; 31 | DEF cs_binds_days = '365'; 32 | -- 33 | PRO 1. SQL_ID: 34 | DEF cs_sql_id = '&1.'; 35 | UNDEF 1; 36 | -- 37 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 38 | -- 39 | @@cs_internal/cs_signature.sql 40 | @@cs_internal/cs_spool_head.sql 41 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 42 | @@cs_internal/cs_spool_id.sql 43 | @@cs_internal/cs_spool_id_list_sql_id.sql 44 | @@cs_internal/cs_print_sql_text.sql 45 | @@cs_internal/cs_binds_xml.sql 46 | @@cs_internal/cs_bind_capture_hist.sql 47 | @@cs_internal/cs_bind_capture_mem.sql 48 | -- 49 | PRO 50 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 51 | -- 52 | @@cs_internal/cs_spool_tail.sql 53 | @@cs_internal/cs_undef.sql 54 | @@cs_internal/cs_reset.sql 55 | -- -------------------------------------------------------------------------------- /cs_common_tables.sql: -------------------------------------------------------------------------------- 1 | SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 2 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 3 | -- 4 | COL owner FOR A30; 5 | COL table_name FOR A30; 6 | -- 7 | SELECT t.owner, t.table_name, num_rows 8 | FROM dba_users u, dba_tables t 9 | WHERE u.common = 'YES' 10 | AND u.oracle_maintained = 'N' 11 | AND t.owner = u.username 12 | ORDER BY 13 | t.owner, t.table_name 14 | / -------------------------------------------------------------------------------- /cs_cpu_sysmetric_for_cdb_hist_chart.sql: -------------------------------------------------------------------------------- 1 | -- cs_cpu_sysmetric_for_cdb_hist_chart.sql - CPU System Metrics as per DBA_HIST_SYSMETRIC_SUMMARY View for a CDB (time series chart) 2 | @@cs_some_sysmetric_for_cdb_hist_chart.sql "" "" "CentiSeconds Per Second" "Database Time Per Sec" "Host CPU Usage Per Sec" "Background CPU Usage Per Sec" "CPU Usage Per Sec" "" "" "average" "Scatter" "none" 3 | -------------------------------------------------------------------------------- /cs_cpu_sysmetric_for_cdb_mem_chart.sql: -------------------------------------------------------------------------------- 1 | -- cs_cpu_sysmetric_for_cdb_mem_chart.sql - CPU System Metrics as per V$SYSMETRIC_HISTORY View for a CDB (time series chart) 2 | @@cs_some_sysmetric_for_cdb_mem_chart.sql "CentiSeconds Per Second" "Database Time Per Sec" "Host CPU Usage Per Sec" "Background CPU Usage Per Sec" "CPU Usage Per Sec" "" "" "Scatter" -------------------------------------------------------------------------------- /cs_cpu_sysmetric_for_pdb_hist_chart.sql: -------------------------------------------------------------------------------- 1 | -- cs_cpu_sysmetric_for_pdb_hist_chart.sql - CPU System Metrics as per DBA_HIST_CON_SYSMETRIC_SUMM View for a PDB (time series chart) 2 | @@cs_some_sysmetric_for_pdb_hist_chart.sql "" "" "CentiSeconds Per Second" "CPU Usage Per Sec" "" "" "" "" "" "average" "Scatter" "none" -------------------------------------------------------------------------------- /cs_cpu_sysmetric_for_pdb_mem_chart.sql: -------------------------------------------------------------------------------- 1 | -- cs_cpu_sysmetric_for_pdb_mem_chart.sql - CPU System Metrics as per V$CON_SYSMETRIC_HISTORY View for a PDB (time series chart) 2 | @@cs_some_sysmetric_for_pdb_mem_chart.sql "CentiSeconds Per Second" "CPU Usage Per Sec" "" "" "" "" "" "Scatter" -------------------------------------------------------------------------------- /cs_dg.sql: -------------------------------------------------------------------------------- 1 | COL role FOR A10; 2 | COL db_unique_name FOR A15; 3 | COL host_name FOR A64; 4 | -- 5 | SELECT r.role, d.db_unique_name, h.host_name 6 | FROM 7 | (SELECT x.value db_unique_name, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'DATABASE') d, 8 | (SELECT x.value role, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'role') r, 9 | (SELECT x.value host_name, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'host') h 10 | WHERE r.rn = d.rn AND h.rn = d.rn 11 | ORDER BY r.role DESC, d.db_unique_name 12 | / 13 | -- 14 | COL data_guard_configuration FOR A150; 15 | -- 16 | SELECT LISTAGG(x.attribute||':'||x.value, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY x.indx) AS data_guard_configuration 17 | FROM x$drc x 18 | WHERE x.attribute IN ('DRC', 'protection_mode', 'enabled', 'fast_start_failover', 'fsfo_target', 'role_change_detected', 19 | 'DATABASE', 'enabled', 'role', 'receive_from', 'ship_to', 'FSFOTargetValidity', 20 | 'host') 21 | GROUP BY 22 | x.object_id 23 | ORDER BY 24 | x.object_id 25 | / 26 | -------------------------------------------------------------------------------- /cs_diag_trace.sql: -------------------------------------------------------------------------------- 1 | select value from v$diag_info where name = 'Diag Trace'; -------------------------------------------------------------------------------- /cs_epoch_to_time.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_epoch_to_time.sql 4 | -- 5 | -- Purpose: Convert Epoch to Time 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_epoch_to_time.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 21 | SET NUM 15; 22 | DEF cs_datetime_full_format = 'YYYY-MM-DD"T"HH24:MI:SS'; 23 | PRO 24 | PRO 1. Enter Epoch: 25 | DEF cs_epoch = '&1.'; 26 | UNDEF 1; 27 | -- 28 | -- note: on 19c consider select dbms_stats.convert_raw_to_date(hextoraw('7877031203192A0C1988C0')) from dual; 29 | -- 30 | WITH 31 | days AS ( 32 | SELECT TO_NUMBER('&&cs_epoch.'||CASE WHEN LENGTH('&&cs_epoch.') <= 10 THEN '000' END) / 1000 / 3600 / 24 AS cnt, 33 | CASE WHEN LENGTH('&&cs_epoch.') > 10 THEN SUBSTR('&&cs_epoch.', 11, 3) END AS ms 34 | FROM DUAL 35 | ) 36 | SELECT TO_CHAR(TO_DATE('1970-01-01T00:00:00', '&&cs_datetime_full_format.') + days.cnt, '&&cs_datetime_full_format.')|| 37 | CASE WHEN days.ms IS NOT NULL THEN '.'||days.ms END 38 | AS time 39 | FROM days 40 | / 41 | -------------------------------------------------------------------------------- /cs_estimate_index_size.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_estimate_index_size.sql 4 | -- 5 | -- Purpose: Estimate Index Size 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_estimate_index_size.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 21 | PRO 22 | PRO 1. Enter Index Name: 23 | DEF index_name = '&1.'; 24 | UNDEF 1; 25 | -- 26 | COL schema_name NEW_V schema_name NOPRI; 27 | SELECT owner AS schema_name FROM dba_indexes WHERE index_name = '&&index_name.'; 28 | -- 29 | VAR v_used_bytes NUMBER; 30 | VAR v_alloc_bytes NUMBER; 31 | BEGIN 32 | DBMS_SPACE.create_index_cost ( 33 | ddl => DBMS_METADATA.get_ddl('INDEX', '&&index_name.', '&&schema_name.'), 34 | used_bytes => :v_used_bytes, 35 | alloc_bytes => :v_alloc_bytes 36 | ); 37 | END; 38 | / 39 | COL used_gb FOR 999,990.000; 40 | COL alloc_gb FOR 999,990.000; 41 | SELECT :v_used_bytes/1e9 AS used_gb, :v_alloc_bytes/1e9 AS alloc_gb FROM DUAL; 42 | -- 43 | ROLLBACK; 44 | DELETE plan_table; 45 | BEGIN 46 | EXECUTE IMMEDIATE('EXPLAIN PLAN FOR '||DBMS_METADATA.get_ddl('INDEX', '&&index_name.', '&&schema_name.')); 47 | END; 48 | / 49 | COMMIT; 50 | SET HEA ON PAGES 0; 51 | PRO 52 | SELECT plan_table_output FROM 53 | TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', NULL, 'ADVANCED')) 54 | / 55 | SET HEA ON PAGES 100; 56 | CLEAR COLUMNS; 57 | -------------------------------------------------------------------------------- /cs_estimate_table_size.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_estimate_table_size.sql 4 | -- 5 | -- Purpose: Estimate Table Size 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_estimate_table_size.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 21 | PRO 22 | PRO 1. Enter Table Name: 23 | DEF table_name = '&1.'; 24 | UNDEF 1; 25 | -- 26 | COL schema_name NEW_V schema_name NOPRI; 27 | SELECT owner AS schema_name FROM dba_tables WHERE table_name = '&&table_name.'; 28 | -- 29 | VAR v_used_bytes NUMBER; 30 | VAR v_alloc_bytes NUMBER; 31 | DECLARE 32 | l_rec dba_tables%ROWTYPE; 33 | BEGIN 34 | SELECT * INTO l_rec FROM dba_tables WHERE owner = '&&schema_name.' AND table_name = '&&table_name.'; 35 | -- 36 | IF l_rec.tablespace_name IS NULL THEN 37 | SELECT MAX(tablespace_name) 38 | INTO l_rec.tablespace_name 39 | FROM dba_segments 40 | WHERE owner = '&&schema_name.' 41 | AND segment_name = '&&table_name.' 42 | AND segment_type LIKE 'TABLE%'; 43 | END IF; 44 | -- 45 | DBMS_SPACE.create_table_cost ( 46 | tablespace_name => l_rec.tablespace_name, 47 | avg_row_size => l_rec.avg_row_len, 48 | row_count => l_rec.num_rows, 49 | pct_free => l_rec.pct_free, 50 | used_bytes => :v_used_bytes, 51 | alloc_bytes => :v_alloc_bytes 52 | ); 53 | END; 54 | / 55 | COL used_gb FOR 999,990.000; 56 | COL alloc_gb FOR 999,990.000; 57 | SELECT :v_used_bytes/1e9 AS used_gb, :v_alloc_bytes/1e9 AS alloc_gb FROM DUAL; 58 | -- 59 | ROLLBACK; 60 | DELETE plan_table; 61 | BEGIN 62 | EXECUTE IMMEDIATE('EXPLAIN PLAN FOR CREATE TABLE &&schema_name..&&table_name._ AS SELECT * FROM &&schema_name..&&table_name.'); 63 | END; 64 | / 65 | COMMIT; 66 | SET HEA ON PAGES 0; 67 | PRO 68 | SELECT plan_table_output FROM 69 | TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', NULL, 'ADVANCED')) 70 | / 71 | SET HEA ON PAGES 100; 72 | CLEAR COLUMNS; 73 | -------------------------------------------------------------------------------- /cs_hanganalyze.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_hanganalyze.sql 4 | -- 5 | -- Purpose: Generate Hanganalyze Trace 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_hanganalyze.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | ALTER SESSION SET tracefile_identifier = 'iod_hanganalyze'; 21 | COL trace_file NEW_V trace_file; 22 | SELECT value trace_file FROM v$diag_info WHERE name = 'Default Trace File'; 23 | oradebug setmypid 24 | oradebug unlimit 25 | oradebug hanganalyze 3 26 | oradebug hanganalyze 3 27 | oradebug hanganalyze 3 28 | oradebug hanganalyze 3 29 | oradebug hanganalyze 3 30 | oradebug hanganalyze 3 31 | oradebug tracefile_name 32 | HOS cp &&trace_file. /tmp 33 | -------------------------------------------------------------------------------- /cs_hexdump_to_timestamp.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_hexdump_to_timestamp.sql 4 | -- 5 | -- Purpose: Convert Hexadecimal Dump to Time 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_hexdump_to_timestamp.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | DEF timestamp_as_hexdump = '&1.'; 21 | -- 22 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 23 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 24 | ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF6'; 25 | -- 26 | COL time FOR A20; 27 | COL timestamp FOR A30; 28 | -- 29 | WITH 30 | FUNCTION get_date (p_hexdump IN VARCHAR2) 31 | RETURN DATE 32 | IS 33 | l_date DATE; 34 | BEGIN 35 | DBMS_STATS.convert_raw_value(rawval => HEXTORAW(p_hexdump), resval => l_date); 36 | RETURN l_date; 37 | END get_date; 38 | FUNCTION get_timestamp (p_hexdump IN VARCHAR2) 39 | RETURN TIMESTAMP 40 | IS 41 | BEGIN 42 | RETURN 43 | TO_TIMESTAMP( 44 | TO_CHAR(get_date(p_hexdump), 'YYYY-MM-DD"T"HH24:MI:SS')|| 45 | ROUND(TO_NUMBER(SUBSTR('&×tamp_as_hexdump.', LENGTH('&×tamp_as_hexdump.') - 7), 'XXXXXXXX')/POWER(10,9), 6), 46 | 'YYYY-MM-DD"T"HH24:MI:SS.FF6'); 47 | END get_timestamp; 48 | SELECT get_date('&×tamp_as_hexdump.') AS time, get_timestamp('&×tamp_as_hexdump.') AS timestamp FROM DUAL 49 | / 50 | -- -------------------------------------------------------------------------------- /cs_internal/cs_active_sessions.sql: -------------------------------------------------------------------------------- 1 | COL con_id FOR 999 HEA 'Con|ID'; 2 | COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; 3 | COL sid_serial# FOR A12 HEA 'Sid,Serial#'; 4 | COL child_number FOR 999999 HEA 'Child|Number'; 5 | COL sql_exec_start FOR A19 HEA 'SQL Exec Start'; 6 | COL elapsed_seconds FOR 999,990 HEA 'Elapsed|Seconds'; 7 | COL current_timed_event FOR A80 HEA 'Current Timed Event'; 8 | -- 9 | PRO 10 | PRO ACTIVE SESSIONS (v$session) 11 | PRO ~~~~~~~~~~~~~~~ 12 | SELECT s.con_id, 13 | c.name AS pdb_name, 14 | s.machine, 15 | s.state||CASE WHEN s.state LIKE 'WAITED%' THEN ' (avg of '||ROUND(AVG(s.wait_time_micro))||'us)' END|| 16 | CASE WHEN s.wait_class IS NOT NULL THEN ' on '||s.wait_class||CASE WHEN s.event IS NOT NULL THEN ' - '||s.event END END AS current_timed_event, 17 | COUNT(*) AS sessions 18 | FROM v$session s, 19 | v$containers c 20 | WHERE s.sql_id = '&&cs_sql_id.' 21 | AND s.status = 'ACTIVE' 22 | AND c.con_id = s.con_id 23 | GROUP BY 24 | s.con_id, 25 | c.name, 26 | s.machine, 27 | s.state, 28 | s.wait_class, 29 | s.event 30 | ORDER BY 31 | s.con_id, 32 | s.machine, 33 | s.state, 34 | s.wait_class, 35 | s.event 36 | / 37 | -- 38 | --BREAK ON con_id ON pdb_name ON machine SKIP PAGE; 39 | SELECT s.con_id, 40 | c.name AS pdb_name, 41 | machine, 42 | s.sid||','||s.serial# AS sid_serial#, 43 | s.sql_child_number AS child_number, 44 | TO_CHAR(s.sql_exec_start, '&&cs_datetime_full_format.') sql_exec_start, 45 | (SYSDATE - s.sql_exec_start) * 24 * 3600 AS elapsed_seconds, 46 | s.state||CASE WHEN s.state LIKE 'WAITED%' THEN ' ('||s.wait_time_micro||'us)' END|| 47 | CASE WHEN s.wait_class IS NOT NULL THEN ' on '||s.wait_class||CASE WHEN s.event IS NOT NULL THEN ' - '||s.event END END AS current_timed_event 48 | FROM v$session s, 49 | v$containers c 50 | WHERE s.sql_id = '&&cs_sql_id.' 51 | AND s.status = 'ACTIVE' 52 | AND c.con_id = s.con_id 53 | ORDER BY 54 | s.con_id, 55 | s.machine, 56 | s.sql_exec_start 57 | / 58 | -- 59 | --CLEAR BREAK; -------------------------------------------------------------------------------- /cs_internal/cs_active_sessions_peaks_internal_v6.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO Active Sessions Peaks (when greater than &×_cpu_cores.x NUM_CPU_CORES) 3 | PRO ~~~~~~~~~~~~~~~~~~~~~ 4 | COL begin_peak FOR A19 HEA 'Aprox|Start Time'; 5 | COL end_peak FOR A19 HEA 'Aprox|End Time'; 6 | COL seconds FOR 999,990 HEA 'Aprox|Secs'; 7 | COL sessions_peak FOR 999,990 HEA 'Max|Sessions'; 8 | COL sql_statement FOR A64 HEA 'Top SQL Statement' TRUNC; 9 | COL timed_event FOR A50 HEA 'Top Timed Event' TRUNC; 10 | COL pdb_name FOR A35 HEA 'Top PDB Name(CON_ID)' TRUNC; 11 | -- 12 | BREAK ON REPORT; 13 | COMPUTE SUM OF seconds ON REPORT; 14 | -- 15 | SELECT TO_CHAR(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS') AS begin_peak, 16 | TO_CHAR(timestamp + (cost/3600/24), 'YYYY-MM-DD"T"HH24:MI:SS') AS end_peak, 17 | cost AS seconds, 18 | cardinality AS sessions_peak, 19 | -- statement_id AS sql_id, 20 | -- remarks AS sql_text, 21 | statement_id||' '||SUBSTR(remarks, 1, 50) AS sql_statement, 22 | -- operation AS session_state, 23 | -- options AS wait_class, 24 | -- object_node AS event, 25 | CASE operation WHEN 'ON CPU' THEN operation ELSE options||' - '||object_node END AS timed_event, 26 | -- object_owner AS pdb_name, 27 | -- plan_id AS con_id 28 | object_owner||'('||plan_id||')' AS pdb_name 29 | FROM plan_table 30 | ORDER BY 1 31 | / 32 | -- 33 | PRO NOTE: Displayed values for 3 dimensions (SQL, Timed Event and PDB), correspond to sample time of Max Sessions 34 | -------------------------------------------------------------------------------- /cs_internal/cs_ash_analytics_footer.sql: -------------------------------------------------------------------------------- 1 | PRO
 2 | PRO #01 &&aas_01.  &&series_01.
 3 | PRO #02 &&aas_02.  &&series_02.
 4 | PRO #03 &&aas_03.  &&series_03.
 5 | PRO #04 &&aas_04.  &&series_04.
 6 | PRO #05 &&aas_05.  &&series_05.
 7 | PRO #06 &&aas_06.  &&series_06.
 8 | PRO #07 &&aas_07.  &&series_07.
 9 | PRO #08 &&aas_08.  &&series_08.
10 | PRO #09 &&aas_09.  &&series_09.
11 | PRO #10 &&aas_10.  &&series_10.
12 | PRO #11 &&aas_11.  &&series_11.
13 | PRO #12 &&aas_12.  &&series_12.
14 | PRO #13 &&aas_13.  &&series_13.
15 | PRO 
16 | -------------------------------------------------------------------------------- /cs_internal/cs_bind_capture_hist.sql: -------------------------------------------------------------------------------- 1 | -- 2 | /****************************************************************************************/ 3 | -- 4 | @@&&cs_set_container_to_cdb_root. 5 | -- 6 | COL con_id FOR 999 HEA 'Con|ID'; 7 | COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; 8 | COL last_captured FOR A19 HEA 'Last Captured'; 9 | COL position FOR 990 HEA 'Pos'; 10 | COL datatype_string FOR A15 HEA 'Data Type'; 11 | COL name_and_value FOR A200 HEA 'Bind Name and Value'; 12 | COL max_length FOR 999999 HEA 'Max|Length'; 13 | -- 14 | BRE ON last_captured SKIP 1 ON con_id ON pdb_name; 15 | -- 16 | PRO 17 | PRO CAPTURED BINDS (dba_hist_sqlbind) - last &&cs_binds_days. day(s) 18 | PRO ~~~~~~~~~~~~~~ 19 | SELECT DISTINCT 20 | TO_CHAR(h.last_captured, '&&cs_datetime_full_format.') AS last_captured, 21 | h.position, 22 | h.datatype_string, 23 | h.max_length, 24 | h.name||' = '||h.value_string AS name_and_value, 25 | c.name AS pdb_name, 26 | h.con_id 27 | FROM dba_hist_sqlbind h, 28 | v$containers c 29 | WHERE h.sql_id = '&&cs_sql_id.' 30 | AND h.dbid = '&&cs_dbid.' 31 | AND h.instance_number = '&&cs_instance_number.' 32 | AND &&cs_con_id. IN (1, h.con_id) 33 | AND h.last_captured BETWEEN SYSDATE - &&cs_binds_days. AND SYSDATE -- filter out bogus future dates such as 2106-02-07T06:13:16 34 | AND c.con_id = h.con_id 35 | ORDER BY 36 | 1, 2 37 | / 38 | -- 39 | CL BRE; 40 | -- 41 | @@&&cs_set_container_to_curr_pdb. 42 | -- 43 | /****************************************************************************************/ 44 | -- -------------------------------------------------------------------------------- /cs_internal/cs_bind_capture_mem.sql: -------------------------------------------------------------------------------- 1 | COL con_id FOR 999 HEA 'Con|ID'; 2 | COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; 3 | COL last_captured FOR A19 HEA 'Last Captured'; 4 | COL child_number FOR 999999 HEA 'Child|Number'; 5 | COL position FOR 990 HEA 'Pos'; 6 | COL datatype_string FOR A15 HEA 'Data Type'; 7 | COL name_and_value FOR A200 HEA 'Bind Name and Value'; 8 | COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; 9 | COL max_length FOR 999999 HEA 'Max|Length'; 10 | -- 11 | BRE ON last_captured SKIP 1 ON con_id ON pdb_name ON plan_hash_value ON child_number; 12 | -- 13 | PRO 14 | PRO CAPTURED BINDS (v$sql_bind_capture) 15 | PRO ~~~~~~~~~~~~~~ 16 | SELECT DISTINCT 17 | TO_CHAR(c.last_captured, '&&cs_datetime_full_format.') AS last_captured, 18 | c.child_number, 19 | s.plan_hash_value, 20 | c.position, 21 | c.datatype_string, 22 | c.max_length, 23 | c.name||' = '||c.value_string AS name_and_value, 24 | x.name AS pdb_name, 25 | c.con_id 26 | FROM v$sql_bind_capture c, 27 | v$sql s, 28 | v$containers x 29 | WHERE c.sql_id = '&&cs_sql_id.' 30 | AND c.last_captured < SYSDATE -- filter out bogus future dates such as 2106-02-07T06:13:16 31 | AND s.address(+) = c.address 32 | AND s.hash_value(+) = c.hash_value 33 | AND s.sql_id(+) = c.sql_id 34 | AND s.child_address(+) = c.child_address 35 | AND s.child_number(+) = c.child_number 36 | AND s.con_id(+) = c.con_id 37 | AND x.con_id = c.con_id 38 | ORDER BY 39 | 1, 2, 4 40 | / 41 | -- 42 | CL BRE; 43 | -- 44 | -------------------------------------------------------------------------------- /cs_internal/cs_cdb_warn.sql: -------------------------------------------------------------------------------- 1 | -- warn if executed from CDB$ROOT 2 | SET SERVEROUT ON; 3 | BEGIN 4 | IF SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT' THEN 5 | DBMS_OUTPUT.put_line(CHR(10)); 6 | DBMS_OUTPUT.put_line('***'); 7 | DBMS_OUTPUT.put_line('*** On CDB$ROOT ***'); 8 | DBMS_OUTPUT.put_line('***'); 9 | DBMS_OUTPUT.put_line(CHR(10)); 10 | END IF; 11 | END; 12 | / 13 | SET SERVEROUT OFF; 14 | BEGIN 15 | IF SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT' THEN 16 | DBMS_LOCK.sleep(1); 17 | END IF; 18 | END; 19 | / 20 | -------------------------------------------------------------------------------- /cs_internal/cs_cdb_warn2.sql: -------------------------------------------------------------------------------- 1 | -- warn if executed from CDB$ROOT 2 | SET SERVEROUT ON; 3 | BEGIN 4 | IF SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT' THEN 5 | DBMS_OUTPUT.put_line(CHR(10)); 6 | DBMS_OUTPUT.put_line('***'); 7 | DBMS_OUTPUT.put_line('*** On CDB$ROOT ***'); 8 | DBMS_OUTPUT.put_line('***'); 9 | DBMS_OUTPUT.put_line('*** This script is expeted to execute from a PDB ***'); 10 | DBMS_OUTPUT.put_line('***'); 11 | DBMS_OUTPUT.put_line(CHR(10)); 12 | END IF; 13 | END; 14 | / 15 | SET SERVEROUT OFF; 16 | BEGIN 17 | IF SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT' THEN 18 | DBMS_LOCK.sleep(1); 19 | END IF; 20 | END; 21 | / 22 | -------------------------------------------------------------------------------- /cs_internal/cs_cursors_not_shared.sql: -------------------------------------------------------------------------------- 1 | SET HEA OFF PAGES 0 TERM OFF; 2 | SPO &&cs_file_dir.cursors_not_shared_dynamic.sql 3 | SELECT CASE WHEN ROWNUM = 1 THEN '( ' ELSE ', ' END||column_name 4 | FROM dba_tab_columns 5 | WHERE owner = 'SYS' 6 | AND table_name = 'V_$SQL_SHARED_CURSOR' 7 | AND data_type = 'VARCHAR2' 8 | AND data_length = 1 9 | / 10 | SPO OFF; 11 | GET &&cs_file_dir.cursors_not_shared_dynamic.sql 12 | I ) 13 | I ) 14 | I WHERE value = 'Y' 15 | I AND sql_id = '&&cs_sql_id.' 16 | I GROUP BY reason_not_shared, con_id ) 17 | I SELECT s.con_id, c.name AS pdb_name, s.cursors_count, s.reason_not_shared 18 | I FROM s, v$containers c 19 | I WHERE c.con_id = s.con_id 20 | I ORDER BY s.con_id, s.cursors_count DESC, s.reason_not_shared 21 | 0 ( value FOR reason_not_shared IN 22 | 0 FROM v$sql_shared_cursor UNPIVOT 23 | 0 SELECT COUNT(*) AS cursors_count, reason_not_shared, con_id 24 | 0 WITH s AS ( 25 | L 26 | !rm &&cs_file_dir.cursors_not_shared_dynamic.sql 27 | SET HEA ON PAGES 100 TERM ON; 28 | COL con_id FOR 999 HEA 'Con|ID'; 29 | COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; 30 | COL cursors_count FOR 999,990 HEA 'Cursors'; 31 | COL reason_not_shared FOR A30 HEA 'Reason not Shared'; 32 | SPO &&cs_file_name..txt APP 33 | PRO 34 | PRO CURSORS NOT SHARED (v$sql_shared_cursor) 35 | PRO ~~~~~~~~~~~~~~~~~~ 36 | / 37 | -------------------------------------------------------------------------------- /cs_internal/cs_file_prefix.sql: -------------------------------------------------------------------------------- 1 | SELECT '&&cs_file_dir.'||'&&cs_reference_sanitized._&&cs_file_date_time.Z_'|| 2 | CASE '&&cs_odis.' WHEN 'N' THEN UPPER('&&cs_realm._')||UPPER('&&cs_rgn._')||UPPER('&&cs_locale._') END|| 3 | UPPER('&&cs_db_name._')||UPPER(TRANSLATE('&&cs_con_name.', '*@#$"''', '_____'))|| 4 | UPPER(NVL2('&&cs_other_acronym.', '_&&cs_other_acronym.', NULL))||CASE '&&cs_onsr.' WHEN 'Y' THEN '_ONSR' END||CASE '&&cs_odis.' WHEN 'Y' THEN '_ODIS' END||CASE '&&cs_dedicated.' WHEN 'Y' THEN '_DEDICATED' END|| 5 | NVL2('&&who_am_i.', '_&&who_am_i.', NULL) 6 | AS cs_file_prefix 7 | FROM DUAL 8 | / 9 | -- 10 | -------------------------------------------------------------------------------- /cs_internal/cs_internal_list_dg_members.sql: -------------------------------------------------------------------------------- 1 | SET SERVEROUT ON; 2 | BEGIN -- using pl/sql to avoid a blank line 3 | FOR i IN (SELECT RPAD(r.role, 13, ' ')||': '||d.db_unique_name||' HOST:'||h.host_name||CASE h.host_name WHEN '&&cs_host_name.' THEN ' <-' END AS dg_members 4 | FROM 5 | (SELECT x.value db_unique_name, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'DATABASE') d, 6 | (SELECT x.value role, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'role') r, 7 | (SELECT x.value host_name, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'host') h 8 | WHERE r.rn = d.rn AND h.rn = d.rn 9 | ORDER BY r.role DESC, d.db_unique_name 10 | ) 11 | LOOP 12 | DBMS_OUTPUT.put_line(i.dg_members); 13 | END LOOP; 14 | END; 15 | / 16 | SET SERVEROUT OFF; -------------------------------------------------------------------------------- /cs_internal/cs_last_snap.sql: -------------------------------------------------------------------------------- 1 | 2 | DEF cs_max_snap_id = ''; 3 | COL cs_max_snap_id NEW_V cs_max_snap_id NOPRI; 4 | DEF cs_max_snap_end_time = ''; 5 | COL cs_max_snap_end_time NEW_V cs_max_snap_end_time NOPRI; 6 | DEF cs_last_snap_mins = ''; 7 | COL cs_last_snap_mins NEW_V cs_last_snap_mins NOPRI; 8 | DEF cs_last_snap_secs = ''; 9 | COL cs_last_snap_secs NEW_V cs_last_snap_secs NOPRI; 10 | SELECT TRIM(TO_CHAR(snap_id)) cs_max_snap_id, 11 | TRIM(TO_CHAR(end_interval_time, '&&cs_datetime_full_format.')) cs_max_snap_end_time, 12 | TRIM(TO_CHAR(ROUND((SYSDATE - CAST(end_interval_time AS DATE)) * 24 * 60, 1), '99990.0')) AS cs_last_snap_mins, 13 | TRIM(TO_CHAR(((86400 * EXTRACT(DAY FROM (SYSTIMESTAMP - end_interval_time)) + (3600 * EXTRACT(HOUR FROM (systimestamp - end_interval_time))) + (60 * EXTRACT(MINUTE FROM (systimestamp - end_interval_time))) + EXTRACT(SECOND FROM (systimestamp - end_interval_time)))), '9999990.000')) AS cs_last_snap_secs 14 | FROM dba_hist_snapshot 15 | WHERE dbid = TO_NUMBER('&&cs_dbid.') 16 | AND instance_number = TO_NUMBER('&&cs_instance_number.') 17 | ORDER BY 18 | snap_id DESC 19 | FETCH FIRST 1 ROW ONLY 20 | / -------------------------------------------------------------------------------- /cs_internal/cs_latency_internal_foot.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO 1. Top &&cs_top_latency. active SQL per SQL Type as per DB Latency (iff DB AAS > &&cs_aas_threshold_latency.) UNION Top &&cs_top_load. active SQL per SQL Type as per DB Load (iff DB AAS > &&cs_aas_threshold_load.) ordered by DB Latency descending. 3 | PRO 2. Includes only SQL with DB Latency > &&cs_ms_threshold_latency. milliseconds per execution, and which has been active recently. 4 | PRO 3. For an extended output use le.sql (cs_latency_extended.sql). For a reduced output use l.sql (cs_latency.sql). For a reduced output without a report heading use la.sql. 5 | PRO 4. For a time range use lr.sql (cs_latency_range.sql) OR lre.sql (cs_latency_range_extended.sql), both from AWR (15m granularity); or cs_latency_range_iod.sql and cs_latency_range_iod_extended.sql, both from IOD table (1m granularity). 6 | PRO 5. For the last 1 minute use cs_latency_1m.sql OR cs_latency_1m_extended.sql. 7 | PRO 6. For an interval of N seconds use cs_latency_snapshot.sql or cs_latency_snapshot_extended.sql. 8 | PRO -------------------------------------------------------------------------------- /cs_internal/cs_latency_internal_snapshot.sql: -------------------------------------------------------------------------------- 1 | -- sets the start point of search space 2 | COL cs_sample_time_from NEW_V cs_sample_time_from NOPRI; 3 | SELECT TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS cs_sample_time_from FROM DUAL 4 | / 5 | -- 6 | VAR cs_time_cs_begin NUMBER; 7 | EXEC :cs_time_cs_begin := DBMS_UTILITY.get_time; 8 | PRO Begin Snapshot... please wait... 9 | EXEC &&cs_tools_schema..iod_sqlstats.snapshot_sqlstats(p_snap_type => '&&cs_snap_type.', p_sid => TO_NUMBER('&&cs_sid.')); 10 | PRO Sleeping &&cs_snapshot_seconds. seconds... please wait... 11 | EXEC DBMS_LOCK.sleep(seconds => &&cs_snapshot_seconds. - LEAST(TRUNC((DBMS_UTILITY.get_time - :cs_time_cs_begin)/100), &&cs_snapshot_seconds.)); 12 | PRO End Snapshot... please wait... 13 | EXEC &&cs_tools_schema..iod_sqlstats.snapshot_sqlstats(p_snap_type => '&&cs_snap_type.', p_sid => TO_NUMBER('&&cs_sid.')); 14 | -- 15 | -- sets the end point of search space 16 | COL cs_sample_time_to NEW_V cs_sample_time_to NOPRI; 17 | SELECT TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS cs_sample_time_to FROM DUAL 18 | / -------------------------------------------------------------------------------- /cs_internal/cs_load_per_machine.sql: -------------------------------------------------------------------------------- 1 | COL machine FOR A64 HEA 'Machine (Application Server)'; 2 | COL load_percent FOR 990.0 HEA 'Load|Perc%'; 3 | BREAK ON REPORT; 4 | COMPUTE SUM LABEL "TOTAL" OF load_percent ON REPORT; 5 | -- 6 | PRO 7 | PRO LOAD PER MACHINE (v$active_session_history) 8 | PRO ~~~~~~~~~~~~~~~~ 9 | WITH 10 | load AS ( 11 | SELECT h.machine, 12 | COUNT(DISTINCT TO_CHAR(sql_exec_start, 'YYYYMMDDHH24MISS')||'.'||TO_CHAR(sql_exec_id)) AS executions 13 | FROM v$active_session_history h 14 | WHERE h.sql_id = '&&cs_sql_id.' 15 | GROUP BY 16 | h.machine 17 | ) 18 | SELECT machine, 19 | 100 * executions / SUM(executions) OVER () AS load_percent 20 | FROM load 21 | ORDER BY 22 | machine 23 | / 24 | -- 25 | PRO 26 | PRO LOAD PER MACHINE 7d (dba_hist_active_sess_history) 27 | PRO ~~~~~~~~~~~~~~~~~~~ 28 | WITH 29 | load AS ( 30 | SELECT h.machine, 31 | COUNT(DISTINCT TO_CHAR(sql_exec_start, 'YYYYMMDDHH24MISS')||'.'||TO_CHAR(sql_exec_id)) AS executions 32 | FROM dba_hist_active_sess_history h 33 | WHERE h.sql_id = '&&cs_sql_id.' 34 | AND h.dbid = TO_NUMBER('&&cs_dbid.') 35 | AND h.instance_number = TO_NUMBER('&&cs_instance_number.') 36 | AND h.sample_time > SYSDATE - 7 37 | AND h.snap_id >= &&cs_7d_snap_id. 38 | GROUP BY 39 | h.machine 40 | ) 41 | SELECT machine, 42 | 100 * executions / SUM(executions) OVER () AS load_percent 43 | FROM load 44 | ORDER BY 45 | machine 46 | / 47 | -- 48 | CLEAR BREAK COMPUTE; 49 | -------------------------------------------------------------------------------- /cs_internal/cs_lobs_internal.sql: -------------------------------------------------------------------------------- 1 | COL owner FOR A30; 2 | COL table_name FOR A30; 3 | COL tablespace_name FOR A30; 4 | COL column_name FOR A30; 5 | COL segment_name FOR A30; 6 | COL index_name FOR A30; 7 | COL encrypt FOR A8; 8 | COL compression FOR A12; 9 | COL deduplication FOR A14; 10 | COL in_row FOR A7; 11 | COL partitioned FOR A12; 12 | COL securefile FOR A11; 13 | -- 14 | SELECT l.owner, 15 | l.table_name, 16 | l.tablespace_name, 17 | l.column_name, 18 | l.segment_name, 19 | l.index_name, 20 | l.cache, 21 | l.encrypt, 22 | l.compression, 23 | l.deduplication, 24 | l.in_row, 25 | l.partitioned, 26 | l.securefile 27 | FROM dba_lobs l 28 | WHERE l.table_name = COALESCE('&&specific_table.', l.table_name) 29 | AND l.owner = COALESCE('&&specific_owner.', l.owner) 30 | ORDER BY 31 | l.owner, 32 | l.table_name, 33 | l.tablespace_name, 34 | l.column_name 35 | / 36 | 37 | -------------------------------------------------------------------------------- /cs_internal/cs_locks_mon_internal.sql: -------------------------------------------------------------------------------- 1 | @@cs_locks_internal.sql 2 | -------------------------------------------------------------------------------- /cs_internal/cs_max_ash_analytics_footer.sql: -------------------------------------------------------------------------------- 1 | PRO
 2 | PRO #01 &&active_sessions_01.  &&series_01.
 3 | PRO #02 &&active_sessions_02.  &&series_02.
 4 | PRO #03 &&active_sessions_03.  &&series_03.
 5 | PRO #04 &&active_sessions_04.  &&series_04.
 6 | PRO #05 &&active_sessions_05.  &&series_05.
 7 | PRO #06 &&active_sessions_06.  &&series_06.
 8 | PRO #07 &&active_sessions_07.  &&series_07.
 9 | PRO #08 &&active_sessions_08.  &&series_08.
10 | PRO #09 &&active_sessions_09.  &&series_09.
11 | PRO #10 &&active_sessions_10.  &&series_10.
12 | PRO #11 &&active_sessions_11.  &&series_11.
13 | PRO #12 &&active_sessions_12.  &&series_12.
14 | PRO #13 &&active_sessions_13.  &&series_13.
15 | PRO 
16 | -------------------------------------------------------------------------------- /cs_internal/cs_null.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/carlos-sierra/cscripts/50f4ebee1ac3233de48eb5e6e00655a2901ea61a/cs_internal/cs_null.sql -------------------------------------------------------------------------------- /cs_internal/cs_plans_awr_1.sql: -------------------------------------------------------------------------------- 1 | COL con_id FOR 999 HEA 'Con|ID'; 2 | COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; 3 | COL timestamp FOR A19 HEA 'Timestamp'; 4 | COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; 5 | -- 6 | PRO 7 | PRO AWR PLANS (dba_hist_sql_plan) 8 | PRO ~~~~~~~~~ 9 | SELECT TO_CHAR(h.timestamp, '&&cs_datetime_full_format.') timestamp, 10 | plan_hash_value 11 | FROM dba_hist_sql_plan h 12 | WHERE h.sql_id = '&&cs_sql_id.' 13 | AND ('&&cs_plan_hash_value.' IS NULL OR h.plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.')) 14 | AND h.id = 0 15 | AND h.dbid = TO_NUMBER('&&cs_dbid.') 16 | ORDER BY 17 | h.timestamp 18 | / 19 | -------------------------------------------------------------------------------- /cs_internal/cs_plans_awr_2.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO AWR PLANS - DISPLAY (dbms_xplan.display_awr) 3 | PRO ~~~~~~~~~~~~~~~~~~~ 4 | SET HEA OFF PAGES 0; 5 | WITH 6 | plans_by_timestamp AS ( 7 | SELECT /*+ MATERIALIZE NO_MERGE */ 8 | h.sql_id, 9 | h.plan_hash_value 10 | FROM dba_hist_sql_plan h -- cannot use cdb_hist_sql_plan since DBMS_XPLAN only executes with a PDB (would need to use DBMS_SQL to execue from CDB$ROOT) 11 | WHERE h.sql_id = '&&cs_sql_id.' 12 | AND ('&&cs_plan_hash_value.' IS NULL OR h.plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.')) 13 | AND h.id = 0 14 | AND h.dbid = TO_NUMBER('&&cs_dbid.') 15 | ORDER BY 16 | h.timestamp 17 | ) 18 | SELECT p.plan_table_output 19 | FROM plans_by_timestamp h, 20 | TABLE(DBMS_XPLAN.display_awr(h.sql_id, h.plan_hash_value, NULL, 'ADVANCED')) p 21 | / 22 | SET HEA ON PAGES 100; 23 | -- 24 | -------------------------------------------------------------------------------- /cs_internal/cs_plans_mem_0.sql: -------------------------------------------------------------------------------- 1 | VAR cs_execution_plan CLOB; 2 | EXEC :cs_execution_plan := NULL; 3 | -- SET SERVEROUT ON; 4 | BEGIN 5 | FOR i IN (SELECT plan_table_output FROM TABLE(DBMS_XPLAN.display_cursor(sql_id => '&&cs_sql_id.', cursor_child_no => (SELECT child_number FROM v$sql WHERE sql_id = '&&cs_sql_id.' ORDER BY last_active_time DESC FETCH FIRST 1 ROW ONLY), format => 'TYPICAL -NOTE -PREDICATE'))) 6 | LOOP 7 | IF :cs_execution_plan IS NOT NULL AND LENGTH(i.plan_table_output) > 1 THEN 8 | -- DBMS_OUTPUT.put_line(i.plan_table_output); 9 | DBMS_LOB.writeappend(:cs_execution_plan, LENGTH(i.plan_table_output) + 1, i.plan_table_output||CHR(10)); 10 | END IF; 11 | IF i.plan_table_output LIKE 'Plan hash value:%' THEN 12 | :cs_execution_plan := i.plan_table_output||CHR(10); 13 | END IF; 14 | END LOOP; 15 | END; 16 | / 17 | PRO 18 | PRO LATEST PLAN IN MEMORY - DISPLAY (dbms_xplan.display_cursor) 19 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 20 | PRO 21 | SET HEA OFF PAGES 0; 22 | PRINT :cs_execution_plan 23 | SET HEA ON PAGES 100; 24 | -- -------------------------------------------------------------------------------- /cs_internal/cs_plans_mem_1.sql: -------------------------------------------------------------------------------- 1 | COL con_id FOR 999 HEA 'Con|ID'; 2 | COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; 3 | COL last_active_time FOR A19 HEA 'Last Active Time'; 4 | COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; 5 | COL child_number FOR 999999 HEA 'Child|Number'; 6 | COL object_status FOR A14 HEA 'Object Status'; 7 | COL is_obsolete FOR A8 HEA 'Is|Obsolete'; 8 | COL is_shareable FOR A9 HEA 'Is|Shareable'; 9 | COL is_bind_aware FOR A9 HEA 'Is Bind|Aware'; 10 | COL is_bind_sensitive FOR A9 HEA 'Is Bind|Sensitive'; 11 | COL parsing_schema_name FOR A30 HEA 'Parsing Schema Name'; 12 | -- 13 | PRO 14 | PRO PLANS IN MEMORY (v$sql) 15 | PRO ~~~~~~~~~~~~~~~ 16 | WITH 17 | ranked_child_cursors AS ( 18 | SELECT /*+ MATERIALIZE NO_MERGE */ 19 | sql_id, 20 | con_id, 21 | child_number, 22 | ROW_NUMBER () OVER (PARTITION BY con_id, plan_hash_value ORDER BY 23 | CASE 24 | WHEN object_status = 'VALID' AND is_obsolete = 'N' AND is_shareable = 'Y' THEN 1 25 | WHEN object_status = 'VALID' AND is_obsolete = 'N' AND is_shareable = 'N' THEN 2 26 | WHEN object_status = 'VALID' AND is_obsolete = 'Y' THEN 3 27 | ELSE 4 28 | END, 29 | last_active_time DESC) AS row_number, 30 | plan_hash_value, 31 | last_active_time, 32 | object_status, 33 | is_obsolete, 34 | is_shareable, 35 | is_bind_sensitive, 36 | is_bind_aware, 37 | parsing_schema_name 38 | FROM v$sql 39 | WHERE sql_id = '&&cs_sql_id.' 40 | AND ('&&cs_plan_hash_value.' IS NULL OR plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.')) 41 | ) 42 | SELECT TO_CHAR(r.last_active_time, '&&cs_datetime_full_format.') AS last_active_time, 43 | r.con_id, 44 | c.name AS pdb_name, 45 | r.child_number, 46 | r.object_status, 47 | r.is_obsolete, 48 | r.is_shareable, 49 | r.is_bind_sensitive, 50 | r.is_bind_aware, 51 | r.parsing_schema_name, 52 | r.plan_hash_value 53 | FROM ranked_child_cursors r, 54 | v$containers c 55 | WHERE r.row_number <= 3 -- up to N most recently active child cursors per plan_hash_value 56 | AND c.con_id = r.con_id 57 | ORDER BY 58 | r.last_active_time, 59 | r.con_id, 60 | r.child_number 61 | / 62 | -- 63 | -------------------------------------------------------------------------------- /cs_internal/cs_primary.sql: -------------------------------------------------------------------------------- 1 | -- warn if executed not on MOUNTED or READ ONLY 2 | SET TAB OFF FEED OFF ECHO OFF VER OFF; 3 | COL open_mode NEW_V open_mode NOPRI; 4 | COL database_role NEW_V database_role NOPRI; 5 | COL dynamic_script NEW_V dynamic_script NOPRI; 6 | SELECT open_mode, database_role, CASE WHEN open_mode = 'READ WRITE' AND database_role = 'PRIMARY' THEN 'cs_null.sql' ELSE 'cs_primary_warn.sql' END AS dynamic_script FROM v$database 7 | / 8 | @@&&dynamic_script. 9 | -------------------------------------------------------------------------------- /cs_internal/cs_primary_warn.sql: -------------------------------------------------------------------------------- 1 | PRO *** 2 | PRO *** v$database.open_mode : &&open_mode. 3 | PRO *** v$database.database_role: &&database_role. 4 | PRO *** 5 | PRO 6 | PAUSE Hit "return" to continue; or "control-c" then "return" to exit: -------------------------------------------------------------------------------- /cs_internal/cs_print_sql_text.sql: -------------------------------------------------------------------------------- 1 | SET HEA OFF; 2 | -- PRINT :cs_sql_text 3 | PRINT :cs_zapper_managed_sql_banner 4 | SET HEA ON; -------------------------------------------------------------------------------- /cs_internal/cs_recent_sessions.sql: -------------------------------------------------------------------------------- 1 | COL con_id FOR 999 HEA 'Con|ID'; 2 | COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; 3 | COL machine FOR A64 HEA 'Machine (Application Server)'; 4 | COL samples FOR 999,999 HEA 'Samples'; 5 | COL min_sample_time FOR A19 HEA 'Min Sample Time'; 6 | COL max_sample_time FOR A19 HEA 'Max Sample Time'; 7 | COL sid_serial# FOR A12 HEA 'Sid,Serial#'; 8 | -- 9 | BREAK ON con_id ON pdb_name ON machine SKIP 1; 10 | -- 11 | PRO 12 | PRO RECENT SESSIONS (v$active_session_history past 15 minutes) 13 | PRO ~~~~~~~~~~~~~~~ 14 | SELECT h.con_id, 15 | c.name AS pdb_name, 16 | h.machine, 17 | COUNT(*) samples, 18 | TO_CHAR(MIN(h.sample_time), '&&cs_datetime_full_format.') AS min_sample_time, 19 | TO_CHAR(MAX(h.sample_time), '&&cs_datetime_full_format.') AS max_sample_time, 20 | h.session_id||','||h.session_serial# AS sid_serial#, 21 | h.sql_plan_hash_value AS plan_hash_value 22 | FROM v$active_session_history h, 23 | v$containers c 24 | WHERE h.sql_id = '&&cs_sql_id.' 25 | AND h.sample_time > SYSDATE - (15/24/60) 26 | AND c.con_id = h.con_id 27 | GROUP BY 28 | h.con_id, 29 | c.name, 30 | h.machine, 31 | h.session_id||','||h.session_serial#, 32 | h.sql_plan_hash_value 33 | ORDER BY 34 | 1, 2, 3, 4 DESC, 5, 6 35 | / 36 | -- 37 | CLEAR BREAK; 38 | -------------------------------------------------------------------------------- /cs_internal/cs_reset.sql: -------------------------------------------------------------------------------- 1 | --SET HEA ON LIN 270 PAGES 60 TAB ON FEED ON ECHO OFF VER ON TRIMS OFF TRIM ON TI OFF TIMI OFF LONG 24000 LONGC 240 SERVEROUT OFF; 2 | SET TERM OFF; 3 | @"/tmp/cs_store_set.sql" 4 | CLEAR BREAK COLUMNS COMPUTE; 5 | SET TERM ON; 6 | -- 7 | -------------------------------------------------------------------------------- /cs_internal/cs_sample_time_boundaries.sql: -------------------------------------------------------------------------------- 1 | COL cs_sample_time_from NEW_V cs_sample_time_from NOPRI; 2 | COL cs_sample_time_to NEW_V cs_sample_time_to NOPRI; 3 | SELECT TO_CHAR(SYSDATE - &&cs_sqlstat_days., '&&cs_datetime_full_format.') AS cs_sample_time_from, TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS cs_sample_time_to FROM DUAL 4 | / -------------------------------------------------------------------------------- /cs_internal/cs_sessions_by_machine_footer.sql: -------------------------------------------------------------------------------- 1 | PRO
 2 | PRO #01  &&series_01.
 3 | PRO #02  &&series_02.
 4 | PRO #03  &&series_03.
 5 | PRO #04  &&series_04.
 6 | PRO #05  &&series_05.
 7 | PRO #06  &&series_06.
 8 | PRO #07  &&series_07.
 9 | PRO #08  &&series_08.
10 | PRO #09  &&series_09.
11 | PRO #10  &&series_10.
12 | PRO #11  &&series_11.
13 | PRO #12  &&series_12.
14 | PRO #13  &&series_13.
15 | PRO 
16 | -------------------------------------------------------------------------------- /cs_internal/cs_set.sql: -------------------------------------------------------------------------------- 1 | WHENEVER SQLERROR CONTINUE; 2 | SET TERM OFF; 3 | STORE SET "/tmp/cs_store_set.sql" REP; 4 | SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 5 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 6 | ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; 7 | --ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD"T"HH24:MI:SS.FF3 TZR'; 8 | ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD"T"HH24:MI:SS.FF3'; 9 | ALTER SESSION SET STATISTICS_LEVEL = 'ALL'; 10 | -- ALTER SESSION SET "_px_cdb_view_enabled" = FALSE; -- set at CDB level on IOD (ODIS) 11 | -- 12 | -- setting hidden parameter "_with_subquery" [{OPTIMIZER}|MATERIALIZE|INLINE] 13 | -- workaround for bug: ORA-00600: internal error code, arguments: [qks3tGCL:1]: set to INLINE 14 | -- ALTER SESSION SET "_with_subquery" = INLINE; 15 | -- workaround for ORA-32036: unsupported case for inlining of query name in WITH clause" on DBMS_SQLTUNE.report_sql_monitor: set to MATERIALIZE (or OPTIMIZER) 16 | -- ALTER SESSION SET "_with_subquery" = MATERIALIZE; 17 | -- ALTER SESSION SET "_with_subquery" = OPTIMIZER; -- removing because of (ODIS) 18 | -- -------------------------------------------------------------------------------- /cs_internal/cs_set_container_to_cdb_root.sql: -------------------------------------------------------------------------------- 1 | COMMIT; 2 | ALTER SESSION SET container = CDB$ROOT; 3 | -------------------------------------------------------------------------------- /cs_internal/cs_set_container_to_curr_pdb.sql: -------------------------------------------------------------------------------- 1 | COMMIT; 2 | ALTER SESSION SET CONTAINER = &&cs_con_name.; -------------------------------------------------------------------------------- /cs_internal/cs_set_quota_tools_owner.sql: -------------------------------------------------------------------------------- 1 | -- gets tablespace 2 | COL cs_default_tablespace NEW_V cs_default_tablespace NOPRI; 3 | SELECT default_tablespace AS cs_default_tablespace FROM dba_users WHERE username = UPPER('&&cs_stgtab_owner.'); 4 | -- set unlimited quota 5 | ALTER USER &&cs_stgtab_owner. QUOTA UNLIMITED ON &&cs_default_tablespace.; 6 | -- -------------------------------------------------------------------------------- /cs_internal/cs_spbl_create_pre.sql: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------------------------------------- 2 | -- 3 | -- cleaup unrelated outdated sql tuning sets (created by older versions of this script) 4 | -- 5 | BEGIN 6 | FOR i IN (SELECT created, owner, name FROM wri$_sqlset_definitions WHERE created < SYSDATE - 1 AND name LIKE 'S%' AND statement_count = 1 ORDER BY 1) 7 | LOOP 8 | DBMS_OUTPUT.put_line('dropping unrelated and outdated sts '||i.owner||' '||i.name||' created on '||TO_CHAR(i.created, '&&cs_datetime_full_format.')); 9 | DBMS_SQLTUNE.drop_sqlset(sqlset_name => i.name, sqlset_owner => i.owner); 10 | END LOOP; 11 | END; 12 | / 13 | -- 14 | -- Oracle Support Document 1276524.1 (ORA-13757: Can't drop SQL Tuning Set) can be found at: https://support.oracle.com/epmos/faces/DocumentDisplay?id=1276524.1 15 | -- in case of ORA-13757: "SQL Tuning Set" "SQL_DETAIL_1491025646579" owned by user "SYS" is active. 16 | -- select description, created, owner from DBA_SQLSET_REFERENCES where sqlset_name = 'SQL_DETAIL_1491025646579'; 17 | -- exec DBMS_SQLTUNE.DROP_TUNING_TASK('SQL_TUNING_1491025649684'); -- take value from description (e.g.: "created by: SQL Tuning Advisor - task: SQL_TUNING_1491025649684") 18 | -- exec dbms_sqltune.drop_sqlset('SQL_DETAIL_1491025646579','SYS'); 19 | -- 20 | -------------------------------------------------------------------------------- /cs_internal/cs_spbl_internal_list_simple.sql: -------------------------------------------------------------------------------- 1 | SELECT TO_CHAR(b.created, '&&cs_timestamp_full_format.') AS created, 2 | TO_CHAR(b.last_modified, '&&cs_datetime_full_format.') AS last_modified, 3 | b.plan_name, 4 | b.enabled, 5 | b.accepted, 6 | b.fixed, 7 | b.reproduced, 8 | b.autopurge, 9 | b.adaptive, 10 | b.origin AS ori, 11 | b.description 12 | FROM dba_sql_plan_baselines b 13 | WHERE b.signature = :cs_signature 14 | ORDER BY 15 | b.created, b.last_modified, b.plan_name 16 | / -------------------------------------------------------------------------------- /cs_internal/cs_spbl_internal_pack.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO Pack plan: "&&cs_plan_name." 3 | DECLARE 4 | l_plans INTEGER; 5 | BEGIN 6 | FOR i IN (SELECT sql_handle, plan_name 7 | FROM dba_sql_plan_baselines 8 | WHERE signature = TO_NUMBER('&&cs_signature.') 9 | AND plan_name = COALESCE('&&cs_plan_name.', plan_name) 10 | ORDER BY signature, plan_name) 11 | LOOP 12 | DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline WHERE sql_handle = i.sql_handle AND obj_name = i.plan_name; 13 | l_plans := DBMS_SPM.pack_stgtab_baseline(table_name => '&&cs_stgtab_prefix._stgtab_baseline', table_owner => '&&cs_stgtab_owner.', sql_handle => i.sql_handle, plan_name => i.plan_name); 14 | END LOOP; 15 | END; 16 | / 17 | -------------------------------------------------------------------------------- /cs_internal/cs_spbl_internal_plan.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO SQL PLAN BASELINES - DISPLAY (dbms_xplan.display_sql_plan_baseline) 3 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 | -- only works from PDB. 5 | SET HEA OFF PAGES 0; 6 | SELECT * FROM TABLE(DBMS_XPLAN.display_sql_plan_baseline('&&cs_sql_handle.', NULL, 'ADVANCED')) WHERE '&&cs_sql_handle.' IS NOT NULL; 7 | SET HEA ON PAGES 100; 8 | -------------------------------------------------------------------------------- /cs_internal/cs_spbl_internal_stgtab.sql: -------------------------------------------------------------------------------- 1 | @@cs_set_quota_tools_owner.sql 2 | -- create staging table 3 | DECLARE 4 | l_exists NUMBER; 5 | BEGIN 6 | SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER('&&cs_stgtab_owner.') AND table_name = UPPER('&&cs_stgtab_prefix._stgtab_baseline'); 7 | IF l_exists = 0 THEN 8 | DBMS_SPM.create_stgtab_baseline(table_name => UPPER('&&cs_stgtab_prefix._stgtab_baseline'), table_owner => UPPER('&&cs_stgtab_owner.'), tablespace_name => UPPER('&&cs_default_tablespace.')); 9 | END IF; 10 | END; 11 | / 12 | -- 13 | PRO 14 | PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; 15 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; 17 | -- -------------------------------------------------------------------------------- /cs_internal/cs_spbl_internal_stgtab_delete.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; 3 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 | SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; 5 | -- 6 | PRO 7 | PRO DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline WHERE signature = COALESCE(TO_NUMBER('&&cs_signature.'), signature) AND obj_name = COALESCE(TRIM('&&cs_plan_name.'), obj_name); 8 | PRO ~~~~~~ 9 | DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline WHERE signature = COALESCE(TO_NUMBER('&&cs_signature.'), signature) AND obj_name = COALESCE(TRIM('&&cs_plan_name.'), obj_name); 10 | PRO 11 | PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; 12 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~ 13 | SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; 14 | -- -------------------------------------------------------------------------------- /cs_internal/cs_spch_internal_category.sql: -------------------------------------------------------------------------------- 1 | BEGIN 2 | FOR i IN (SELECT name 3 | FROM dba_sql_patches 4 | WHERE signature = :cs_signature 5 | AND name = NVL('&&cs_name.', name) 6 | ORDER BY name) 7 | LOOP 8 | $IF DBMS_DB_VERSION.ver_le_12_1 9 | $THEN 10 | DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'CATEGORY', value => '&&cs_category.'); -- 12c 11 | $ELSE 12 | DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'CATEGORY', attribute_value => '&&cs_category.'); -- 19c 13 | $END 14 | END LOOP; 15 | END; 16 | / -------------------------------------------------------------------------------- /cs_internal/cs_spch_internal_create.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | l_name VARCHAR2(64); 3 | l_sql_text CLOB := :cs_sql_text; -- for some bizarre reason we cannot simply pass :cs_sql_text into DBMS_SQLDIAG.create_sql_patch! 4 | BEGIN 5 | -- see also PLSQL_CCFLAGS 6 | $IF DBMS_DB_VERSION.ver_le_12_1 7 | $THEN 8 | --DBMS_SQLDIAG_INTERNAL.i_create_patch(sql_id => '&&cs_sql_id.', hint_text => q'[&&hints_text.]', name => 'cs_&&cs_sql_id.', description => q'[cs_spch_create.sql /*+ &&hints_text. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 12c (this api requires the sql to be in memory) 9 | DBMS_SQLDIAG_INTERNAL.i_create_patch(sql_text => l_sql_text, hint_text => q'[&&hints_text.]', name => 'cs_&&cs_sql_id._'||TO_CHAR(SYSDATE, 'MMDD_HH24MISS'), description => q'[cs_spch_create.sql /*+ &&hints_text. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 12c 10 | $ELSE 11 | --l_name := DBMS_SQLDIAG.create_sql_patch(sql_id => '&&cs_sql_id.', hint_text => q'[&&hints_text.]', name => 'cs_&&cs_sql_id.', description => q'[cs_spch_create.sql /*+ &&hints_text. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 19c (this api requires the sql to be in memory) 12 | l_name := DBMS_SQLDIAG.create_sql_patch(sql_text => l_sql_text, hint_text => q'[&&hints_text.]', name => 'cs_&&cs_sql_id._'||TO_CHAR(SYSDATE, 'MMDD_HH24MISS'), description => q'[cs_spch_create.sql /*+ &&hints_text. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 19c 13 | $END 14 | NULL; 15 | END; 16 | / -------------------------------------------------------------------------------- /cs_internal/cs_spch_internal_drop.sql: -------------------------------------------------------------------------------- 1 | BEGIN 2 | FOR i IN (SELECT name FROM dba_sql_patches WHERE signature = &&cs_signature.) 3 | LOOP 4 | DBMS_SQLDIAG.drop_sql_patch(name => i.name); 5 | END LOOP; 6 | END; 7 | / 8 | -------------------------------------------------------------------------------- /cs_internal/cs_spch_internal_list.sql: -------------------------------------------------------------------------------- 1 | 2 | @@&&stgtab_sqlpatch_script. 3 | -- 4 | COL con_id FOR 999 HEA 'Con|ID'; 5 | COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; 6 | COL created FOR A23; 7 | COL name FOR A30; 8 | COL category FOR A30; 9 | COL status FOR A8; 10 | COL last_modified FOR A19; 11 | COL description FOR A100 HEA 'Description' WOR; 12 | COL outline_hint FOR A125; 13 | -- 14 | PRO 15 | PRO SQL PATCHES - LIST (dba_sql_patches) 16 | PRO ~~~~~~~~~~~~~~~~~~ 17 | SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, 18 | s.con_id, 19 | c.name AS pdb_name, 20 | s.name, 21 | s.category, 22 | s.status, 23 | TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, 24 | s.description 25 | FROM cdb_sql_patches s, 26 | v$containers c 27 | WHERE s.signature = :cs_signature 28 | AND c.con_id = s.con_id 29 | ORDER BY 30 | s.created, s.con_id, s.name 31 | / 32 | -- 33 | DEF cs_obj_type = '3'; 34 | @@&&cs_list_cbo_hints. -------------------------------------------------------------------------------- /cs_internal/cs_spch_internal_pack.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO Pack SQL Patch: 3 | BEGIN 4 | FOR i IN (SELECT name, category 5 | FROM dba_sql_patches 6 | WHERE signature = :cs_signature 7 | ORDER BY name) 8 | LOOP 9 | DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch WHERE obj_name = i.name AND category = i.category; 10 | DBMS_SQLDIAG.pack_stgtab_sqlpatch(patch_name => i.name, patch_category => i.category, staging_table_name => '&&cs_stgtab_prefix._stgtab_sqlpatch', staging_schema_owner => '&&cs_stgtab_owner.'); 11 | END LOOP; 12 | END; 13 | / 14 | -------------------------------------------------------------------------------- /cs_internal/cs_spch_internal_plan.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO SQL PATCH - DISPLAY (dbms_xplan.display_sql_patch_plan) 3 | PRO ~~~~~~~~~~~~~~~~~~~ 4 | -- only works from PDB. 5 | SET HEA OFF PAGES 0; 6 | SELECT * FROM TABLE(DBMS_XPLAN.display_sql_patch_plan((SELECT name FROM dba_sql_patches WHERE signature = :cs_signature AND category = 'DEFAULT' AND ROWNUM = 1), 'ADVANCED')); 7 | SET HEA ON PAGES 100; 8 | -------------------------------------------------------------------------------- /cs_internal/cs_spch_internal_stgtab.sql: -------------------------------------------------------------------------------- 1 | @@cs_set_quota_tools_owner.sql 2 | -- create staging table 3 | DECLARE 4 | l_exists NUMBER; 5 | BEGIN 6 | SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER('&&cs_stgtab_owner.') AND table_name = UPPER('&&cs_stgtab_prefix._stgtab_sqlpatch'); 7 | IF l_exists = 0 THEN 8 | DBMS_SQLDIAG.create_stgtab_sqlpatch(table_name => UPPER('&&cs_stgtab_prefix._stgtab_sqlpatch'), schema_name => UPPER('&&cs_stgtab_owner.'), tablespace_name => UPPER('&&cs_default_tablespace.')); 9 | END IF; 10 | END; 11 | / 12 | -- 13 | PRO 14 | PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch; 15 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch; 17 | -- 18 | -------------------------------------------------------------------------------- /cs_internal/cs_spch_internal_stgtab_sqlpatch.sql: -------------------------------------------------------------------------------- 1 | COL created FOR A23; 2 | COL name FOR A30; 3 | COL category FOR A30; 4 | COL status FOR 99999999; 5 | COL last_modified FOR A19; 6 | COL description FOR A100 HEA 'Description' WOR; 7 | -- 8 | PRO 9 | PRO SQL PATCHES ON STAGING TABLE (&&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch) 10 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 | SELECT TO_CHAR(created, '&&cs_datetime_full_format.') created, 12 | obj_name name, 13 | category, 14 | status, 15 | TO_CHAR(last_modified, '&&cs_datetime_full_format.') last_modified, 16 | description 17 | FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch 18 | WHERE signature = :cs_signature 19 | ORDER BY 20 | created, obj_name 21 | / 22 | -------------------------------------------------------------------------------- /cs_internal/cs_spool_head.sql: -------------------------------------------------------------------------------- 1 | SELECT REPLACE('&&cs_file_name.', '$') AS cs_file_name FROM DUAL; 2 | -- 3 | EXEC :cs_begin_elapsed_time := DBMS_UTILITY.get_time; 4 | -- 5 | SPO &&cs_file_name..txt 6 | PRO /* ---------------------------------------------------------------------------------------------- */ 7 | PRO &&cs_file_name..txt 8 | PRO 9 | -- -------------------------------------------------------------------------------- /cs_internal/cs_spool_id.sql: -------------------------------------------------------------------------------- 1 | --CLEAR SCREEN; 2 | PRO 3 | @@cs_spool_id_list.sql 4 | -- 5 | -------------------------------------------------------------------------------- /cs_internal/cs_spool_id_chart.sql: -------------------------------------------------------------------------------- 1 | @@cs_spool_id_chart_pre.sql 2 | @@cs_spool_time.sql 3 | PRO
4 | @@cs_spool_id_list.sql
5 | PRO 
6 | @@cs_spool_id_chart_post.sql 7 | -------------------------------------------------------------------------------- /cs_internal/cs_spool_id_chart_post.sql: -------------------------------------------------------------------------------- 1 | PRO
2 | PRO &&chart_foot_note_0. 3 | PRO &&chart_foot_note_1. 4 | PRO &&chart_foot_note_2. 5 | PRO &&chart_foot_note_3. 6 | PRO &&chart_foot_note_4. 7 | @@&&spool_id_chart_footer_script. 8 | -- PRO
 9 | -- get /tmp/cs_last_executed.sql
10 | -- PRO 
11 | PRO
12 | PRO &&cs_elapsed_time. &&cs_total_time.
13 | PRO 
14 | PRO &&report_foot_note. 15 | PRO 16 | PRO 17 | -------------------------------------------------------------------------------- /cs_internal/cs_spool_id_list.sql: -------------------------------------------------------------------------------- 1 | PRO DATE_TIME_UTC: &&cs_date_time.Z 2 | PRO REFERENCE : &&cs_extended_reference. 3 | PRO JDBC_STRING : &&cs_easy_connect_string. 4 | PRO HOST_NAME : &&cs_host_name. CPU_UTIL:&&cs_cpu_util_perc. LOAD:&&cs_cpu_load. CORES:&&cs_num_cpu_cores. THREADS:&&cs_num_cpus. &&cs_host_shape. &&cs_disk_config. BOOT:&&cs_system_boot_time. USER:&&who_am_i. 5 | PRO CDB_NAME : &&cs_db_name_u. CPU_COUNT:&&cs_cpu_count. AVG_RUN_SESS:&&cs_avg_running_sessions_cdb. DBRM_PLAN:&&cs_resource_manager_plan. &&cs_containers_count. VERSION:&&cs_db_version. STARTUP:&&cs_startup_time. &&cs_blackout_times. 6 | PRO PDB_NAME : &&cs_con_name. CON_ID:&&cs_con_id. ALLOTTED_CPU:&&cs_allotted_cpu. AVG_RUN_SESS:&&cs_avg_running_sessions_pdb. OPEN_MODE:&&cs_pdb_open_mode. CREATED:&&pdb_creation. 7 | PRO PHONE_BOOK : &&cs_phonebook_pdb. COMPARTMENT_ID:&&cs_compartment_id_pdb. 8 | PRO APPLICATION : &&cs_kiev_version. SCHEMA:&&cs_schema_name. 9 | PRO KIEV_STORE : &&cs_kiev_store_name. 10 | PRO SCRIPT_NAME : &&cs_script_acronym.&&cs_script_name..sql 11 | @@&&list_dg_members_script. 12 | -------------------------------------------------------------------------------- /cs_internal/cs_spool_id_list_sql_id.sql: -------------------------------------------------------------------------------- 1 | PRO SQL_ID : &&cs_sql_id. 2 | PRO SQL_HV : &&cs_sql_hv. 3 | PRO SIGNATURE : &&cs_signature. 4 | PRO SQL_HANDLE : &&cs_sql_handle. 5 | PRO APPLICATION : &&cs_application_category. 6 | PRO TABLE_OWNER : &&table_owner. 7 | PRO TABLE_NAME : &&table_name. 8 | PRO FIRST_ROWS : &&cs_first_rows_candidacy. (Y=Good Candidate, N=Bad Candidate) -------------------------------------------------------------------------------- /cs_internal/cs_spool_id_sample_time.sql: -------------------------------------------------------------------------------- 1 | -- 2 | PRO TIME_FROM : "&&cs_entered_time_from." &&cs_sample_time_from. (&&cs_snap_id_from.) {&&cs_default_time_window.} 3 | PRO TIME_TO : "&&cs_entered_time_to." &&cs_sample_time_to. (&&cs_snap_id_to.) {now} 4 | -- 5 | -------------------------------------------------------------------------------- /cs_internal/cs_spool_tail.sql: -------------------------------------------------------------------------------- 1 | @@cs_spool_time.sql 2 | -- PRO 3 | PRO &&cs_elapsed_time. &&cs_total_time. 4 | PRO 5 | PRO &&cs_file_name..txt 6 | PRO /* ---------------------------------------------------------------------------------------------- */ 7 | SPO OFF; 8 | HOS chmod 644 &&cs_file_name..txt 9 | PRO 10 | DEF cs_reference; 11 | --DEF cs_local_dir; 12 | PRO 13 | PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: 14 | PRO scp &&cs_host_name.:&&cs_file_prefix._&&cs_script_name.*.* &&cs_local_dir. 15 | PRO scp &&cs_host_name.:&&cs_file_dir.&&cs_reference_sanitized._*.* &&cs_local_dir. 16 | PRO 17 | PRO Use h.sql or help.sql for "cs" scripts inventory by type, and ls.sql for alphabetical list of "cs" scripts. 18 | -- -------------------------------------------------------------------------------- /cs_internal/cs_spool_tail_chart.sql: -------------------------------------------------------------------------------- 1 | SPO OFF; 2 | HOS chmod 644 &&cs_file_name..html 3 | PRO 4 | DEF cs_reference; 5 | DEF cs_local_dir; 6 | PRO 7 | PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: 8 | PRO scp &&cs_host_name.:&&cs_file_prefix._&&cs_script_name.*.* &&cs_local_dir. 9 | PRO scp &&cs_host_name.:&&cs_file_dir.&&cs_reference_sanitized._*.* &&cs_local_dir. 10 | PRO 11 | PRO Use h.sql or help.sql for "cs" scripts inventory by type, and ls.sql for alphabetical list of "cs" scripts. 12 | -- -------------------------------------------------------------------------------- /cs_internal/cs_spool_time.sql: -------------------------------------------------------------------------------- 1 | DEF cs_total_time = ''; 2 | DEF cs_elapsed_time = ''; 3 | COL cs_total_time NEW_V cs_total_time NOPRI; 4 | COL cs_elapsed_time NEW_V cs_elapsed_time NOPRI; 5 | SET HEA OFF PAGES 0; 6 | SELECT 'Total:'||TRIM(TO_CHAR(((DBMS_UTILITY.get_time - :cs_begin_total_time) / 100), '99,990.00'))||'s' AS cs_total_time, 7 | 'Elapsed:'||TRIM(TO_CHAR(((DBMS_UTILITY.get_time - :cs_begin_elapsed_time) / 100), '99,990.00'))||'s' AS cs_elapsed_time 8 | FROM DUAL 9 | / 10 | SET HEA ON PAGES 100; -------------------------------------------------------------------------------- /cs_internal/cs_sprf_internal_drop.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO Drop SQL Profile(s) for: "&&cs_sql_id." 3 | BEGIN 4 | FOR i IN (SELECT name FROM dba_sql_profiles WHERE signature = &&cs_signature.) 5 | LOOP 6 | DBMS_SQLTUNE.drop_sql_profile(name => i.name); 7 | END LOOP; 8 | END; 9 | / 10 | -------------------------------------------------------------------------------- /cs_internal/cs_sprf_internal_list.sql: -------------------------------------------------------------------------------- 1 | 2 | @@&&stgtab_sqlprofile_script. 3 | -- 4 | COL con_id FOR 999 HEA 'Con|ID'; 5 | COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; 6 | COL created FOR A23; 7 | COL name FOR A30; 8 | COL category FOR A30; 9 | COL status FOR A8; 10 | COL last_modified FOR A19; 11 | COL description FOR A100 HEA 'Description' WOR; 12 | COL outline_hint FOR A125; 13 | -- 14 | PRO 15 | PRO SQL PROFILES - LIST (dba_sql_profiles) 16 | PRO ~~~~~~~~~~~~~~~~~~~ 17 | SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, 18 | s.con_id, 19 | c.name AS pdb_name, 20 | s.name, 21 | s.category, 22 | s.status, 23 | TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, 24 | s.description 25 | FROM cdb_sql_profiles s, 26 | v$containers c 27 | WHERE s.signature = :cs_signature 28 | AND c.con_id = s.con_id 29 | ORDER BY 30 | s.created, s.con_id, s.name 31 | / 32 | -- 33 | DEF cs_obj_type = '1'; 34 | @@&&cs_list_cbo_hints. -------------------------------------------------------------------------------- /cs_internal/cs_sprf_internal_pack.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO Pack SQL Profile: 3 | BEGIN 4 | FOR i IN (SELECT name, category 5 | FROM dba_sql_profiles 6 | WHERE signature = :cs_signature 7 | ORDER BY name) 8 | LOOP 9 | DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof WHERE obj_name = i.name AND category = i.category; 10 | DBMS_SQLTUNE.pack_stgtab_sqlprof(profile_name => i.name, profile_category => i.category, staging_table_name => '&&cs_stgtab_prefix._stgtab_sqlprof', staging_schema_owner => '&&cs_stgtab_owner.'); 11 | END LOOP; 12 | END; 13 | / 14 | -------------------------------------------------------------------------------- /cs_internal/cs_sprf_internal_plan.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO SQL PROFILE - DISPLAY (dbms_xplan.display_sql_profile_plan) 3 | PRO ~~~~~~~~~~~~~~~~~~~~~ 4 | -- only works from PDB. 5 | SET HEA OFF PAGES 0; 6 | SELECT * FROM TABLE(DBMS_XPLAN.display_sql_profile_plan((SELECT name FROM dba_sql_profiles WHERE signature = :cs_signature AND category = 'DEFAULT' AND ROWNUM = 1), 'ADVANCED')); 7 | SET HEA ON PAGES 100; 8 | -------------------------------------------------------------------------------- /cs_internal/cs_sprf_internal_stgtab.sql: -------------------------------------------------------------------------------- 1 | @@cs_set_quota_tools_owner.sql 2 | -- create staging table 3 | DECLARE 4 | l_exists NUMBER; 5 | BEGIN 6 | SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER('&&cs_stgtab_owner.') AND table_name = UPPER('&&cs_stgtab_prefix._stgtab_sqlprof'); 7 | IF l_exists = 0 THEN 8 | DBMS_SQLTUNE.create_stgtab_sqlprof(table_name => UPPER('&&cs_stgtab_prefix._stgtab_sqlprof'), schema_name => UPPER('&&cs_stgtab_owner.'), tablespace_name => UPPER('&&cs_default_tablespace.')); 9 | END IF; 10 | END; 11 | / 12 | -- 13 | PRO 14 | PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof; 15 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof; 17 | -- 18 | -------------------------------------------------------------------------------- /cs_internal/cs_sprf_internal_stgtab_sqlprofile.sql: -------------------------------------------------------------------------------- 1 | COL created FOR A23; 2 | COL name FOR A30; 3 | COL category FOR A30; 4 | COL status FOR 99999999; 5 | COL last_modified FOR A19; 6 | COL description FOR A100 HEA 'Description' WOR; 7 | -- 8 | PRO 9 | PRO SQL PROFILES ON STAGING TABLE (&&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof) 10 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 | SELECT TO_CHAR(created, '&&cs_datetime_full_format.') created, 12 | obj_name name, 13 | category, 14 | status, 15 | TO_CHAR(last_modified, '&&cs_datetime_full_format.') last_modified, 16 | description 17 | FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof 18 | WHERE signature = :cs_signature 19 | ORDER BY 20 | created, obj_name 21 | / 22 | -------------------------------------------------------------------------------- /cs_internal/cs_sqlstat_analytics_footer.sql: -------------------------------------------------------------------------------- 1 | PRO
 2 | PRO Metric:&&cs_sql_statistic.  &&xaxis_title.
 3 | PRO
 4 | PRO Top    Average Value   Data Points  SQL_ID         PHV         Typ  PDB Name                        SQL Text                                                      Module
 5 | PRO ~~~  ~~~~~~~~~~~~~~~  ~~~~~~~~~~~~  ~~~~~~~~~~~~~  ~~~~~~~~~~  ~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 6 | PRO #01  &&value_01.  &&data_points_01.  &&sql_id_01.  &&plan_hash_value_01.  &&sql_type_01.  &&pdb_name_01.  &&sql_text_01.  &&module_01.
 7 | PRO #02  &&value_02.  &&data_points_02.  &&sql_id_02.  &&plan_hash_value_02.  &&sql_type_02.  &&pdb_name_02.  &&sql_text_02.  &&module_02.
 8 | PRO #03  &&value_03.  &&data_points_03.  &&sql_id_03.  &&plan_hash_value_03.  &&sql_type_03.  &&pdb_name_03.  &&sql_text_03.  &&module_03.
 9 | PRO #04  &&value_04.  &&data_points_04.  &&sql_id_04.  &&plan_hash_value_04.  &&sql_type_04.  &&pdb_name_04.  &&sql_text_04.  &&module_04.
10 | PRO #05  &&value_05.  &&data_points_05.  &&sql_id_05.  &&plan_hash_value_05.  &&sql_type_05.  &&pdb_name_05.  &&sql_text_05.  &&module_05.
11 | PRO #06  &&value_06.  &&data_points_06.  &&sql_id_06.  &&plan_hash_value_06.  &&sql_type_06.  &&pdb_name_06.  &&sql_text_06.  &&module_06.
12 | PRO #07  &&value_07.  &&data_points_07.  &&sql_id_07.  &&plan_hash_value_07.  &&sql_type_07.  &&pdb_name_07.  &&sql_text_07.  &&module_07.
13 | PRO #08  &&value_08.  &&data_points_08.  &&sql_id_08.  &&plan_hash_value_08.  &&sql_type_08.  &&pdb_name_08.  &&sql_text_08.  &&module_08.
14 | PRO #09  &&value_09.  &&data_points_09.  &&sql_id_09.  &&plan_hash_value_09.  &&sql_type_09.  &&pdb_name_09.  &&sql_text_09.  &&module_09.
15 | PRO #10  &&value_10.  &&data_points_10.  &&sql_id_10.  &&plan_hash_value_10.  &&sql_type_10.  &&pdb_name_10.  &&sql_text_10.  &&module_10.
16 | PRO #11  &&value_11.  &&data_points_11.  &&sql_id_11.  &&plan_hash_value_11.  &&sql_type_11.  &&pdb_name_11.  &&sql_text_11.  &&module_11.
17 | PRO #12  &&value_12.  &&data_points_12.  &&sql_id_12.  &&plan_hash_value_12.  &&sql_type_12.  &&pdb_name_12.  &&sql_text_12.  &&module_12.
18 | PRO #13  &&value_13.  &&data_points_13.  &&sql_id_13.  &&plan_hash_value_13.  &&sql_type_13.  &&pdb_name_13.  &&sql_text_13.  &&module_13.
19 | PRO 
-------------------------------------------------------------------------------- /cs_internal/cs_sqlstat_clear.sql: -------------------------------------------------------------------------------- 1 | CLEAR COMPUTE BREAK; -------------------------------------------------------------------------------- /cs_internal/cs_sqlstat_compute.sql: -------------------------------------------------------------------------------- 1 | -- cs_sqlstat_compute.sql: called by cs_dba_hist_sqlstat_*.sql 2 | BREAK ON REPORT; 3 | COMPUTE AVG LABEL '' OF seconds optimizer_cost et_aas cpu_aas io_aas appl_aas conc_aas plsql_aas cluster_aas java_aas delta_execution_count execs_per_sec px_execs_per_sec end_of_fetch_per_sec parses_per_sec avg_hard_parse_time inval_per_sec loads_per_sec et_ms_per_exec cpu_ms_per_exec io_ms_per_exec appl_ms_per_exec conc_ms_per_exec plsql_ms_per_exec cluster_ms_per_exec java_ms_per_exec gets_per_exec reads_per_exec direct_writes_per_exec phy_read_req_per_exec phy_read_mb_per_exec phy_write_req_per_exec phy_write_mb_per_exec fetches_per_exec sorts_per_exec delta_rows_processed rows_per_exec et_ms_per_row cpu_ms_per_row io_ms_per_row gets_per_row reads_per_row delta_elapsed_time delta_cpu_time delta_user_io_wait_time delta_application_wait_time delta_concurrency_time delta_plsql_exec_time delta_cluster_wait_time delta_java_exec_time delta_px_servers_executions delta_end_of_fetch_count delta_parse_calls delta_buffer_gets delta_disk_reads delta_direct_writes delta_physical_read_requests delta_physical_read_mb delta_physical_write_requests delta_physical_write_mb delta_fetch_count delta_sorts delta_io_interconnect_mb delta_cell_offload_elig_mb delta_cell_uncompressed_mb delta_cell_offload_retrn_mb version_count obsolete_count shareable_count delta_loads delta_invalidations sharable_mem_mb ON REPORT; 4 | -- -------------------------------------------------------------------------------- /cs_internal/cs_sqlstat_foot.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO 1. For more SQL Statistics history use ssr.sql (cs_sqlstat_report.sql) or ssri.sql (cs_sqlstat_report_iod.sql). The former provides 15m, hourly, daily or global granularity, while the latter 1m granularity. 3 | PRO -------------------------------------------------------------------------------- /cs_internal/cs_temp_dir_create.sql: -------------------------------------------------------------------------------- 1 | HOS mkdir -p &&cs_temp_dir. 2 | CREATE OR REPLACE DIRECTORY CS_TEMP_DIR AS '&&cs_temp_dir.'; 3 | -------------------------------------------------------------------------------- /cs_internal/cs_temp_dir_drop.sql: -------------------------------------------------------------------------------- 1 | DROP DIRECTORY CS_TEMP_DIR; 2 | -------------------------------------------------------------------------------- /cs_internal/cs_top_14_footer.sql: -------------------------------------------------------------------------------- 1 | PRO
 2 | PRO #01  &&value_01.  &&top_01.
 3 | PRO #02  &&value_02.  &&top_02.
 4 | PRO #03  &&value_03.  &&top_03.
 5 | PRO #04  &&value_04.  &&top_04.
 6 | PRO #05  &&value_05.  &&top_05.
 7 | PRO #06  &&value_06.  &&top_06.
 8 | PRO #07  &&value_07.  &&top_07.
 9 | PRO #08  &&value_08.  &&top_08.
10 | PRO #09  &&value_09.  &&top_09.
11 | PRO #10  &&value_10.  &&top_10.
12 | PRO #11  &&value_11.  &&top_11.
13 | PRO #12  &&value_12.  &&top_12.
14 | PRO #13  &&value_13.  &&top_13.
15 | PRO #14  &&value_14.  &&top_14.
16 | PRO #15  &&value_others.  &&others.
17 | PRO 
18 | -------------------------------------------------------------------------------- /cs_internal/cs_top_internal_foot.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO 1. Top Active SQL as per Active Sessions History ASH. 3 | PRO 2. Up to &&cs_top. SQL statements per SQL Type as per Average Active Sessions (AAS) on Elpsped Time. 4 | PRO 3. For database load on last 1 minute use t.sql (cs_top.sql). Use ta.sql to eliminate report heading. 5 | PRO 4. For database load over a time range use tr.sql (cs_top_range.sql). 6 | PRO -------------------------------------------------------------------------------- /cs_internal/cs_undef.sql: -------------------------------------------------------------------------------- 1 | UNDEF 1 2 3 4 5 6 7 8 9 10 2 | -- -------------------------------------------------------------------------------- /cs_kill_root_blockers.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_kill_root_blockers.sql 4 | -- 5 | -- Purpose: Kill Root Blocker User Sessions 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_kill_root_blockers.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET SERVEROUT ON; 21 | DECLARE 22 | l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type) 23 | l_statament VARCHAR2(32767); 24 | session_marked_for_kill EXCEPTION; 25 | PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill 26 | session_does_not_exist EXCEPTION; 27 | PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist. 28 | BEGIN 29 | SELECT root_blocker.sid||','||root_blocker.serial# 30 | BULK COLLECT INTO l_sid_serial 31 | FROM v$session blockee, v$session root_blocker 32 | WHERE blockee.type = 'USER' AND blockee.sid <> SYS_CONTEXT('USERENV', 'SID') AND blockee.final_blocking_session_status = 'VALID' 33 | AND root_blocker.sid = blockee.final_blocking_session AND root_blocker.type = 'USER' AND root_blocker.sid <> SYS_CONTEXT('USERENV', 'SID'); 34 | -- 35 | IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- sessions found 36 | SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_root_blockers: killing '||(l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' root blocker sessions'); 37 | FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST 38 | LOOP 39 | l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE'; 40 | DBMS_OUTPUT.put_line(l_statament||';'); 41 | BEGIN 42 | EXECUTE IMMEDIATE l_statament; 43 | EXCEPTION 44 | WHEN session_marked_for_kill OR session_does_not_exist THEN NULL; 45 | END; 46 | END LOOP; 47 | SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions killed!'); 48 | ELSE 49 | DBMS_OUTPUT.put_line('no sessions found'); 50 | END IF; 51 | END; 52 | / -------------------------------------------------------------------------------- /cs_kill_scheduler.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_kill_scheduler.sql 4 | -- 5 | -- Purpose: Kill User Sessions waiting on Scheduler (Resource Manager) 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_kill_scheduler.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET SERVEROUT ON; 21 | DECLARE 22 | l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type) 23 | l_statament VARCHAR2(32767); 24 | session_marked_for_kill EXCEPTION; 25 | PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill 26 | session_does_not_exist EXCEPTION; 27 | PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist. 28 | BEGIN 29 | SELECT sid||','||serial# 30 | BULK COLLECT INTO l_sid_serial 31 | FROM v$session 32 | WHERE type = 'USER' AND wait_class = 'Scheduler' AND sid <> SYS_CONTEXT('USERENV', 'SID'); 33 | -- 34 | IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- sessions found 35 | SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_scheduler: killing '||(l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions on Scheduler'); 36 | FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST 37 | LOOP 38 | l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE'; 39 | DBMS_OUTPUT.put_line(l_statament||';'); 40 | BEGIN 41 | EXECUTE IMMEDIATE l_statament; 42 | EXCEPTION 43 | WHEN session_marked_for_kill OR session_does_not_exist THEN NULL; 44 | END; 45 | END LOOP; 46 | SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions killed!'); 47 | ELSE 48 | DBMS_OUTPUT.put_line('no sessions found'); 49 | END IF; 50 | END; 51 | / -------------------------------------------------------------------------------- /cs_kill_sid.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_kill_sid.sql 4 | -- 5 | -- Purpose: Kill one User Session 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_kill_sid.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | PRO 21 | PRO 1. Enter SID: 22 | DEF sid = '&1.'; 23 | UNDEF 1; 24 | -- 25 | VAR sid VARCHAR2(13); 26 | EXEC :sid := SUBSTR('&&sid.'||',', 1, INSTR('&&sid.'||',', ',') - 1); 27 | -- 28 | SET SERVEROUT ON; 29 | DECLARE 30 | l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type) 31 | l_statament VARCHAR2(32767); 32 | session_marked_for_kill EXCEPTION; 33 | PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill 34 | session_does_not_exist EXCEPTION; 35 | PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist. 36 | BEGIN 37 | SELECT sid||','||serial# 38 | BULK COLLECT INTO l_sid_serial 39 | FROM v$session 40 | WHERE type = 'USER' AND sid = :sid AND sid <> SYS_CONTEXT('USERENV', 'SID'); 41 | -- 42 | IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- session found 43 | SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_sid: killing sid '||:sid); 44 | FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST 45 | LOOP 46 | l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE'; 47 | DBMS_OUTPUT.put_line(l_statament||';'); 48 | BEGIN 49 | EXECUTE IMMEDIATE l_statament; 50 | EXCEPTION 51 | WHEN session_marked_for_kill OR session_does_not_exist THEN NULL; 52 | END; 53 | END LOOP; 54 | SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' session killed!'); 55 | ELSE 56 | DBMS_OUTPUT.put_line('no session found'); 57 | END IF; 58 | END; 59 | / -------------------------------------------------------------------------------- /cs_kill_sql_id.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_kill_sql_id.sql 4 | -- 5 | -- Purpose: Kill User Sessions executing some SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_kill_sql_id.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | PRO 21 | PRO 1. Enter SQL_ID: 22 | DEF sql_id = '&1.'; 23 | UNDEF 1; 24 | -- 25 | VAR sql_id VARCHAR2(13); 26 | EXEC :sql_id := '&&sql_id.'; 27 | -- 28 | SET SERVEROUT ON; 29 | DECLARE 30 | l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type) 31 | l_statament VARCHAR2(32767); 32 | session_marked_for_kill EXCEPTION; 33 | PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill 34 | session_does_not_exist EXCEPTION; 35 | PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist. 36 | BEGIN 37 | SELECT sid||','||serial# 38 | BULK COLLECT INTO l_sid_serial 39 | FROM v$session 40 | WHERE type = 'USER' AND sql_id = :sql_id AND sid <> SYS_CONTEXT('USERENV', 'SID'); 41 | -- 42 | IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- sessions found 43 | SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_sql_id: killing '||(l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions executing SQL_ID '||:sql_id); 44 | FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST 45 | LOOP 46 | l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE'; 47 | DBMS_OUTPUT.put_line(l_statament||';'); 48 | BEGIN 49 | EXECUTE IMMEDIATE l_statament; 50 | EXCEPTION 51 | WHEN session_marked_for_kill OR session_does_not_exist THEN NULL; 52 | END; 53 | END LOOP; 54 | SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions killed!'); 55 | ELSE 56 | DBMS_OUTPUT.put_line('no sessions found'); 57 | END IF; 58 | END; 59 | / -------------------------------------------------------------------------------- /cs_latency.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: la.sql | l.sql | cs_latency.sql 4 | -- 5 | -- Purpose: Current SQL latency (elapsed time over executions) 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/02/20 10 | -- 11 | -- Usage: Execute connected to PDB or CDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_latency.sql 15 | -- 16 | -- Notes: Developed and tested on 19c 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | @@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_latency'; 27 | DEF cs_script_acronym = 'la.sql | l.sql | '; 28 | DEF cs_top_latency = '20'; 29 | DEF cs_top_load = '10'; 30 | DEF cs_ms_threshold_latency = '0.05'; 31 | DEF cs_aas_threshold_latency = '0.005'; 32 | DEF cs_aas_threshold_load = '0.05'; 33 | DEF cs_uncommon_col = 'NOPRINT'; 34 | DEF cs_execs_delta_h = '&&cs_last_snap_mins. mins'; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_spool_head.sql 39 | PRO SQL> @&&cs_script_name..sql 40 | @@cs_internal/cs_spool_id.sql 41 | -- 42 | @@cs_internal/cs_latency_internal_cols.sql 43 | @@cs_internal/cs_latency_internal_query_1.sql 44 | @@cs_internal/cs_latency_internal_foot.sql 45 | -- 46 | PRO 47 | PRO SQL> @&&cs_script_name..sql 48 | -- 49 | @@cs_internal/cs_spool_tail.sql 50 | @@cs_internal/cs_undef.sql 51 | @@cs_internal/cs_reset.sql 52 | -- 53 | -------------------------------------------------------------------------------- /cs_latency_1m.sql: -------------------------------------------------------------------------------- 1 | @@cs_latency_range_iod.sql "-1m" "" -------------------------------------------------------------------------------- /cs_latency_1m_extended.sql: -------------------------------------------------------------------------------- 1 | @@cs_latency_range_iod_extended.sql "-1m" "" -------------------------------------------------------------------------------- /cs_latency_extended.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: le.sql | cs_latency_extended.sql 4 | -- 5 | -- Purpose: Current SQL latency (elapsed time over executions) - Extended 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/02/20 10 | -- 11 | -- Usage: Execute connected to PDB or CDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_latency_extended.sql 15 | -- 16 | -- Notes: Developed and tested on 19c 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | @@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_latency_extended'; 27 | DEF cs_script_acronym = 'le.sql | '; 28 | DEF cs_top_latency = '40'; 29 | DEF cs_top_load = '20'; 30 | DEF cs_ms_threshold_latency = '0.05'; 31 | DEF cs_aas_threshold_latency = '0.005'; 32 | DEF cs_aas_threshold_load = '0.05'; 33 | DEF cs_uncommon_col = 'PRINT'; 34 | DEF cs_execs_delta_h = '&&cs_last_snap_mins. mins'; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_spool_head.sql 39 | PRO SQL> @&&cs_script_name..sql 40 | @@cs_internal/cs_spool_id.sql 41 | -- 42 | @@cs_internal/cs_latency_internal_cols.sql 43 | @@cs_internal/cs_latency_internal_query_1.sql 44 | @@cs_internal/cs_latency_internal_foot.sql 45 | -- 46 | PRO 47 | PRO SQL> @&&cs_script_name..sql 48 | -- 49 | @@cs_internal/cs_spool_tail.sql 50 | @@cs_internal/cs_undef.sql 51 | @@cs_internal/cs_reset.sql 52 | -- 53 | -------------------------------------------------------------------------------- /cs_latency_hist.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: lah.sql | lh.sql | cs_latency_hist.sql 4 | -- 5 | -- Purpose: Current and Historical SQL latency (cpu time over executions) 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2021/05/24 10 | -- 11 | -- Usage: Execute connected to PDB or CDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_latency_hist.sql 15 | -- 16 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 17 | -- 18 | -- Developed and tested on 12.1.0.2. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | @@cs_internal/cs_file_prefix.sql 27 | -- 28 | DEF cs_script_name = 'cs_latency_hist'; 29 | DEF cs_script_acronym = 'lah.sql | lh.sql | '; 30 | DEF cs_top = '20'; 31 | @@cs_internal/cs_latency_hist_internal_1.sql 32 | -- 33 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 34 | -- 35 | @@cs_internal/cs_spool_head.sql 36 | PRO SQL> @&&cs_script_name..sql 37 | @@cs_internal/cs_spool_id.sql 38 | -- 39 | @@cs_internal/cs_latency_hist_internal_2.sql 40 | -- 41 | PRO 42 | PRO SQL> @&&cs_script_name..sql 43 | -- 44 | @@cs_internal/cs_spool_tail.sql 45 | @@cs_internal/cs_undef.sql 46 | @@cs_internal/cs_reset.sql 47 | -- 48 | -------------------------------------------------------------------------------- /cs_latency_range.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: lr.sql | cs_latency_range.sql 4 | -- 5 | -- Purpose: SQL latency for a time range (elapsed time over executions) (AWR) - 15m Granularity 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/08/06 10 | -- 11 | -- Usage: Execute connected to PDB or CDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_latency_range.sql 15 | -- 16 | -- Notes: Developed and tested on 19c 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | @@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_latency_range'; 27 | DEF cs_script_acronym = 'lr.sql | '; 28 | DEF cs_hours_range_default = '12'; 29 | -- 30 | @@cs_internal/cs_sample_time_from_and_to.sql 31 | @@cs_internal/cs_snap_id_from_and_to.sql 32 | -- 33 | DEF cs_top_latency = '20'; 34 | DEF cs_top_load = '10'; 35 | DEF cs_ms_threshold_latency = '0.05'; 36 | DEF cs_aas_threshold_latency = '0.005'; 37 | DEF cs_aas_threshold_load = '0.05'; 38 | DEF cs_uncommon_col = 'NOPRINT'; 39 | DEF cs_execs_delta_h = '&&cs_from_to_seconds. secs'; 40 | -- DEF cs_execs_delta_h = ''; 41 | -- 42 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 43 | -- 44 | -- @@cs_internal/&&cs_set_container_to_cdb_root. 45 | -- 46 | @@cs_internal/cs_spool_head.sql 47 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." 48 | @@cs_internal/cs_spool_id.sql 49 | -- 50 | @@cs_internal/cs_spool_id_sample_time.sql 51 | -- 52 | @@cs_internal/cs_latency_internal_cols.sql 53 | @@cs_internal/cs_latency_internal_query_4.sql 54 | @@cs_internal/cs_latency_internal_foot.sql 55 | -- 56 | PRO 57 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." 58 | -- 59 | @@cs_internal/cs_spool_tail.sql 60 | -- 61 | -- @@cs_internal/&&cs_set_container_to_curr_pdb. 62 | -- 63 | @@cs_internal/cs_undef.sql 64 | @@cs_internal/cs_reset.sql 65 | -- -------------------------------------------------------------------------------- /cs_latency_range_extended.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: lre.sql | cs_latency_range_extended.sql 4 | -- 5 | -- Purpose: SQL latency for a time range (elapsed time over executions) (AWR) - 15m Granularity - Extended 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/08/06 10 | -- 11 | -- Usage: Execute connected to PDB or CDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_latency_range_extended.sql 15 | -- 16 | -- Notes: Developed and tested on 19c 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | @@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_latency_range_extended'; 27 | DEF cs_script_acronym = 'lre.sql | '; 28 | DEF cs_hours_range_default = '12'; 29 | -- 30 | @@cs_internal/cs_sample_time_from_and_to.sql 31 | @@cs_internal/cs_snap_id_from_and_to.sql 32 | -- 33 | DEF cs_top_latency = '40'; 34 | DEF cs_top_load = '20'; 35 | DEF cs_ms_threshold_latency = '0.05'; 36 | DEF cs_aas_threshold_latency = '0.005'; 37 | DEF cs_aas_threshold_load = '0.05'; 38 | DEF cs_uncommon_col = 'PRINT'; 39 | DEF cs_execs_delta_h = '&&cs_from_to_seconds. secs'; 40 | -- DEF cs_execs_delta_h = ''; 41 | -- 42 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 43 | -- 44 | -- @@cs_internal/&&cs_set_container_to_cdb_root. 45 | -- 46 | @@cs_internal/cs_spool_head.sql 47 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." 48 | @@cs_internal/cs_spool_id.sql 49 | -- 50 | @@cs_internal/cs_spool_id_sample_time.sql 51 | -- 52 | @@cs_internal/cs_latency_internal_cols.sql 53 | @@cs_internal/cs_latency_internal_query_4.sql 54 | @@cs_internal/cs_latency_internal_foot.sql 55 | -- 56 | PRO 57 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." 58 | -- 59 | @@cs_internal/cs_spool_tail.sql 60 | -- 61 | -- @@cs_internal/&&cs_set_container_to_curr_pdb. 62 | -- 63 | @@cs_internal/cs_undef.sql 64 | @@cs_internal/cs_reset.sql 65 | -- -------------------------------------------------------------------------------- /cs_locks.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: locks.sql | cs_locks.sql 4 | -- 5 | -- Purpose: Locks Summary and Details 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/16 10 | -- 11 | -- Usage: Execute connected to PDB or CDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_locks.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | @@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_locks'; 27 | DEF cs_script_acronym = 'locks.sql | '; 28 | -- 29 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 30 | -- 31 | @@cs_internal/cs_spool_head.sql 32 | PRO SQL> @&&cs_script_name..sql 33 | @@cs_internal/cs_spool_id.sql 34 | -- 35 | @@cs_internal/cs_locks_internal.sql 36 | -- 37 | PRO 38 | PRO SQL> @&&cs_script_name..sql 39 | -- 40 | @@cs_internal/cs_spool_tail.sql 41 | @@cs_internal/cs_undef.sql 42 | @@cs_internal/cs_reset.sql 43 | -- -------------------------------------------------------------------------------- /cs_opened_cursors_current_per_session.sql: -------------------------------------------------------------------------------- 1 | COL value HEA 'Cursors'; 2 | COL username FOR A30; 3 | COL sid FOR 99999; 4 | COL serial# FOR 99999999; 5 | -- 6 | select a.value, s.username, s.sid, s.serial# 7 | from v$sesstat a, v$statname b, v$session s 8 | where a.statistic# = b.statistic# and s.sid=a.sid 9 | and b.name = 'opened cursors current' 10 | order by a.value DESC 11 | / 12 | 13 | -------------------------------------------------------------------------------- /cs_osstat_cpu_util_perc_now.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_osstat_cpu_util_perc_now.sql 4 | -- 5 | -- Purpose: CPU Utilization Percent - Now 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/08/31 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_osstat_cpu_util_perc_now.sql 15 | -- 16 | -- Notes: Developed and tested on 19c 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SELECT ROUND(100 * os.busy_time / (os.busy_time + os.idle_time), 2) AS cpu_util_perc 21 | FROM ( 22 | SELECT NULLIF(GREATEST(busy_t2.value - busy_t1.value, 0), 0) AS busy_time, NULLIF(GREATEST(idle_t2.value - idle_t1.value, 0), 0) AS idle_time 23 | FROM 24 | (SELECT value FROM dba_hist_osstat WHERE stat_name = 'BUSY_TIME' ORDER BY snap_id DESC NULLS LAST FETCH FIRST 1 ROW ONLY) busy_t1, 25 | (SELECT value FROM dba_hist_osstat WHERE stat_name = 'IDLE_TIME' ORDER BY snap_id DESC NULLS LAST FETCH FIRST 1 ROW ONLY) idle_t1, 26 | (SELECT value FROM v$osstat WHERE stat_name = 'BUSY_TIME') busy_t2, 27 | (SELECT value FROM v$osstat WHERE stat_name = 'IDLE_TIME') idle_t2 28 | ) os 29 | / 30 | -------------------------------------------------------------------------------- /cs_past_days_to_epoch.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_past_days_to_epoch.sql 4 | -- 5 | -- Purpose: Convert Past Days to Epoch 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2021/08/24 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_past_days_to_epoch.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 21 | SET NUM 15; 22 | DEF cs_datetime_full_format = 'YYYY-MM-DD"T"HH24:MI:SS'; 23 | DEF cs_datetime_display_format = 'yyyy-mm-ddThh:mi:ss'; 24 | PRO 25 | PRO 1. Enter Past Days: [ex: 60] 26 | DEF cs_past_days = '&1.'; 27 | UNDEF 1; 28 | -- 29 | -- note: on 19c consider select dbms_stats.convert_raw_to_date(hextoraw('7877031203192A0C1988C0')) from dual; 30 | -- 31 | WITH 32 | days AS ( 33 | SELECT TRUNC(SYSDATE) - &&cs_past_days. - TO_DATE('1970-01-01T00:00:00', '&&cs_datetime_full_format.') AS cnt FROM DUAL 34 | ) 35 | SELECT TO_CHAR(TRUNC(SYSDATE) - &&cs_past_days., '&&cs_datetime_full_format.') AS time, days.cnt * 24 * 3600 AS epoch_seconds, days.cnt * 24 * 3600 * 1000 AS epoch_milliseconds 36 | FROM days 37 | / 38 | -------------------------------------------------------------------------------- /cs_pdbs.sql: -------------------------------------------------------------------------------- 1 | -- cs_pdbs.sql 2 | @@cs_pr.sql "SELECT * FROM C##IOD.dbc_pdb_meta_v ORDER BY 1" 3 | -------------------------------------------------------------------------------- /cs_planh.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: ph.sql | cs_planh.sql 4 | -- 5 | -- Purpose: Execution Plans in AWR for a given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Execute connected to PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_planx.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_planh'; 31 | DEF cs_script_acronym = 'ph.sql | '; 32 | -- 33 | PRO 1. SQL_ID: 34 | DEF cs_sql_id = '&1.'; 35 | UNDEF 1; 36 | -- 37 | DEF cs_plan_hash_value = ''; 38 | @@cs_internal/cs_plans_awr_1.sql 39 | -- 40 | PRO 41 | PRO 2. PLAN_HASH_VALUE (opt): 42 | DEF cs_plan_hash_value = '&2.'; 43 | UNDEF 2; 44 | -- 45 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 46 | -- 47 | @@cs_internal/cs_signature.sql 48 | @@cs_internal/cs_spool_head.sql 49 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." 50 | @@cs_internal/cs_spool_id.sql 51 | @@cs_internal/cs_spool_id_list_sql_id.sql 52 | -- 53 | PRO PLAN_HASH_VAL: &&cs_plan_hash_value. 54 | -- 55 | @@cs_internal/cs_plans_awr_1.sql 56 | @@cs_internal/cs_plans_awr_2.sql 57 | -- 58 | PRO 59 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." 60 | -- 61 | @@cs_internal/cs_spool_tail.sql 62 | @@cs_internal/cs_undef.sql 63 | @@cs_internal/cs_reset.sql 64 | -- -------------------------------------------------------------------------------- /cs_planm.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: pm.sql | cs_planm.sql 4 | -- 5 | -- Purpose: Execution Plans in Memory for a given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Execute connected to PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_planx.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_planm'; 31 | DEF cs_script_acronym = 'pm.sql | '; 32 | -- 33 | PRO 1. SQL_ID: 34 | DEF cs_sql_id = '&1.'; 35 | UNDEF 1; 36 | -- 37 | DEF cs_plan_hash_value = ''; 38 | @@cs_internal/cs_plans_mem_1.sql 39 | -- 40 | PRO 41 | PRO 2. PLAN_HASH_VALUE (opt): 42 | DEF cs_plan_hash_value = '&2.'; 43 | UNDEF 2; 44 | -- 45 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 46 | -- 47 | @@cs_internal/cs_signature.sql 48 | @@cs_internal/cs_spool_head.sql 49 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." 50 | @@cs_internal/cs_spool_id.sql 51 | @@cs_internal/cs_spool_id_list_sql_id.sql 52 | -- 53 | PRO PLAN_HASH_VAL: &&cs_plan_hash_value. 54 | -- 55 | @@cs_internal/cs_plans_mem_0.sql 56 | @@cs_internal/cs_plans_mem_1.sql 57 | @@cs_internal/cs_plans_mem_2.sql 58 | -- 59 | PRO 60 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." 61 | -- 62 | @@cs_internal/cs_spool_tail.sql 63 | @@cs_internal/cs_undef.sql 64 | @@cs_internal/cs_reset.sql 65 | -- -------------------------------------------------------------------------------- /cs_purge_cursor.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_purge_cursor.sql 4 | -- 5 | -- Purpose: Purge Cursor(s) for SQL_ID using DBMS_SHARED_POOL.PURGE and SQL Patch 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_purge_cursor.sql 17 | -- 18 | -- Notes: Developed and tested on 12.1.0.2. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | @@cs_internal/cs_file_prefix.sql 27 | -- 28 | DEF cs_script_name = 'cs_purge_cursor'; 29 | -- 30 | PRO 1. SQL_ID: 31 | DEF cs_sql_id = '&1.'; 32 | UNDEF 1; 33 | -- 34 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 35 | -- 36 | @@cs_internal/cs_signature.sql 37 | @@cs_internal/cs_spool_head.sql 38 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 39 | @@cs_internal/cs_spool_id.sql 40 | @@cs_internal/cs_spool_id_list_sql_id.sql 41 | @@cs_internal/cs_print_sql_text.sql 42 | @@cs_internal/cs_plans_performance.sql 43 | -- 44 | SET SERVEROUT ON; 45 | @@cs_internal/cs_internal_purge_cursor "&&cs_sql_id." 46 | SET SERVEROUT OFF; 47 | -- 48 | @@cs_internal/cs_plans_performance.sql 49 | -- 50 | PRO 51 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 52 | -- 53 | @@cs_internal/cs_spool_tail.sql 54 | @@cs_internal/cs_undef.sql 55 | @@cs_internal/cs_reset.sql 56 | -- 57 | -------------------------------------------------------------------------------- /cs_redef_remove_lob_dedup_on_pdb.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_redef_remove_lob_dedup_on_pdb.sql 4 | -- 5 | -- Purpose: Remove LOB Deduplication on PDB 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/05/06 10 | -- 11 | -- Usage: Execute connected to PDB 12 | -- 13 | -- Enter PX degree when requested 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_redef_remove_lob_dedup_on_pdb.sql 17 | -- 18 | -- Notes: This operation requires a blackout. 19 | -- Developed and tested on 19c. 20 | -- 21 | --------------------------------------------------------------------------------------- 22 | -- 23 | @@cs_internal/cs_primary.sql 24 | @@cs_internal/cs_cdb_warn.sql 25 | @@cs_internal/cs_set.sql 26 | @@cs_internal/cs_def.sql 27 | @@cs_internal/cs_blackout.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_redef_remove_lob_dedup_on_pdb'; 31 | -- 32 | PRO 33 | PRO 1. Degree of Parallelism: [{1}|2|4|8] 34 | DEF pxdegree = '&1.'; 35 | UNDEF 1; 36 | COL p_pxdegree NEW_V p_pxdegree NOPRI; 37 | SELECT CASE WHEN '&&pxdegree.' IN ('1','2','4','8') THEN '&&pxdegree.' ELSE '1' END AS p_pxdegree FROM DUAL 38 | / 39 | -- 40 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 41 | -- 42 | @@cs_internal/cs_spool_head.sql 43 | PRO SQL> @&&cs_script_name..sql "&&p_pxdegree." 44 | @@cs_internal/cs_spool_id.sql 45 | -- 46 | PRO PX_DEGREE : &&p_pxdegree. [{1}|2|4|8] 47 | -- 48 | COMMIT; 49 | @@cs_internal/&&cs_set_container_to_cdb_root. 50 | -- 51 | PRO 52 | PRO DEDUP REMOVAL 53 | PRO ~~~~~~~~~~~~~ 54 | SET SERVEROUT ON 55 | ALTER SESSION SET DDL_LOCK_TIMEOUT = 10; 56 | BEGIN 57 | &&cs_tools_schema..IOD_SPACE.removededup ( 58 | p_pdb_name => '&&cs_con_name.' 59 | , p_pxdegree => &&p_pxdegree. 60 | ); 61 | END; 62 | / 63 | SET SERVEROUT OFF; 64 | -- 65 | COMMIT; 66 | @@cs_internal/&&cs_set_container_to_curr_pdb. 67 | -- 68 | PRO 69 | PRO SQL> @&&cs_script_name..sql "&&p_pxdegree." 70 | -- 71 | @@cs_internal/cs_spool_tail.sql 72 | @@cs_internal/cs_undef.sql 73 | @@cs_internal/cs_reset.sql 74 | -- -------------------------------------------------------------------------------- /cs_sessions_high_pga_memory.sql: -------------------------------------------------------------------------------- 1 | rem https://connor-mcdonald.com/2022/03/10/dont-run-tight-on-pga/ 2 | select ROUND(st.value/1024/1024/1024, 3) AS gb, s.sid, s.serial#, s.program, s.event, s.sql_id, s.prev_sql_id 3 | from v$session s, 4 | v$sesstat st, 5 | v$statname sn 6 | where st.value > 100*1024*1024 7 | and st.sid = s.sid 8 | and st.statistic# = sn.statistic# 9 | and sn.name = 'session pga memory' 10 | order by st.value desc 11 | / 12 | 13 | -------------------------------------------------------------------------------- /cs_snapper_sid.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: snapper_sid.sql | cs_snapper_sid.sql 4 | -- 5 | -- Purpose: Sessions Snapper for one SID using Tanel Poder Snapper 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/16 10 | -- 11 | -- Usage: Execute connected to PDB or CDB. Pass SID when requested. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_snapper_sid.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | --@@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_snapper_sid'; 27 | DEF cs_script_acronym = 'snapper_sid.sql | '; 28 | -- 29 | PRO 30 | PRO Executing: SQL> @@snapper.sql ash=sid+service_name+module+machine 5 1 all 31 | @@snapper.sql ash=sid+service_name+module+machine 5 1 all 32 | UNDEF 1 2 3 4; 33 | -- 34 | PRO 1. SID: 35 | DEF cs_sid = '&1.'; 36 | UNDEF 1; 37 | -- 38 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 39 | -- 40 | @@cs_internal/cs_spool_head.sql 41 | PRO SQL> @&&cs_script_name..sql "&&cs_sid." 42 | @@cs_internal/cs_spool_id.sql 43 | -- 44 | PRO SID : "&&cs_sid." 45 | PRO 46 | -- 47 | DEF sid = '&&cs_sid.'; 48 | PRO Snapper #1 out of 6 49 | @@snapper_sid.sql 50 | -- 51 | DEF sid = '&&cs_sid.'; 52 | PRO Snapper #2 out of 6 53 | @@snapper_sid.sql 54 | -- 55 | DEF sid = '&&cs_sid.'; 56 | PRO Snapper #3 out of 6 57 | @@snapper_sid.sql 58 | -- 59 | DEF sid = '&&cs_sid.'; 60 | PRO Snapper #4 out of 6 61 | @@snapper_sid.sql 62 | -- 63 | DEF sid = '&&cs_sid.'; 64 | PRO Snapper #5 out of 6 65 | @@snapper_sid.sql 66 | -- 67 | DEF sid = '&&cs_sid.'; 68 | PRO Snapper #6 out of 6 69 | @@snapper_sid.sql 70 | -- 71 | PRO 72 | PRO SQL> @&&cs_script_name..sql "&&cs_sid." 73 | -- 74 | @@cs_internal/cs_spool_tail.sql 75 | @@cs_internal/cs_undef.sql 76 | @@cs_internal/cs_reset.sql 77 | -- -------------------------------------------------------------------------------- /cs_snapper_spid.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: snapper_spid.sql | cs_snapper_spid.sql 4 | -- 5 | -- Purpose: Sessions Snapper for one SPID (OS PID) using Tanel Poder Snapper 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/16 10 | -- 11 | -- Usage: Execute connected to PDB or CDB. Pass SPID when requested. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_snapper_spid.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | --@@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_snapper_spid'; 27 | DEF cs_script_acronym = 'snapper_spid.sql | '; 28 | -- 29 | --PRO 30 | --PRO Executing: SQL> @@snapper.sql ash=sid+service_name+module+machine 5 1 all 31 | --@@snapper.sql ash=sid+service_name+module+machine 5 1 all 32 | --UNDEF 1 2 3 4; 33 | -- 34 | PRO 1. SPID (OS PID): 35 | DEF cs_spid = '&1.'; 36 | UNDEF 1; 37 | -- 38 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 39 | -- 40 | @@cs_internal/cs_spool_head.sql 41 | PRO SQL> @&&cs_script_name..sql "&&cs_spid." 42 | @@cs_internal/cs_spool_id.sql 43 | -- 44 | PRO SPID (OS PID): "&&cs_spid." 45 | PRO 46 | -- 47 | DEF spid = '&&cs_spid.'; 48 | PRO Snapper #1 out of 6 49 | @@snapper_spid.sql 50 | -- 51 | DEF spid = '&&cs_spid.'; 52 | PRO Snapper #2 out of 6 53 | @@snapper_spid.sql 54 | -- 55 | DEF spid = '&&cs_spid.'; 56 | PRO Snapper #3 out of 6 57 | @@snapper_spid.sql 58 | -- 59 | DEF spid = '&&cs_spid.'; 60 | PRO Snapper #4 out of 6 61 | @@snapper_spid.sql 62 | -- 63 | DEF spid = '&&cs_spid.'; 64 | PRO Snapper #5 out of 6 65 | @@snapper_spid.sql 66 | -- 67 | DEF spid = '&&cs_spid.'; 68 | PRO Snapper #6 out of 6 69 | @@snapper_spid.sql 70 | -- 71 | PRO 72 | PRO SQL> @&&cs_script_name..sql "&&cs_spid." 73 | -- 74 | @@cs_internal/cs_spool_tail.sql 75 | @@cs_internal/cs_undef.sql 76 | @@cs_internal/cs_reset.sql 77 | -- -------------------------------------------------------------------------------- /cs_snapper_top.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: snapper_top.sql | cs_snapper_top.sql 4 | -- 5 | -- Purpose: Sessions Snapper for all sessions using Tanel Poder Snapper 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/16 10 | -- 11 | -- Usage: Execute connected to PDB or CDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_snapper_top.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | --@@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_snapper_top'; 27 | DEF cs_script_acronym = 'snapper_top.sql | '; 28 | -- 29 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 30 | -- 31 | @@cs_internal/cs_spool_head.sql 32 | PRO SQL> @&&cs_script_name..sql 33 | @@cs_internal/cs_spool_id.sql 34 | -- 35 | PRO 36 | -- 37 | PRO Snapper #1 out of 6 38 | @@snapper_top.sql 39 | -- 40 | PRO Snapper #2 out of 6 41 | @@snapper_top.sql 42 | -- 43 | PRO Snapper #3 out of 6 44 | @@snapper_top.sql 45 | -- 46 | PRO Snapper #4 out of 6 47 | @@snapper_top.sql 48 | -- 49 | PRO Snapper #5 out of 6 50 | @@snapper_top.sql 51 | -- 52 | PRO Snapper #6 out of 6 53 | @@snapper_top.sql 54 | -- 55 | PRO 56 | PRO SQL> @&&cs_script_name..sql 57 | -- 58 | @@cs_internal/cs_spool_tail.sql 59 | @@cs_internal/cs_undef.sql 60 | @@cs_internal/cs_reset.sql 61 | -- -------------------------------------------------------------------------------- /cs_spbl_evolve.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spbl_evolve.sql 4 | -- 5 | -- Purpose: Evolve a SQL Plan Baseline for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_spbl_evolve.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_spbl_evolve'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | @@cs_internal/cs_signature.sql 37 | @@cs_internal/&&cs_zapper_managed. 38 | -- 39 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 40 | -- 41 | -- preserves curren time since new baselines will have more recent creation than this: 42 | COL creation_time NEW_V creation_time NOPRI; 43 | SELECT TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS creation_time FROM DUAL; 44 | -- 45 | @@cs_internal/cs_spool_head.sql 46 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 47 | @@cs_internal/cs_spool_id.sql 48 | @@cs_internal/cs_spool_id_list_sql_id.sql 49 | @@cs_internal/cs_print_sql_text.sql 50 | @@cs_internal/cs_plans_performance.sql 51 | @@cs_internal/cs_spbl_internal_list.sql 52 | -- 53 | PRO please wait... it may take several minutes! 54 | @@cs_internal/cs_spbl_evolve_internal.sql 55 | -- 56 | PRO 57 | @@cs_internal/cs_spbl_internal_list.sql 58 | @@cs_internal/cs_plans_performance.sql 59 | -- 60 | PRO 61 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 62 | -- 63 | @@cs_internal/cs_spool_tail.sql 64 | @@cs_internal/cs_undef.sql 65 | @@cs_internal/cs_reset.sql 66 | -- 67 | -------------------------------------------------------------------------------- /cs_spbl_list.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spbl_list.sql 4 | -- 5 | -- Purpose: Summary list of SQL Plan Baselines for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/02/28 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_spbl_list.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_spbl_list'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | -- 40 | @@cs_internal/cs_spool_head.sql 41 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 42 | @@cs_internal/cs_spool_id.sql 43 | -- 44 | PRO SQL_ID : &&cs_sql_id. 45 | PRO SIGNATURE : &&cs_signature. 46 | PRO SQL_HANDLE : &&cs_sql_handle. 47 | -- 48 | @@cs_internal/cs_print_sql_text.sql 49 | @@cs_internal/cs_spbl_internal_list.sql 50 | @@cs_internal/cs_plans_performance.sql 51 | -- 52 | PRO 53 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 54 | -- 55 | @@cs_internal/cs_spool_tail.sql 56 | @@cs_internal/cs_undef.sql 57 | @@cs_internal/cs_reset.sql 58 | -- 59 | -------------------------------------------------------------------------------- /cs_spbl_pack.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spbl_pack.sql 4 | -- 5 | -- Purpose: Packs into staging table one or all SQL Plan Baselines for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/02/28 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_spbl_pack.sql 17 | -- 18 | -- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_spbl_pack'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | -- 40 | @@cs_internal/cs_plans_performance.sql 41 | @@cs_internal/cs_spbl_internal_list.sql 42 | -- 43 | PRO 44 | PRO 2. PLAN_NAME (opt): 45 | DEF cs_plan_name = '&2.'; 46 | UNDEF 2; 47 | PRO 48 | -- 49 | @@cs_internal/cs_spool_head.sql 50 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." 51 | @@cs_internal/cs_spool_id.sql 52 | -- 53 | PRO SQL_ID : &&cs_sql_id. 54 | PRO SIGNATURE : &&cs_signature. 55 | PRO SQL_HANDLE : &&cs_sql_handle. 56 | PRO PLAN_NAME : "&&cs_plan_name." 57 | -- 58 | @@cs_internal/cs_print_sql_text.sql 59 | @@cs_internal/cs_spbl_internal_list.sql 60 | @@cs_internal/cs_plans_performance.sql 61 | -- 62 | @@cs_internal/cs_spbl_internal_stgtab.sql 63 | @@cs_internal/cs_spbl_internal_pack.sql 64 | -- 65 | @@cs_internal/cs_spbl_internal_list.sql 66 | -- 67 | PRO 68 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." 69 | -- 70 | @@cs_internal/cs_spool_tail.sql 71 | @@cs_internal/cs_undef.sql 72 | @@cs_internal/cs_reset.sql 73 | -- 74 | -------------------------------------------------------------------------------- /cs_spbl_plan.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spbl_plan.sql 4 | -- 5 | -- Purpose: Display SQL Plan Baseline for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/03/10 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_spbl_plan.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_spbl_plan'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | -- 40 | @@cs_internal/cs_spool_head.sql 41 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 42 | @@cs_internal/cs_spool_id.sql 43 | -- 44 | PRO SQL_ID : &&cs_sql_id. 45 | PRO SIGNATURE : &&cs_signature. 46 | PRO SQL_HANDLE : &&cs_sql_handle. 47 | -- 48 | @@cs_internal/cs_print_sql_text.sql 49 | @@cs_internal/cs_spbl_internal_list.sql 50 | @@cs_internal/cs_spbl_internal_plan.sql 51 | @@cs_internal/cs_spbl_internal_list.sql 52 | -- 53 | PRO 54 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 55 | -- 56 | @@cs_internal/cs_spool_tail.sql 57 | @@cs_internal/cs_undef.sql 58 | @@cs_internal/cs_reset.sql 59 | -- 60 | -------------------------------------------------------------------------------- /cs_spbl_sprf_spch_cnt.sql: -------------------------------------------------------------------------------- 1 | COL pdb_name FOR A30; 2 | SELECT c.pdb_name, bl.cnt AS bl, pr.cnt AS pr, pa.cnt AS pa 3 | FROM (SELECT con_id, name AS pdb_name FROM v$containers) c, 4 | (SELECT con_id, COUNT(*) As cnt FROM cdb_sql_plan_baselines GROUP BY con_id) bl, 5 | (SELECT con_id, COUNT(*) As cnt FROM cdb_sql_profiles GROUP BY con_id) pr, 6 | (SELECT con_id, COUNT(*) As cnt FROM cdb_sql_patches GROUP BY con_id) pa 7 | WHERE bl.con_id = c.con_id 8 | AND pr.con_id = c.con_id 9 | AND pa.con_id = c.con_id 10 | ORDER BY 11 | c.pdb_name 12 | / -------------------------------------------------------------------------------- /cs_spbl_stgtab.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spbl_stgtab.sql 4 | -- 5 | -- Purpose: Creates Staging Table for SQL Plan Baselines 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2018/07/25 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_spbl_stgtab.sql 15 | -- 16 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 17 | -- 18 | -- Developed and tested on 12.1.0.2. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | @@cs_internal/cs_file_prefix.sql 27 | -- 28 | DEF cs_script_name = 'cs_spbl_stgtab'; 29 | -- 30 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 31 | -- 32 | @@cs_internal/cs_spool_head.sql 33 | PRO SQL> @&&cs_script_name..sql 34 | @@cs_internal/cs_spool_id.sql 35 | -- 36 | @@cs_internal/cs_spbl_internal_stgtab.sql 37 | -- 38 | PRO 39 | PRO SQL> @&&cs_script_name..sql 40 | -- 41 | @@cs_internal/cs_spool_tail.sql 42 | @@cs_internal/cs_undef.sql 43 | @@cs_internal/cs_reset.sql 44 | -- 45 | -------------------------------------------------------------------------------- /cs_spbl_stgtab_delete.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spbl_stgtab_delete.sql 4 | -- 5 | -- Purpose: Deletes Staging Table for SQL Plan Baselines 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/03/10 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID (opt) when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_spbl_stgtab_delete.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_spbl_stgtab_delete'; 31 | -- 32 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 33 | -- 34 | PRO 1. SQL_ID (opt): 35 | DEF cs_sql_id = '&1.'; 36 | UNDEF 1; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | -- 40 | PRO 41 | -- 42 | @@cs_internal/cs_spool_head.sql 43 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 44 | @@cs_internal/cs_spool_id.sql 45 | -- 46 | PRO SQL_ID : &&cs_sql_id. 47 | PRO SIGNATURE : &&cs_signature. 48 | PRO SQL_HANDLE : &&cs_sql_handle. 49 | -- 50 | @@cs_internal/cs_print_sql_text.sql 51 | @@cs_internal/cs_spbl_internal_stgtab.sql 52 | @@cs_internal/cs_spbl_internal_stgtab_delete.sql 53 | -- 54 | PRO 55 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 56 | -- 57 | @@cs_internal/cs_spool_tail.sql 58 | @@cs_internal/cs_undef.sql 59 | @@cs_internal/cs_reset.sql 60 | -- 61 | -------------------------------------------------------------------------------- /cs_spch_drop.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spch_drop.sql 4 | -- 5 | -- Purpose: Drop all SQL Patches for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_spch_drop.sql 17 | -- 18 | -- Notes: Developed and tested on 12.1.0.2. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | @@cs_internal/cs_file_prefix.sql 27 | -- 28 | DEF cs_script_name = 'cs_spch_drop'; 29 | -- 30 | PRO 1. SQL_ID: 31 | DEF cs_sql_id = '&1.'; 32 | UNDEF 1; 33 | -- 34 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 35 | -- 36 | @@cs_internal/cs_signature.sql 37 | @@cs_internal/&&cs_zapper_managed. 38 | -- 39 | @@cs_internal/cs_plans_performance.sql 40 | @@cs_internal/cs_spch_internal_list.sql 41 | -- 42 | @@cs_internal/cs_spool_head.sql 43 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 44 | @@cs_internal/cs_spool_id.sql 45 | @@cs_internal/cs_spool_id_list_sql_id.sql 46 | @@cs_internal/cs_print_sql_text.sql 47 | @@cs_internal/cs_plans_performance.sql 48 | @@cs_internal/cs_spch_internal_list.sql 49 | -- 50 | @@cs_internal/cs_spch_internal_stgtab.sql 51 | @@cs_internal/cs_spch_internal_pack.sql 52 | -- 53 | PRO 54 | PRO Drop SQL Patch(es) for: "&&cs_sql_id." 55 | @@cs_internal/cs_spch_internal_drop.sql 56 | -- 57 | @@cs_internal/cs_spch_internal_list.sql 58 | -- 59 | PRO 60 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 61 | -- 62 | @@cs_internal/cs_spool_tail.sql 63 | @@cs_internal/cs_undef.sql 64 | @@cs_internal/cs_reset.sql 65 | -- 66 | -------------------------------------------------------------------------------- /cs_spch_list.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spch_list.sql 4 | -- 5 | -- Purpose: Summary list of SQL Patches for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/02/28 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_spch_list.sql 17 | -- 18 | -- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_spch_list'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | -- 40 | @@cs_internal/cs_spool_head.sql 41 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 42 | @@cs_internal/cs_spool_id.sql 43 | -- 44 | PRO SQL_ID : &&cs_sql_id. 45 | PRO SIGNATURE : &&cs_signature. 46 | PRO SQL_HANDLE : &&cs_sql_handle. 47 | -- 48 | @@cs_internal/cs_print_sql_text.sql 49 | @@cs_internal/cs_spch_internal_list.sql 50 | @@cs_internal/cs_plans_performance.sql 51 | -- 52 | PRO 53 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 54 | -- 55 | @@cs_internal/cs_spool_tail.sql 56 | @@cs_internal/cs_undef.sql 57 | @@cs_internal/cs_reset.sql 58 | -- 59 | 60 | 61 | -------------------------------------------------------------------------------- /cs_spch_pack.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spch_pack.sql 4 | -- 5 | -- Purpose: Packs into staging table one or all SQL Patches for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/02/28 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_spch_pack.sql 17 | -- 18 | -- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_spch_pack'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | -- 40 | @@cs_internal/cs_plans_performance.sql 41 | @@cs_internal/cs_spch_internal_list.sql 42 | -- 43 | PRO 44 | PRO 2. Enter NAME (opt) 45 | DEF cs_name = '&2.'; 46 | UNDEF 2; 47 | PRO 48 | -- 49 | @@cs_internal/cs_spool_head.sql 50 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." 51 | @@cs_internal/cs_spool_id.sql 52 | -- 53 | PRO SQL_ID : &&cs_sql_id. 54 | PRO SIGNATURE : &&cs_signature. 55 | PRO SQL_HANDLE : &&cs_sql_handle. 56 | PRO NAME : &&cs_name. 57 | -- 58 | @@cs_internal/cs_print_sql_text.sql 59 | @@cs_internal/cs_spch_internal_list.sql 60 | @@cs_internal/cs_plans_performance.sql 61 | -- 62 | @@cs_internal/cs_spch_internal_stgtab.sql 63 | @@cs_internal/cs_spch_internal_pack.sql 64 | -- 65 | @@cs_internal/cs_spch_internal_list.sql 66 | -- 67 | PRO 68 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." 69 | -- 70 | @@cs_internal/cs_spool_tail.sql 71 | @@cs_internal/cs_undef.sql 72 | @@cs_internal/cs_reset.sql 73 | -- 74 | 75 | 76 | -------------------------------------------------------------------------------- /cs_spch_plan.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spch_plan.sql 4 | -- 5 | -- Purpose: Display SQL Patch Plan for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_spch_plan.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_spch_plan'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | @@cs_internal/cs_spool_head.sql 40 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 41 | @@cs_internal/cs_spool_id.sql 42 | @@cs_internal/cs_spool_id_list_sql_id.sql 43 | -- 44 | @@cs_internal/cs_print_sql_text.sql 45 | @@cs_internal/cs_spch_internal_list.sql 46 | @@cs_internal/cs_spch_internal_plan.sql 47 | @@cs_internal/cs_spch_internal_list.sql 48 | -- 49 | PRO 50 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 51 | -- 52 | @@cs_internal/cs_spool_tail.sql 53 | @@cs_internal/cs_undef.sql 54 | @@cs_internal/cs_reset.sql 55 | -- 56 | -------------------------------------------------------------------------------- /cs_spch_stgtab.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_spch_stgtab.sql 4 | -- 5 | -- Purpose: Creates Staging Table for SQL Patches 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2018/08/06 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_spch_stgtab.sql 15 | -- 16 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 17 | -- 18 | -- Developed and tested on 12.1.0.2. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | @@cs_internal/cs_file_prefix.sql 27 | -- 28 | DEF cs_script_name = 'cs_spch_stgtab'; 29 | -- 30 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 31 | -- 32 | @@cs_internal/cs_spool_head.sql 33 | PRO SQL> @&&cs_script_name..sql 34 | @@cs_internal/cs_spool_id.sql 35 | -- 36 | @@cs_internal/cs_spch_internal_stgtab.sql 37 | -- 38 | PRO 39 | PRO SQL> @&&cs_script_name..sql 40 | -- 41 | @@cs_internal/cs_spool_tail.sql 42 | @@cs_internal/cs_undef.sql 43 | @@cs_internal/cs_reset.sql 44 | -- 45 | -------------------------------------------------------------------------------- /cs_sprf_drop.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_sprf_drop.sql 4 | -- 5 | -- Purpose: Drop all SQL Profiles for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/11/17 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_sprf_drop.sql 17 | -- 18 | -- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_sprf_drop'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | @@cs_internal/&&cs_zapper_managed. 40 | -- 41 | @@cs_internal/cs_plans_performance.sql 42 | @@cs_internal/cs_sprf_internal_list.sql 43 | -- 44 | @@cs_internal/cs_spool_head.sql 45 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 46 | @@cs_internal/cs_spool_id.sql 47 | -- 48 | PRO SQL_ID : &&cs_sql_id. 49 | PRO SIGNATURE : &&cs_signature. 50 | PRO SQL_HANDLE : &&cs_sql_handle. 51 | PRO APPLICATION : &&cs_application_category. 52 | PRO TABLE_OWNER : &&table_owner. 53 | PRO TABLE_NAME : &&table_name. 54 | -- 55 | @@cs_internal/cs_print_sql_text.sql 56 | @@cs_internal/cs_plans_performance.sql 57 | @@cs_internal/cs_sprf_internal_list.sql 58 | -- 59 | @@cs_internal/cs_sprf_internal_stgtab.sql 60 | @@cs_internal/cs_sprf_internal_pack.sql 61 | -- 62 | @@cs_internal/cs_sprf_internal_drop.sql 63 | -- 64 | @@cs_internal/cs_sprf_internal_list.sql 65 | -- 66 | PRO 67 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 68 | -- 69 | @@cs_internal/cs_spool_tail.sql 70 | @@cs_internal/cs_undef.sql 71 | @@cs_internal/cs_reset.sql 72 | -- 73 | -------------------------------------------------------------------------------- /cs_sprf_drop_all_unused.sql: -------------------------------------------------------------------------------- 1 | SELECT name FROM dba_sql_profiles MINUS SELECT sql_profile FROM v$sql WHERE sql_profile IS NOT NULL; 2 | BEGIN 3 | FOR i IN (SELECT name FROM dba_sql_profiles MINUS SELECT sql_profile FROM v$sql WHERE sql_profile IS NOT NULL) 4 | LOOP 5 | DBMS_SQLTUNE.drop_sql_profile(name => i.name); 6 | END LOOP; 7 | END; 8 | / 9 | SELECT name FROM dba_sql_profiles MINUS SELECT sql_profile FROM v$sql WHERE sql_profile IS NOT NULL; -------------------------------------------------------------------------------- /cs_sprf_enable.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_sprf_enable.sql 4 | -- 5 | -- Purpose: Enable one or all SQL Profiles for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID and name when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_sprf_enable.sql 17 | -- 18 | -- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_sprf_enable'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | @@cs_internal/cs_plans_performance.sql 40 | @@cs_internal/cs_sprf_internal_list.sql 41 | -- 42 | PRO 43 | PRO 2. NAME (opt): 44 | DEF cs_name = '&2.'; 45 | UNDEF 2; 46 | PRO 47 | -- 48 | @@cs_internal/cs_spool_head.sql 49 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." 50 | @@cs_internal/cs_spool_id.sql 51 | @@cs_internal/cs_spool_id_list_sql_id.sql 52 | -- 53 | PRO NAME : &&cs_name. 54 | -- 55 | @@cs_internal/cs_print_sql_text.sql 56 | @@cs_internal/cs_plans_performance.sql 57 | @@cs_internal/cs_sprf_internal_list.sql 58 | -- 59 | PRO 60 | PRO Disable name: "&&cs_name." 61 | BEGIN 62 | FOR i IN (SELECT name 63 | FROM dba_sql_profiles 64 | WHERE signature = :cs_signature 65 | AND status = 'DISABLED' 66 | AND name = NVL('&&cs_name.', name) 67 | ORDER BY name) 68 | LOOP 69 | DBMS_SQLTUNE.alter_sql_profile(name => i.name, attribute_name => 'STATUS', value => 'ENABLED'); 70 | END LOOP; 71 | END; 72 | / 73 | -- 74 | @@cs_internal/cs_sprf_internal_list.sql 75 | -- 76 | PRO 77 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." 78 | -- 79 | @@cs_internal/cs_spool_tail.sql 80 | @@cs_internal/cs_undef.sql 81 | @@cs_internal/cs_reset.sql 82 | -- 83 | -------------------------------------------------------------------------------- /cs_sprf_list.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_sprf_list.sql 4 | -- 5 | -- Purpose: Summary list of SQL Profiles for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_sprf_list.sql 17 | -- 18 | -- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_sprf_list'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | @@cs_internal/cs_spool_head.sql 40 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 41 | @@cs_internal/cs_spool_id.sql 42 | @@cs_internal/cs_spool_id_list_sql_id.sql 43 | @@cs_internal/cs_print_sql_text.sql 44 | @@cs_internal/cs_plans_performance.sql 45 | @@cs_internal/cs_sprf_internal_list.sql 46 | -- 47 | PRO 48 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 49 | -- 50 | @@cs_internal/cs_spool_tail.sql 51 | @@cs_internal/cs_undef.sql 52 | @@cs_internal/cs_reset.sql 53 | -- -------------------------------------------------------------------------------- /cs_sprf_pack.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_sprf_pack.sql 4 | -- 5 | -- Purpose: Packs into staging table one or all SQL Profiles for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/02/28 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_sprf_pack.sql 17 | -- 18 | -- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_sprf_pack'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | -- 40 | @@cs_internal/cs_plans_performance.sql 41 | @@cs_internal/cs_sprf_internal_list.sql 42 | -- 43 | PRO 44 | PRO 2. Enter NAME (opt) 45 | DEF cs_name = '&2.'; 46 | UNDEF 2; 47 | PRO 48 | -- 49 | @@cs_internal/cs_spool_head.sql 50 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." 51 | @@cs_internal/cs_spool_id.sql 52 | -- 53 | PRO SQL_ID : &&cs_sql_id. 54 | PRO SIGNATURE : &&cs_signature. 55 | PRO SQL_HANDLE : &&cs_sql_handle. 56 | PRO NAME : &&cs_name. 57 | -- 58 | @@cs_internal/cs_print_sql_text.sql 59 | @@cs_internal/cs_sprf_internal_list.sql 60 | @@cs_internal/cs_plans_performance.sql 61 | -- 62 | @@cs_internal/cs_sprf_internal_stgtab.sql 63 | @@cs_internal/cs_sprf_internal_pack.sql 64 | -- 65 | @@cs_internal/cs_sprf_internal_list.sql 66 | -- 67 | PRO 68 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." 69 | -- 70 | @@cs_internal/cs_spool_tail.sql 71 | @@cs_internal/cs_undef.sql 72 | @@cs_internal/cs_reset.sql 73 | -- 74 | 75 | 76 | -------------------------------------------------------------------------------- /cs_sprf_plan.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_sprf_plan.sql 4 | -- 5 | -- Purpose: Display SQL Profile Plan for given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_sprf_plan.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_sprf_plan'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | @@cs_internal/cs_spool_head.sql 40 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 41 | @@cs_internal/cs_spool_id.sql 42 | @@cs_internal/cs_spool_id_list_sql_id.sql 43 | -- 44 | @@cs_internal/cs_print_sql_text.sql 45 | @@cs_internal/cs_sprf_internal_list.sql 46 | @@cs_internal/cs_sprf_internal_plan.sql 47 | @@cs_internal/cs_sprf_internal_list.sql 48 | -- 49 | PRO 50 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 51 | -- 52 | @@cs_internal/cs_spool_tail.sql 53 | @@cs_internal/cs_undef.sql 54 | @@cs_internal/cs_reset.sql 55 | -- 56 | -------------------------------------------------------------------------------- /cs_sprf_stgtab.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_sprf_stgtab.sql 4 | -- 5 | -- Purpose: Creates Staging Table for SQL Profiles 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2018/08/06 10 | -- 11 | -- Usage: Connecting into PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_sprf_stgtab.sql 15 | -- 16 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 17 | -- 18 | -- Developed and tested on 12.1.0.2. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | @@cs_internal/cs_file_prefix.sql 27 | -- 28 | DEF cs_script_name = 'cs_sprf_stgtab'; 29 | -- 30 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 31 | -- 32 | @@cs_internal/cs_spool_head.sql 33 | PRO SQL> @&&cs_script_name..sql 34 | @@cs_internal/cs_spool_id.sql 35 | -- 36 | @@cs_internal/cs_sprf_internal_stgtab.sql 37 | -- 38 | PRO 39 | PRO SQL> @&&cs_script_name..sql 40 | -- 41 | @@cs_internal/cs_spool_tail.sql 42 | @@cs_internal/cs_undef.sql 43 | @@cs_internal/cs_reset.sql 44 | -- 45 | -------------------------------------------------------------------------------- /cs_sql_plan_directives.sql: -------------------------------------------------------------------------------- 1 | SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 2 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 3 | ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; 4 | -- 5 | COL object_owner_name FOR A60 TRUNC; 6 | COL created FOR A23 TRUNC; 7 | COL last_modified FOR A23 TRUNC; 8 | COL last_used FOR A23 TRUNC; 9 | -- 10 | SELECT d.directive_id, 11 | o.owner||'.'||o.object_name||CASE WHEN o.subobject_name IS NOT NULL THEN '.' END||o.subobject_name AS object_owner_name, 12 | o.object_type, 13 | d.type, 14 | d.enabled, 15 | d.state, 16 | d.auto_drop, 17 | d.reason, 18 | d.created, 19 | d.last_modified, 20 | d.last_used 21 | FROM dba_sql_plan_directives d, 22 | dba_sql_plan_dir_objects o, 23 | dba_users u 24 | WHERE o.directive_id = d.directive_id 25 | AND u.username = o.owner 26 | AND u.oracle_maintained = 'N' 27 | ORDER BY 28 | d.directive_id, 29 | o.owner, 30 | o.object_name, 31 | o.subobject_name, 32 | o.object_type 33 | / 34 | -------------------------------------------------------------------------------- /cs_sql_sessions.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_sql_sessions.sql 4 | -- 5 | -- Purpose: Recent and Active Sessions executing a SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Execute connected to PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_sql_sessions.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | --------------------------------------------------------------------------------------- 23 | -- 24 | @@cs_internal/cs_primary.sql 25 | @@cs_internal/cs_cdb_warn.sql 26 | @@cs_internal/cs_set.sql 27 | @@cs_internal/cs_def.sql 28 | @@cs_internal/cs_file_prefix.sql 29 | -- 30 | DEF cs_script_name = 'cs_sql_sessions'; 31 | -- 32 | PRO 1. SQL_ID: 33 | DEF cs_sql_id = '&1.'; 34 | UNDEF 1; 35 | -- 36 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 37 | -- 38 | @@cs_internal/cs_signature.sql 39 | @@cs_internal/cs_spool_head.sql 40 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 41 | @@cs_internal/cs_spool_id.sql 42 | @@cs_internal/cs_spool_id_list_sql_id.sql 43 | @@cs_internal/cs_print_sql_text.sql 44 | @@cs_internal/cs_recent_sessions.sql 45 | @@cs_internal/cs_active_sessions.sql 46 | -- 47 | PRO 48 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 49 | -- 50 | @@cs_internal/cs_spool_tail.sql 51 | @@cs_internal/cs_undef.sql 52 | @@cs_internal/cs_reset.sql 53 | -- -------------------------------------------------------------------------------- /cs_sqltext.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_sqltext.sql 4 | -- 5 | -- Purpose: SQL Text for a given SQL_ID 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/04/27 10 | -- 11 | -- Usage: Execute connected to PDB. 12 | -- 13 | -- Enter SQL_ID when requested. 14 | -- 15 | -- Example: $ sqlplus / as sysdba 16 | -- SQL> @cs_sqltext.sql 17 | -- 18 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 19 | -- 20 | -- Developed and tested on 12.1.0.2. 21 | -- 22 | -- To further dive into SQL performance diagnostics use SQLd360. 23 | -- 24 | --------------------------------------------------------------------------------------- 25 | -- 26 | @@cs_internal/cs_primary.sql 27 | @@cs_internal/cs_cdb_warn.sql 28 | @@cs_internal/cs_set.sql 29 | @@cs_internal/cs_def.sql 30 | @@cs_internal/cs_file_prefix.sql 31 | -- 32 | DEF cs_script_name = 'cs_sqltext'; 33 | -- 34 | PRO 1. SQL_ID: 35 | DEF cs_sql_id = '&1.'; 36 | UNDEF 1; 37 | -- 38 | SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; 39 | -- 40 | @@cs_internal/cs_signature.sql 41 | @@cs_internal/cs_spool_head.sql 42 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 43 | @@cs_internal/cs_spool_id.sql 44 | @@cs_internal/cs_spool_id_list_sql_id.sql 45 | @@cs_internal/cs_print_sql_text.sql 46 | -- 47 | PRO 48 | PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." 49 | -- 50 | @@cs_internal/cs_spool_tail.sql 51 | @@cs_internal/cs_undef.sql 52 | @@cs_internal/cs_reset.sql 53 | -- -------------------------------------------------------------------------------- /cs_systemstate.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_systemstate.sql 4 | -- 5 | -- Purpose: Generate System State Dump Trace 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/09 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_systemstate.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | ALTER SESSION SET tracefile_identifier = 'iod_systemstate'; 21 | COL trace_file NEW_V trace_file; 22 | SELECT value trace_file FROM v$diag_info WHERE name = 'Default Trace File'; 23 | oradebug setmypid 24 | oradebug unlimit 25 | oradebug dump systemstate 266 26 | oradebug tracefile_name 27 | HOS cp &&trace_file. /tmp 28 | -------------------------------------------------------------------------------- /cs_tables.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_tables.sql 4 | -- 5 | -- Purpose: All Tables and Top N Tables (text report) 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2023/01/20 10 | -- 11 | -- Usage: Execute connected to PDB or CDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_tables.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | @@cs_internal/cs_primary.sql 21 | @@cs_internal/cs_cdb_warn.sql 22 | @@cs_internal/cs_set.sql 23 | @@cs_internal/cs_def.sql 24 | @@cs_internal/cs_file_prefix.sql 25 | -- 26 | DEF cs_script_name = 'cs_tables'; 27 | -- 28 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 29 | -- 30 | @@cs_internal/cs_spool_head.sql 31 | PRO SQL> @&&cs_script_name..sql 32 | @@cs_internal/cs_spool_id.sql 33 | -- 34 | BREAK ON REPORT; 35 | COMPUTE SUM OF total_MB table_MB indexes_MB tabs lobs_MB est_data_MB lobs idxs num_rows ON REPORT; 36 | -- 37 | DEF specific_owner = ''; 38 | DEF specific_table = ''; 39 | DEF order_by = 't.owner, t.table_name'; 40 | DEF fetch_first_N_rows = '10000'; 41 | PRO 42 | PRO All Tables 43 | PRO ~~~~~~~~~~ 44 | @@cs_internal/cs_tables_internal.sql 45 | -- 46 | DEF specific_table = ''; 47 | DEF order_by = 'NVL(t.bytes,0)+NVL(i.bytes,0)+NVL(l.bytes,0) DESC'; 48 | DEF fetch_first_N_rows = '20'; 49 | PRO 50 | PRO Top Tables 51 | PRO ~~~~~~~~~~ 52 | @@cs_internal/cs_tables_internal.sql 53 | -- 54 | PRO 55 | PRO SQL> @&&cs_script_name..sql 56 | -- 57 | @@cs_internal/cs_spool_tail.sql 58 | @@cs_internal/cs_undef.sql 59 | @@cs_internal/cs_reset.sql 60 | -- 61 | -------------------------------------------------------------------------------- /cs_tables_rows_vs_count.sql: -------------------------------------------------------------------------------- 1 | SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 2 | -- cs_tables_rows_vs_count.sql - Compares CBO Stats Rows to COUNT(*) on Application Tables 3 | SET SERVEROUT ON; 4 | DECLARE 5 | l_cnt INTEGER; 6 | l_pct INTEGER; 7 | BEGIN 8 | FOR i IN (SELECT t.owner, t.table_name, t.num_rows, t.last_analyzed FROM dba_tables t, dba_users u WHERE /*t.owner <> 'C##IOD' AND t.table_name NOT LIKE 'KIEV%' AND t.num_rows > 0 AND*/ u.username = t.owner AND u.oracle_maintained = 'N' ORDER BY t.owner, t.table_name) 9 | LOOP 10 | IF NVL(i.num_rows, 0) < 1e6 THEN 11 | EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM "'||i.owner||'"."'||i.table_name||'"' INTO l_cnt; 12 | ELSE 13 | EXECUTE IMMEDIATE 'SELECT 100 * COUNT(*) FROM "'||i.owner||'"."'||i.table_name||'" SAMPLE(1)' INTO l_cnt; 14 | END IF; 15 | l_pct := ROUND(100 * (l_cnt - i.num_rows) / NULLIF(i.num_rows, 0)); 16 | DBMS_OUTPUT.put_line(RPAD(i.owner||'.'||i.table_name, 61, '.')||' GAP:'||LPAD(NVL(TO_CHAR(l_pct), ' '), 4)||'% DAYS:'||LPAD(NVL(TO_CHAR(ROUND(SYSDATE - i.last_analyzed)), ' '), 4)||' COUNT:'||LPAD(l_cnt, 10)||' NUM_ROWS:'||LPAD(i.num_rows, 10)||' ANALYZED:'||TO_CHAR(i.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS')); 17 | END LOOP; 18 | END; 19 | / 20 | -------------------------------------------------------------------------------- /cs_tables_rows_vs_count_outliers.sql: -------------------------------------------------------------------------------- 1 | SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 2 | -- cs_tables_rows_vs_count_outliers.sql - Compares CBO Stats Rows to COUNT(*) on Application Tables and Reports Outliers 3 | SET SERVEROUT ON; 4 | DECLARE 5 | l_cnt INTEGER; 6 | l_pct INTEGER; 7 | BEGIN 8 | FOR i IN (SELECT t.owner, t.table_name, t.num_rows, t.last_analyzed FROM dba_tables t, dba_users u WHERE /*t.owner <> 'C##IOD' AND t.table_name NOT LIKE 'KIEV%' AND t.num_rows > 0 AND*/ t.last_analyzed < SYSDATE -1 AND u.username = t.owner AND u.oracle_maintained = 'N' ORDER BY t.owner, t.table_name) 9 | LOOP 10 | IF NVL(i.num_rows, 0) < 1e6 THEN 11 | EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM "'||i.owner||'"."'||i.table_name||'"' INTO l_cnt; 12 | ELSE 13 | EXECUTE IMMEDIATE 'SELECT 100 * COUNT(*) FROM "'||i.owner||'"."'||i.table_name||'" SAMPLE(1)' INTO l_cnt; 14 | END IF; 15 | l_pct := ROUND(100 * (l_cnt - i.num_rows) / NULLIF(i.num_rows, 0)); 16 | IF ABS(l_pct) > 10 THEN 17 | DBMS_OUTPUT.put_line(RPAD(i.owner||'.'||i.table_name, 61, '.')||' GAP:'||LPAD(NVL(TO_CHAR(l_pct), ' '), 4)||'% DAYS:'||LPAD(NVL(TO_CHAR(ROUND(SYSDATE - i.last_analyzed)), ' '), 4)||' COUNT:'||LPAD(l_cnt, 10)||' NUM_ROWS:'||LPAD(i.num_rows, 10)||' ANALYZED:'||TO_CHAR(i.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS')); 18 | END IF; 19 | END LOOP; 20 | END; 21 | / 22 | -------------------------------------------------------------------------------- /cs_time_to_epoch.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_time_to_epoch.sql 4 | -- 5 | -- Purpose: Convert Time to Epoch 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/06 10 | -- 11 | -- Usage: Execute connected to CDB or PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_time_to_epoch.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 21 | SET NUM 15; 22 | DEF cs_datetime_full_format = 'YYYY-MM-DD"T"HH24:MI:SS'; 23 | DEF cs_datetime_display_format = 'yyyy-mm-ddThh:mi:ss'; 24 | PRO 25 | PRO 1. Enter Time: [&&cs_datetime_display_format.] 26 | DEF cs_time = '&1.'; 27 | UNDEF 1; 28 | -- 29 | -- note: on 19c consider select dbms_stats.convert_raw_to_date(hextoraw('7877031203192A0C1988C0')) from dual; 30 | -- 31 | WITH 32 | days AS ( 33 | SELECT TO_DATE('&&cs_time.', '&&cs_datetime_full_format.') - TO_DATE('1970-01-01T00:00:00', '&&cs_datetime_full_format.') AS cnt FROM DUAL 34 | ) 35 | SELECT days.cnt * 24 * 3600 AS epoch_seconds, days.cnt * 24 * 3600 * 1000 AS epoch_milliseconds 36 | FROM days 37 | / 38 | -------------------------------------------------------------------------------- /cs_top.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: ta.sql | t.sql | cs_top.sql 4 | -- 5 | -- Purpose: Top Active SQL as per Active Sessions History ASH - last 1m 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2021/08/17 10 | -- 11 | -- Usage: Execute connected to PDB or CDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_top.sql 15 | -- 16 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 17 | -- 18 | -- Developed and tested on 12.1.0.2. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | @@cs_internal/cs_file_prefix.sql 27 | -- 28 | DEF cs_script_name = 'cs_top'; 29 | DEF cs_script_acronym = 'ta.sql | t.sql | '; 30 | -- 31 | DEF cs_minutes = '1'; 32 | DEF cs_top = '30'; 33 | -- 34 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 35 | -- 36 | @@cs_internal/cs_spool_head.sql 37 | PRO SQL> @&&cs_script_name..sql 38 | @@cs_internal/cs_spool_id.sql 39 | -- 40 | @@cs_internal/cs_top_activity_internal.sql 41 | @@cs_internal/cs_top_internal_foot.sql 42 | -- 43 | PRO 44 | PRO SQL> @&&cs_script_name..sql 45 | -- 46 | @@cs_internal/cs_spool_tail.sql 47 | @@cs_internal/cs_undef.sql 48 | @@cs_internal/cs_reset.sql 49 | -- -------------------------------------------------------------------------------- /cs_top_range.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_top_range.sql 4 | -- 5 | -- Purpose: Top Active SQL as per Active Sessions History ASH - time range 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/08/17 10 | -- 11 | -- Usage: Execute connected to PDB or CDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_top_range.sql 15 | -- 16 | -- Notes: *** Requires Oracle Diagnostics Pack License *** 17 | -- 18 | -- Developed and tested on 12.1.0.2. 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | @@cs_internal/cs_primary.sql 23 | @@cs_internal/cs_cdb_warn.sql 24 | @@cs_internal/cs_set.sql 25 | @@cs_internal/cs_def.sql 26 | @@cs_internal/cs_file_prefix.sql 27 | -- 28 | DEF cs_script_name = 'cs_top_range'; 29 | DEF cs_script_acronym = 'tr.sql | '; 30 | -- 31 | DEF cs_top = '30'; 32 | -- 33 | SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; 34 | -- 35 | DEF cs_hours_range_default = '1'; 36 | @@cs_internal/cs_sample_time_from_and_to.sql 37 | @@cs_internal/cs_snap_id_from_and_to.sql 38 | -- 39 | @@cs_internal/cs_spool_head.sql 40 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." 41 | @@cs_internal/cs_spool_id.sql 42 | -- 43 | @@cs_internal/cs_spool_id_sample_time.sql 44 | -- 45 | @@cs_internal/cs_top_activity_internal_range.sql 46 | @@cs_internal/cs_top_internal_foot.sql 47 | -- 48 | PRO 49 | PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." 50 | -- 51 | @@cs_internal/cs_spool_tail.sql 52 | @@cs_internal/cs_undef.sql 53 | @@cs_internal/cs_reset.sql 54 | -- -------------------------------------------------------------------------------- /cs_vcn_events.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_vcn_events.sql 4 | -- 5 | -- Purpose: Detect EVENTS_RGN stuck on a KIEV VCN PDB 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/09/30 10 | -- 11 | -- Usage: Execute connected to VCN PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_vcn_events.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; 21 | -- 22 | COL events_rgn_owner NEW_V events_rgn_owner; 23 | SELECT owner events_rgn_owner FROM dba_tables WHERE table_name = 'EVENTS_RGN'; 24 | -- 25 | COL name FOR A200; 26 | COL name FOR A40 TRUNC; 27 | -- 28 | WITH 29 | events_rgn_sq AS ( 30 | SELECT name, kievlive, kievtxnid, MAX(kievtxnid) OVER (PARTITION BY name) max_kievtxnid 31 | FROM &&events_rgn_owner..events_rgn 32 | ) 33 | SELECT TO_CHAR(kt.begintime, 'YYYY-MM-DD"T"HH24:MI:SS') begintime, 34 | (SYSDATE - CAST(kt.begintime AS DATE)) * 24 * 3600 age_in_seconds, 35 | --ROUND((SYSDATE - CAST(kt.begintime AS DATE)) * 24, 1) age_in_hours, 36 | --ROUND((SYSDATE - CAST(kt.begintime AS DATE)), 1) age_in_days, 37 | sq.kievtxnid, sq.name 38 | FROM events_rgn_sq sq, 39 | &&events_rgn_owner..kievtransactions kt 40 | WHERE sq.kievtxnid = sq.max_kievtxnid 41 | AND sq.kievlive = 'Y' 42 | AND kt.committransactionid(+) = sq.kievtxnid 43 | ORDER BY 44 | 1,2 45 | FETCH FIRST 10 ROWS ONLY 46 | / 47 | -------------------------------------------------------------------------------- /cs_vcn_events_v2.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: cs_vcn_events_v2.sql 4 | -- 5 | -- Purpose: Detect EVENTS_V2_RGN stuck on a KIEV VCN PDB 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2022/09/30 10 | -- 11 | -- Usage: Execute connected to VCN PDB. 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @cs_vcn_events_v2.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; 21 | -- 22 | COL events_rgn_owner NEW_V events_rgn_owner; 23 | SELECT owner events_rgn_owner FROM dba_tables WHERE table_name = 'EVENTS_V2_RGN'; 24 | -- 25 | COL name FOR A200; 26 | COL name FOR A40 TRUNC; 27 | -- 28 | WITH 29 | events_rgn_sq AS ( 30 | SELECT name, kievlive, kievtxnid, MAX(kievtxnid) OVER (PARTITION BY name) max_kievtxnid 31 | FROM &&events_rgn_owner..events_v2_rgn 32 | ) 33 | SELECT TO_CHAR(kt.begintime, 'YYYY-MM-DD"T"HH24:MI:SS') begintime, 34 | (SYSDATE - CAST(kt.begintime AS DATE)) * 24 * 3600 age_in_seconds, 35 | --ROUND((SYSDATE - CAST(kt.begintime AS DATE)) * 24, 1) age_in_hours, 36 | --ROUND((SYSDATE - CAST(kt.begintime AS DATE)), 1) age_in_days, 37 | sq.kievtxnid, sq.name 38 | FROM events_rgn_sq sq, 39 | &&events_rgn_owner..kievtransactions kt 40 | WHERE sq.kievtxnid = sq.max_kievtxnid 41 | AND sq.kievlive = 'Y' 42 | AND kt.committransactionid(+) = sq.kievtxnid 43 | ORDER BY 44 | 1,2 45 | FETCH FIRST 10 ROWS ONLY 46 | / 47 | -------------------------------------------------------------------------------- /dba_high_water_mark_statistics.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: dba_high_water_mark_statistics.sql 4 | -- 5 | -- Purpose: Database High Water Mark (HWM) Statistics 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/16 10 | -- 11 | -- Usage: Execute connected to CDB or PDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @dba_high_water_mark_statistics.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 21 | -- 22 | COL version FOR A12; 23 | COL name FOR A20; 24 | COL description FOR A60; 25 | BREAK ON version SKIP PAGE DUPL; 26 | -- 27 | PRO 28 | PRO dba_high_water_mark_statistics 29 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 | SELECT version, name, highwater, last_value, description 31 | FROM dba_high_water_mark_statistics 32 | ORDER BY version, name 33 | / 34 | -- 35 | PRO 36 | PRO v$license 37 | PRO ~~~~~~~~~ 38 | SELECT * 39 | FROM v$license 40 | / 41 | -- 42 | COL resource_name FOR A30; 43 | PRO 44 | PRO v$resource_limit 45 | PRO ~~~~~~~~~~~~~~~~ 46 | SELECT resource_name, current_utilization, max_utilization, initial_allocation, limit_value 47 | FROM v$resource_limit 48 | ORDER BY resource_name 49 | / 50 | -------------------------------------------------------------------------------- /dc.sql: -------------------------------------------------------------------------------- 1 | -- dc.sql - Display Cursor Execution Plan. Execute this script after one SQL for which you want to see the Execution Plan 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20; 3 | SET HEA OFF PAGES 0; 4 | SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR((SELECT prev_sql_id FROM v$session WHERE sid = SYS_CONTEXT('USERENV', 'SID')), NULL, 'ADVANCED ALLSTATS LAST')); 5 | SET HEA ON PAGES 100; 6 | -- in case it was ON the repeat SQL execution followed by this script 7 | SET SERVEROUT OFF; -------------------------------------------------------------------------------- /dp.sql: -------------------------------------------------------------------------------- 1 | -- dp.sql - Display Plan Table Explain Plan. Execute this script after one EXPLAIN PLAN FOR for a SQL for which you want to see the Explain Plan 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20; 3 | SET HEA OFF PAGES 0; 4 | SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', NULL, 'ADVANCED')); 5 | SET HEA ON PAGES 100; 6 | -- in case it was ON the repeat SQL execution followed by this script 7 | SET SERVEROUT OFF; -------------------------------------------------------------------------------- /h.sql: -------------------------------------------------------------------------------- 1 | @@help.sql -------------------------------------------------------------------------------- /help.sql: -------------------------------------------------------------------------------- 1 | HOS less README.md -------------------------------------------------------------------------------- /hidden_parameter.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: hidden_parameter.sql 4 | -- 5 | -- Purpose: Get value of one hidden parameter 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/16 10 | -- 11 | -- Usage: Execute connected to CDB or PDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @hidden_parameter.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; 21 | -- 22 | COL name FOR A50 TRUNC; 23 | COL value FOR A50 TRUNC; 24 | COL pdbs FOR 9999; 25 | COL min_con_id FOR 999999 HEA 'MIN|CON_ID'; 26 | COL max_con_id FOR 999999 HEA 'MAX|CON_ID'; 27 | -- 28 | SELECT p.ksppinm name, 29 | v.ksppstvl value, 30 | COUNT(*) pdbs, 31 | MIN(v.con_id) min_con_id, 32 | MAX(v.con_id) max_con_id 33 | FROM x$ksppi p, 34 | x$ksppsv v 35 | WHERE p.ksppinm LIKE '%¶meter_name.%' 36 | AND v.indx = p.indx 37 | AND v.inst_id = USERENV('INSTANCE') 38 | AND p.inst_id = USERENV('INSTANCE') 39 | AND p.ksppinm LIKE '\_%' ESCAPE '\' 40 | GROUP BY 41 | p.ksppinm, 42 | v.ksppstvl 43 | ORDER BY 44 | p.ksppinm, 45 | v.ksppstvl 46 | / 47 | -------------------------------------------------------------------------------- /hidden_parameters.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: hidden_parameters.sql 4 | -- 5 | -- Purpose: Get value of all hidden parameters 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Version: 2020/12/16 10 | -- 11 | -- Usage: Execute connected to CDB or PDB 12 | -- 13 | -- Example: $ sqlplus / as sysdba 14 | -- SQL> @hidden_parameters.sql 15 | -- 16 | -- Notes: Developed and tested on 12.1.0.2. 17 | -- 18 | --------------------------------------------------------------------------------------- 19 | -- 20 | SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; 21 | -- 22 | COL name FOR A50 TRUNC; 23 | COL value FOR A50 TRUNC; 24 | COL isdefault FOR A10 TRUNC; 25 | COL ismod FOR A10 TRUNC; 26 | COL isadj FOR A10 TRUNC; 27 | -- 28 | SELECT x.ksppinm name, 29 | y.kspftctxvl value, 30 | y.kspftctxdf isdefault, 31 | DECODE(BITAND(y.kspftctxvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod, 32 | DECODE(BITAND(y.kspftctxvf,2),2,'TRUE','FALSE') isadj 33 | FROM sys.x$ksppi x, 34 | sys.x$ksppcv2 y 35 | WHERE x.inst_id = USERENV('INSTANCE') 36 | AND y.inst_id = USERENV('INSTANCE') 37 | AND x.indx+1 = y.kspftctxpn 38 | AND x.ksppinm LIKE '\_%' ESCAPE '\' 39 | AND x.ksppinm NOT LIKE '\_\_%' ESCAPE '\' 40 | AND (y.kspftctxdf = 'FALSE' OR DECODE(BITAND(y.kspftctxvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') <> 'FALSE') 41 | ORDER BY 42 | x.ksppinm 43 | / 44 | -------------------------------------------------------------------------------- /l.sql: -------------------------------------------------------------------------------- 1 | @@cs_latency.sql -------------------------------------------------------------------------------- /la.sql: -------------------------------------------------------------------------------- 1 | DEF cs_top_latency = '20'; 2 | DEF cs_top_load = '10'; 3 | DEF cs_ms_threshold_latency = '0.05'; 4 | DEF cs_aas_threshold_latency = '0.005'; 5 | DEF cs_aas_threshold_load = '0.05'; 6 | DEF cs_uncommon_col = 'NOPRINT'; 7 | -- 8 | COL cs_last_snap_mins NEW_V cs_last_snap_mins NOPRI; 9 | SELECT TRIM(TO_CHAR(ROUND((SYSDATE - CAST(end_interval_time AS DATE)) * 24 * 60, 1), '99990.0')) cs_last_snap_mins 10 | FROM dba_hist_snapshot 11 | ORDER BY 12 | snap_id DESC 13 | FETCH FIRST 1 ROW ONLY 14 | / 15 | DEF cs_execs_delta_h = '&&cs_last_snap_mins. mins'; 16 | -- 17 | COL cs_con_name NEW_V cs_con_name FOR A30 NOPRI; 18 | SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name FROM DUAL 19 | / 20 | -- 21 | SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 22 | SET PAGES 300 LONGC 120; 23 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 24 | ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; 25 | -- 26 | @@cs_internal/cs_latency_internal_cols.sql 27 | @@cs_internal/cs_latency_internal_query_1.sql 28 | -------------------------------------------------------------------------------- /lah.sql: -------------------------------------------------------------------------------- 1 | DEF cs_top = '20'; 2 | -- 3 | @@cs_internal/cs_latency_hist_internal_1.sql 4 | @@cs_internal/cs_latency_hist_internal_2.sql -------------------------------------------------------------------------------- /le.sql: -------------------------------------------------------------------------------- 1 | @@cs_latency_extended.sql -------------------------------------------------------------------------------- /lh.sql: -------------------------------------------------------------------------------- 1 | @@cs_latency_hist.sql -------------------------------------------------------------------------------- /locks.sql: -------------------------------------------------------------------------------- 1 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 2 | @@cs_internal/cs_locks_internal.sql -------------------------------------------------------------------------------- /locks2.sql: -------------------------------------------------------------------------------- 1 | select all_objects.object_name, 2 | all_objects.object_type, 3 | v$locked_object.session_id, 4 | v$session.serial#, 5 | v$lock.type lock_type, -- Type or system/user lock 6 | lmode lock_mode, -- lock mode in which session holds lock 7 | CASE 8 | WHEN lmode = 0 THEN 'NONE: lock requested but not yet obtained' 9 | WHEN lmode = 1 THEN 'NULL' 10 | WHEN lmode = 2 THEN 'ROWS_S (SS): Row Share Lock' 11 | WHEN lmode = 3 THEN 'ROW_X (SX): Row Exclusive Table Lock' 12 | WHEN lmode = 4 THEN 'SHARE (S): Share Table Lock' 13 | WHEN lmode = 5 THEN 'S/ROW-X (SSX): Share Row Exclusive Table Lock' 14 | WHEN lmode = 6 THEN 'Exclusive (X): Exclusive Table Lock' 15 | END Lock_description, 16 | v$lock.request, 17 | v$lock.block, 18 | ctime, -- Time since current mode was granted 19 | 'alter system disconnect session ''' || v$locked_object.session_id || ',' || v$session.serial# || ''' immediate;' killcmd 20 | from v$locked_object, 21 | all_objects, 22 | v$lock, 23 | v$session 24 | where v$locked_object.object_id = all_objects.object_id 25 | AND v$lock.id1 = all_objects.object_id 26 | AND v$lock.sid = v$locked_object.session_id 27 | and v$session.sid = v$lock.sid 28 | order by session_id, ctime desc, object_name; -------------------------------------------------------------------------------- /log.sql: -------------------------------------------------------------------------------- 1 | -- log.sql - REDO Log on Primary and Standby 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; 3 | SET NUM 20; 4 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 5 | -- 6 | PRO 7 | PRO v$log 8 | PRO ~~~~~ 9 | SELECT * FROM v$log 10 | / 11 | -- 12 | PRO 13 | PRO v$log 14 | PRO ~~~~~ 15 | SELECT COUNT(*) groups, 16 | AVG(members) AS members, 17 | AVG(bytes)/POWER(2,20) avg_mbs, 18 | MIN(bytes)/POWER(2,20) min_mbs, 19 | MAX(bytes)/POWER(2,20) max_mbs, 20 | ROUND(SUM(bytes)/POWER(2,30), 1) sum_gbs 21 | FROM v$log 22 | / 23 | -- 24 | PRO 25 | PRO v$log 26 | PRO ~~~~~ 27 | SELECT bytes / POWER(2,30) AS size_gb, COUNT(*) AS groups, AVG(members) AS members 28 | FROM v$log 29 | GROUP BY bytes / POWER(2,30) 30 | / 31 | PRO 32 | PRO v$standby_log 33 | PRO ~~~~~ 34 | SELECT * FROM v$standby_log 35 | / 36 | -- 37 | PRO 38 | PRO v$standby_log 39 | PRO ~~~~~ 40 | SELECT COUNT(*) groups, 41 | 1 AS members, 42 | AVG(bytes)/POWER(2,20) avg_mbs, 43 | MIN(bytes)/POWER(2,20) min_mbs, 44 | MAX(bytes)/POWER(2,20) max_mbs, 45 | ROUND(SUM(bytes)/POWER(2,30), 1) sum_gbs 46 | FROM v$standby_log 47 | / 48 | -- 49 | PRO 50 | PRO v$standby_log 51 | PRO ~~~~~ 52 | SELECT bytes / POWER(2,30) AS size_gb, COUNT(*) AS groups, 1 AS members 53 | FROM v$standby_log 54 | GROUP BY bytes / POWER(2,30) 55 | / -------------------------------------------------------------------------------- /log_history.sql: -------------------------------------------------------------------------------- 1 | -- log_history.sql - REDO Log History 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; 3 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 4 | -- 5 | COL thread# FOR 990; 6 | COL switches FOR 999,990; 7 | SELECT thread#, TO_CHAR(TRUNC(first_time), 'YYYY-MM-DD') day, COUNT(*) switches 8 | FROM v$log_history 9 | GROUP BY 10 | thread#, TRUNC(first_time) 11 | ORDER BY 12 | thread#, TRUNC(first_time) 13 | / 14 | -- 15 | SELECT ROUND(COUNT(*) / 7) switches_per_day 16 | FROM v$log_history 17 | WHERE first_time BETWEEN TRUNC(SYSDATE) - 7 AND TRUNC(SYSDATE) 18 | / 19 | -- 20 | SELECT ROUND(COUNT(*) / 7 / 24, 1) switches_per_hour 21 | FROM v$log_history 22 | WHERE first_time BETWEEN TRUNC(SYSDATE) - 7 AND TRUNC(SYSDATE) 23 | / 24 | 25 | -------------------------------------------------------------------------------- /loop.sql: -------------------------------------------------------------------------------- 1 | SET TIM ON TIMI ON; 2 | DECLARE 3 | l_date DATE := SYSDATE; 4 | l_seconds INTEGER := 600; 5 | BEGIN 6 | WHILE l_date + (l_seconds/24/60/60) > SYSDATE -- loop for l_seconds 7 | LOOP 8 | NULL; 9 | END LOOP; 10 | END; 11 | / 12 | -------------------------------------------------------------------------------- /lr.sql: -------------------------------------------------------------------------------- 1 | @@cs_latency_range.sql -------------------------------------------------------------------------------- /lre.sql: -------------------------------------------------------------------------------- 1 | @@cs_latency_range_extended.sql -------------------------------------------------------------------------------- /ls.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO Producing list of cs scripts as per: HOST ls $ORATK_HOME/sql/cscripts/ | xargs -n1 basename | sort 3 | PRO 4 | PRO 1. Enter optional file_mask, e.g.: [{*}|cs|spbl|sprf|spch|ash|chart|awr|kiev|session|kill|sqlmon|osstat|...] 5 | HOST ls $ORATK_HOME/sql/cscripts/*&1.* | xargs -n1 basename | sort 6 | UNDEF 1 7 | -------------------------------------------------------------------------------- /ma.sql: -------------------------------------------------------------------------------- 1 | @@cs_max_ash_analytics.sql -------------------------------------------------------------------------------- /mas.sql: -------------------------------------------------------------------------------- 1 | @@cs_maximum_active_sessions.sql -------------------------------------------------------------------------------- /mysid.sql: -------------------------------------------------------------------------------- 1 | -- mysid.sql - Get SID and SPID of own Session 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 3 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 4 | -- 5 | COL sid FOR 99999; 6 | COL serial# FOR 9999999; 7 | COL spid FOR A6; 8 | -- 9 | SELECT s.sid, s.serial#, s.logon_time, p.spid 10 | FROM v$session s, 11 | v$process p 12 | WHERE s.sid = SYS_CONTEXT('USERENV', 'SID') 13 | AND p.addr = s.paddr 14 | / 15 | -------------------------------------------------------------------------------- /opatch.sql: -------------------------------------------------------------------------------- 1 | -- opatch.sql - Oracle Patch Registry and History 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 3 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 4 | ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF6'; 5 | CLEAR SQL 6 | PRO 7 | PRO dba_registry 8 | PRO ~~~~~~~~~~~~ 9 | 1 SELECT * FROM dba_registry; 10 | @@cs_internal/cs_pr_internal.sql "" 11 | PRO 12 | PRO dba_registry_sqlpatch 13 | PRO ~~~~~~~~~~~~~~~~~~~~~ 14 | 1 SELECT action_time,action,status,description,logfile,ru_logfile,patch_id,patch_uid,patch_type,source_version,target_version FROM dba_registry_sqlpatch ORDER by action_time; 15 | @@cs_internal/cs_pr_internal.sql "" 16 | PRO 17 | PRO dba_registry_history 18 | PRO ~~~~~~~~~~~~~~~~~~~~ 19 | 1 SELECT * FROM dba_registry_history; 20 | @@cs_internal/cs_pr_internal.sql "" 21 | -------------------------------------------------------------------------------- /open_cursor.sql: -------------------------------------------------------------------------------- 1 | -- open_cursor.sql - Open Cursors and Count of Distinct SQL_ID per Session 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 3 | -- 4 | COL module FOR A32 TRUNC; 5 | COL sid_serial FOR A15 TRUNC; 6 | COL cursors FOR 999,990; 7 | COL sql_ids FOR 999,990; 8 | -- 9 | WITH 10 | c AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM v$open_cursor) 11 | , s AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM v$session) 12 | SELECT s.module, 13 | s.machine, 14 | s.sid||','||s.serial# AS sid_serial, 15 | COUNT(*) AS cursors, 16 | COUNT(DISTINCT c.sql_id) AS sql_ids 17 | FROM c, 18 | s 19 | WHERE s.saddr = c.saddr 20 | AND s.sid = c.sid 21 | GROUP BY 22 | s.module, 23 | s.machine, 24 | s.sid, 25 | s.serial# 26 | ORDER BY 27 | s.module, 28 | s.machine, 29 | s.sid, 30 | s.serial# 31 | / 32 | -------------------------------------------------------------------------------- /p.sql: -------------------------------------------------------------------------------- 1 | @@cs_sqlperf.sql -------------------------------------------------------------------------------- /parameter_change.sql: -------------------------------------------------------------------------------- 1 | SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; 2 | 3 | COL parameter_name FOR A30; 4 | COL value FOR A30; 5 | COL prior_value FOR A30; 6 | 7 | WITH 8 | all_parameters AS ( 9 | SELECT /*+ MATERIALIZE NO_MERGE DYNAMIC_SAMPLING(4) */ /* 1a.30 */ 10 | snap_id, 11 | dbid, 12 | con_id, 13 | instance_number, 14 | parameter_name, 15 | value, 16 | isdefault, 17 | ismodified, 18 | LAG(value) OVER (PARTITION BY dbid, con_id, instance_number, parameter_hash ORDER BY snap_id) prior_value 19 | FROM dba_hist_parameter 20 | ) 21 | SELECT /*+ NO_MERGE */ /* 1a.30 */ 22 | TO_CHAR(s.begin_interval_time, 'YYYY-MM-DD HH24:MI:SS') begin_time, 23 | TO_CHAR(s.end_interval_time, 'YYYY-MM-DD HH24:MI:SS') end_time, 24 | p.snap_id, 25 | p.con_id, 26 | --p.dbid, 27 | p.instance_number, 28 | p.parameter_name, 29 | p.value, 30 | p.isdefault, 31 | p.ismodified, 32 | p.prior_value 33 | FROM all_parameters p, 34 | dba_hist_snapshot s 35 | WHERE p.value != p.prior_value 36 | AND s.snap_id = p.snap_id 37 | AND s.dbid = p.dbid 38 | AND s.instance_number = p.instance_number 39 | ORDER BY 40 | s.begin_interval_time DESC, 41 | --p.dbid, 42 | p.instance_number, 43 | p.parameter_name 44 | / 45 | -------------------------------------------------------------------------------- /pdb_config_hist.sql: -------------------------------------------------------------------------------- 1 | set lin 400 pages 200 2 | col pdb_name format a30 3 | col CONFIG_GROUP format a20 4 | col config_name format a40 5 | col STATUS format a50 6 | col pdb_class format a15 7 | col START_TIME format a30 8 | col END_TIME format a30 9 | break on CONFIG_SET_ID skip page 10 | select 11 | h.config_set_id, 12 | h.pdb_name, 13 | s.config_group, 14 | s.config_version, 15 | s.config_name, 16 | s.pdb_class, 17 | s.run_order, 18 | start_time, 19 | end_time, 20 | ( CAST( end_time AS DATE ) - CAST( start_time AS DATE ) ) * 86400 as elap_time, 21 | decode(h.status,'OK','OK',decode(h.status,'OK','OK',substr(status,1,500) )) status 22 | --h.status 23 | from 24 | c##iod.pdb_config_hist h 25 | ,c##iod.pdb_config_scripts s 26 | -- v$containers p 27 | where h.config_id = s.config_id 28 | --and upper(h.pdb_name) = p.name 29 | --and h.config_set_id = (select max(config_set_id) from c##iod.pdb_config_hist where upper(pdb_name) = p.name) 30 | and h.config_set_id in (select config_set_id from c##iod.pdb_config_hist where start_time > sysdate - 21) 31 | --and h.pdb_name='ocewfaas_wf' 32 | order by start_time 33 | ; -------------------------------------------------------------------------------- /pdb_spfile.sql: -------------------------------------------------------------------------------- 1 | -- pdb_spfile.sql - PDB SPFILE Parameters (from CDB) 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; 3 | -- 4 | COL pdb_name FOR A30 TRUNC; 5 | COL parameter FOR A40; 6 | COL value$ FOR A30 HEA 'sys.pdb_spfile$'; 7 | COL value FOR A30 HEA 'v$system_parameter'; 8 | -- 9 | BREAK ON pdb_name SKIP PAGE DUPL ON parameter SKIP 1 DUPL; 10 | -- 11 | SELECT c.name pdb_name, 12 | p.name parameter, 13 | p.db_uniq_name, 14 | p.value$, 15 | s.value 16 | FROM sys.pdb_spfile$ p, 17 | v$containers c, 18 | v$system_parameter s 19 | WHERE p.pdb_uid > 1 20 | AND BITAND(NVL(p.spare2, 0), 1) = 0 -- or: and spare2=0 (as per wilko.edens@gmail.com) 21 | AND c.con_uid(+) = p.pdb_uid 22 | AND s.con_id(+) = c.con_id 23 | AND s.name(+) = p.name 24 | ORDER BY 25 | c.name, 26 | p.name, 27 | p.db_uniq_name 28 | / 29 | -------------------------------------------------------------------------------- /pdb_spfile_diff.sql: -------------------------------------------------------------------------------- 1 | -- pdb_spfile_diff.sql - PDB SPFILE Parameters (from CDB) 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; 3 | -- 4 | COL pdb_name FOR A30 TRUNC; 5 | COL parameter FOR A40; 6 | COL value$ FOR A30 HEA 'sys.pdb_spfile$'; 7 | COL value FOR A30 HEA 'v$system_parameter'; 8 | -- 9 | BREAK ON pdb_name SKIP PAGE DUPL ON parameter SKIP 1 DUPL; 10 | -- 11 | SELECT c.name pdb_name, 12 | p.name parameter, 13 | p.db_uniq_name, 14 | p.value$, 15 | s.value 16 | FROM sys.pdb_spfile$ p, 17 | v$containers c, 18 | v$system_parameter s 19 | WHERE p.pdb_uid > 1 20 | AND BITAND(NVL(p.spare2, 0), 1) = 0 -- or: and spare2=0 (as per wilko.edens@gmail.com) 21 | AND c.con_uid = p.pdb_uid 22 | AND s.con_id = c.con_id 23 | AND s.name = p.name 24 | AND s.value <> p.value$ 25 | ORDER BY 26 | c.name, 27 | p.name, 28 | p.db_uniq_name 29 | / 30 | -------------------------------------------------------------------------------- /pdb_spfile_sessions_ne_200.sql: -------------------------------------------------------------------------------- 1 | REM pdb_spfile_sessions_ne_200.sql - PDB SPFILE Parameters (from CDB) 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; 3 | -- 4 | COL pdb_name FOR A30 TRUNC; 5 | COL parameter FOR A40; 6 | COL value$ FOR A30 HEA 'sys.pdb_spfile$'; 7 | COL value FOR A30 HEA 'v$system_parameter'; 8 | -- 9 | BREAK ON pdb_name SKIP PAGE DUPL ON parameter SKIP 1 DUPL; 10 | -- 11 | SELECT c.name pdb_name, 12 | p.name parameter, 13 | p.db_uniq_name, 14 | p.value$, 15 | s.value 16 | FROM sys.pdb_spfile$ p, 17 | v$containers c, 18 | v$system_parameter s 19 | WHERE p.pdb_uid > 1 20 | AND BITAND(NVL(p.spare2, 0), 1) = 0 -- or: and spare2=0 (as per wilko.edens@gmail.com) 21 | AND LOWER(p.name) = 'sessions' 22 | AND p.value$ <> '200' 23 | AND c.con_uid(+) = p.pdb_uid 24 | AND s.con_id(+) = c.con_id 25 | AND s.name(+) = p.name 26 | ORDER BY 27 | c.name, 28 | p.name, 29 | p.db_uniq_name 30 | / 31 | -------------------------------------------------------------------------------- /ph.sql: -------------------------------------------------------------------------------- 1 | @@cs_planh.sql -------------------------------------------------------------------------------- /pm.sql: -------------------------------------------------------------------------------- 1 | @@cs_planm.sql -------------------------------------------------------------------------------- /pp.sql: -------------------------------------------------------------------------------- 1 | @@cs_sqlperf_plus.sql -------------------------------------------------------------------------------- /pr.sql: -------------------------------------------------------------------------------- 1 | -- null parameter (assumes then last sql executed) 2 | @@cs_pr.sql "" -------------------------------------------------------------------------------- /reason_not_shared.sql: -------------------------------------------------------------------------------- 1 | -- reason_not_shared.sql - Reasons for not sharing Cursors 2 | SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; 3 | SET PAGES 0; 4 | SPO all_reasons.sql 5 | SELECT CASE WHEN ROWNUM = 1 THEN '( ' ELSE ', ' END||column_name 6 | FROM dba_tab_columns 7 | WHERE table_name = 'V_$SQL_SHARED_CURSOR' 8 | AND owner = 'SYS' 9 | AND data_type = 'VARCHAR2' 10 | AND data_length = 1 11 | / 12 | SPO OFF; 13 | GET all_reasons.sql 14 | I ) 15 | I ) 16 | I WHERE value = 'Y' 17 | I GROUP BY reason_not_shared 18 | I ORDER BY cursors DESC, sql_ids DESC, reason_not_shared 19 | 0 ( value FOR reason_not_shared IN 20 | 0 FROM v$sql_shared_cursor UNPIVOT 21 | 0 SELECT COUNT(*) cursors, COUNT(DISTINCT sql_id) sql_ids, reason_not_shared 22 | L 23 | SET HEA ON NEWP 1 PAGES 30 24 | PRO please wait 25 | / 26 | !rm all_reasons.sql 27 | -------------------------------------------------------------------------------- /session_undo.sql: -------------------------------------------------------------------------------- 1 | -- ----------------------------------------------------------------------------------- 2 | -- File Name : https://oracle-base.com/dba/monitoring/session_undo.sql 3 | -- Author : Tim Hall 4 | -- Description : Displays undo information on relevant database sessions. 5 | -- Requirements : Access to the V$ views. 6 | -- Call Syntax : @session_undo 7 | -- Last Modified: 29/03/2005 8 | -- ----------------------------------------------------------------------------------- 9 | SET LINESIZE 200 10 | 11 | COLUMN username FORMAT A15 12 | 13 | SELECT s.username, 14 | s.sid, 15 | s.serial#, 16 | t.used_ublk, 17 | t.used_urec, 18 | rs.segment_name, 19 | r.rssize, 20 | r.status 21 | FROM v$transaction t, 22 | v$session s, 23 | v$rollstat r, 24 | dba_rollback_segs rs 25 | WHERE s.saddr = t.ses_addr 26 | AND t.xidusn = r.usn 27 | AND rs.segment_id = t.xidusn 28 | ORDER BY t.used_ublk DESC; 29 | -------------------------------------------------------------------------------- /set.sql: -------------------------------------------------------------------------------- 1 | SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 2 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 3 | ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; 4 | ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD"T"HH24:MI:SS.FF3'; 5 | ALTER SESSION SET STATISTICS_LEVEL = 'ALL'; 6 | --ALTER SESSION SET "_px_cdb_view_enabled" = FALSE; -- fails on odis -------------------------------------------------------------------------------- /spfile.sql: -------------------------------------------------------------------------------- 1 | -- spfile.sql - SPFILE Parameters (from PDB or CDB) 2 | SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; 3 | COL sid FOR A12; 4 | COL name FOR A45; 5 | COL type FOR A11; 6 | COL ordinal FOR 999 HEA 'ORD'; 7 | COL value FOR A45; 8 | COL display_value FOR A45; 9 | COL pdbs FOR 9999; 10 | COL min_con_id FOR 999999 HEA 'MIN|CON_ID'; 11 | COL max_con_id FOR 999999 HEA 'MAX|CON_ID'; 12 | 13 | SELECT sid, 14 | name, 15 | type, 16 | ordinal, 17 | value, 18 | display_value, 19 | COUNT(*) pdbs, 20 | MIN(con_id) min_con_id, 21 | MAX(con_id) max_con_id 22 | FROM v$spparameter 23 | WHERE isspecified = 'TRUE' 24 | GROUP BY 25 | sid, 26 | name, 27 | type, 28 | ordinal, 29 | value, 30 | display_value 31 | ORDER BY 32 | sid, 33 | name, 34 | type, 35 | ordinal, 36 | value, 37 | display_value 38 | / 39 | 40 | -------------------------------------------------------------------------------- /ssa.sql: -------------------------------------------------------------------------------- 1 | @@cs_sqlstat_analytics.sql -------------------------------------------------------------------------------- /ssaa.sql: -------------------------------------------------------------------------------- 1 | @@cs_sqlstat_analytics_aggregate.sql -------------------------------------------------------------------------------- /ssaai.sql: -------------------------------------------------------------------------------- 1 | @@cs_sqlstat_analytics_aggregate_iod.sql -------------------------------------------------------------------------------- /ssai.sql: -------------------------------------------------------------------------------- 1 | @@cs_sqlstat_analytics_iod.sql -------------------------------------------------------------------------------- /ssr.sql: -------------------------------------------------------------------------------- 1 | @@cs_sqlstat_report.sql -------------------------------------------------------------------------------- /ssri.sql: -------------------------------------------------------------------------------- 1 | @@cs_sqlstat_report_iod.sql -------------------------------------------------------------------------------- /syncup_pdb_parameters_to_standbys.sql: -------------------------------------------------------------------------------- 1 | -- syncup_pdb_parameters_to_standbys.sql - Sync up SPFILE PDB Parameters from Primary into Standby and Bystander 2 | UNDEF pdb_name; 3 | SET SERVEROUT ON; 4 | BEGIN 5 | FOR i IN (SELECT name FROM v$containers WHERE name LIKE '%&pdb_name.%' AND open_mode = 'READ WRITE') 6 | LOOP 7 | DBMS_OUTPUT.put_line(i.name); 8 | C##IOD.PDB_CONFIG.CONFIGURE(P_PDB_NAME=>i.name,P_CONFIG_NAME=>'syncup pdb parameters to standbys'); 9 | END LOOP; 10 | END; 11 | / 12 | UNDEF pdb_name; 13 | -------------------------------------------------------------------------------- /sysdate.sql: -------------------------------------------------------------------------------- 1 | -- sysdate.sql - Display SYSDATE in Filename safe format and in YYYY-MM-DDTHH24:MI:SS UTC format 2 | SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS filename_safe_format, TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS current_utc_time FROM dual; 3 | -------------------------------------------------------------------------------- /t.sql: -------------------------------------------------------------------------------- 1 | @@cs_top.sql -------------------------------------------------------------------------------- /ta.sql: -------------------------------------------------------------------------------- 1 | DEF cs_minutes = '1'; 2 | DEF cs_top = '30'; 3 | @@cs_internal/cs_top_activity_internal.sql -------------------------------------------------------------------------------- /tr.sql: -------------------------------------------------------------------------------- 1 | @@cs_top_range.sql -------------------------------------------------------------------------------- /trace_10046_10053_mysid_off.sql: -------------------------------------------------------------------------------- 1 | -- trace_10046_10053_mysid_off.sql - Turn OFF SQL Trace and 10053 on own Session 2 | ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT OFF'; 3 | ALTER SESSION SET SQL_TRACE = FALSE; 4 | ALTER SESSION SET STATISTICS_LEVEL = 'TYPICAL'; 5 | -- 6 | HOS cp &&trace_file. /tmp/ 7 | HOS chmod 644 /tmp/&&filename. 8 | -- 9 | HOS tkprof &&trace_file. /tmp/&&filename._tkprof_nosort.txt 10 | HOS tkprof &&trace_file. /tmp/&&filename._tkprof_sort.txt sort=prsela exeela fchela 11 | HOS chmod 644 /tmp/&&filename._tkprof_*sort.txt 12 | -- 13 | PRO scp &&host_name.:/tmp/&&filename.* . 14 | PRO scp &&host_name.:/tmp/&&filename._tkprof*.txt . 15 | -------------------------------------------------------------------------------- /trace_10046_10053_mysid_on.sql: -------------------------------------------------------------------------------- 1 | -- trace_10046_10053_mysid_on.sql - Turn ON SQL Trace EVENT 10046 LEVEL 12 and 10053 on own Session 2 | ALTER SESSION SET tracefile_identifier = '10046_10053'; 3 | -- 4 | COL host_name NEW_V host_name; 5 | COL trace_file NEW_V trace_file; 6 | COL filename NEW_V filename; 7 | -- 8 | SELECT host_name, value trace_file, SUBSTR(value, INSTR(value, '/', -1) +1) filename FROM v$instance, v$diag_info WHERE name = 'Default Trace File'; 9 | -- 10 | ALTER SESSION SET STATISTICS_LEVEL = 'ALL'; 11 | ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12'; 12 | ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL 1'; -------------------------------------------------------------------------------- /trace_10046_mysid_off.sql: -------------------------------------------------------------------------------- 1 | -- trace_10046_mysid_off.sql - Turn OFF SQL Trace on own Session 2 | ALTER SESSION SET SQL_TRACE = FALSE; 3 | ALTER SESSION SET STATISTICS_LEVEL = 'TYPICAL'; 4 | -- 5 | HOS cp &&trace_file. /tmp/ 6 | HOS chmod 644 /tmp/&&filename. 7 | -- 8 | HOS tkprof &&trace_file. /tmp/&&filename._tkprof_nosort.txt 9 | HOS tkprof &&trace_file. /tmp/&&filename._tkprof_sort.txt sort=prsela exeela fchela 10 | HOS chmod 644 /tmp/&&filename._tkprof_*sort.txt 11 | -- 12 | PRO scp &&host_name.:/tmp/&&filename.* . 13 | PRO scp &&host_name.:/tmp/&&filename._tkprof*.txt . 14 | -------------------------------------------------------------------------------- /trace_10046_mysid_on.sql: -------------------------------------------------------------------------------- 1 | -- trace_10046_mysid_on.sql - Turn ON SQL Trace EVENT 10046 LEVEL 12 on own Session 2 | ALTER SESSION SET tracefile_identifier = '10046'; 3 | -- 4 | COL host_name NEW_V host_name; 5 | COL trace_file NEW_V trace_file; 6 | COL filename NEW_V filename; 7 | -- 8 | SELECT host_name, value trace_file, SUBSTR(value, INSTR(value, '/', -1) +1) filename FROM v$instance, v$diag_info WHERE name = 'Default Trace File'; 9 | -- 10 | ALTER SESSION SET STATISTICS_LEVEL = 'ALL'; 11 | ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12'; 12 | -------------------------------------------------------------------------------- /trace_10046_sql_id.sql: -------------------------------------------------------------------------------- 1 | -- trace_10046_sql_id.sql - Turn ON and OFF SQL Trace EVENT 10046 LEVEL 12 on given SQL_ID 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 3 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 4 | PRO 5 | PRO 1. SQL_ID: 6 | DEF sql_id = '&1.'; 7 | UNDEF 1; 8 | -- 9 | COL host_name NEW_V host_name NOPRI; 10 | COL trace_dir NEW_V trace_dir NOPRI; 11 | SELECT host_name, value AS trace_dir FROM v$instance, v$diag_info WHERE name = 'Diag Trace'; 12 | -- 13 | ALTER SYSTEM SET EVENTS='RDBMS.sql_trace off' ; 14 | ALTER SYSTEM SET EVENTS='RDBMS.sql_trace[SQL:&&sql_id.] {occurence: start_after 1, end_after 101} plan_stat=all_executions, bind=true, wait=true' ; 15 | PRO 16 | PAUSE Tracing &&sql_id.. Press RETURN to stop tracing (after enought time for &&sql_id. to execute). 17 | PRO 18 | ALTER SYSTEM SET EVENTS='RDBMS.sql_trace[SQL:&&sql_id.] off' ; 19 | -- 20 | HOS mkdir -p /tmp/SQL_ID_&&sql_id. 21 | --*/ 22 | PRO please wait... 23 | HOS find &&trace_dir./ -mmin -60 | grep trc | xargs grep -i "sqlid='&&sql_id.'" | awk -F: '{print $1}' | sort | uniq | xargs -I{} mv "{}" /tmp/SQL_ID_&&sql_id. 24 | --*/ 25 | HOS rename ora EVENT_10046_&&sql_id. /tmp/SQL_ID_&&sql_id./*ora*.trc 26 | --*/ 27 | HOS chmod 644 /tmp/SQL_ID_&&sql_id./*EVENT_10046_&&sql_id.*.trc 28 | --*/ 29 | HOS ls -lt /tmp/SQL_ID_&&sql_id./*EVENT_10046_&&sql_id.*.trc 30 | --*/ 31 | PRO 32 | PRO If you want to preserve traces, execute scp command below, from a TERM session running on your Mac/PC: 33 | PRO scp &&host_name.:/tmp/SQL_ID_&&sql_id./*EVENT_10046_&&sql_id.*.trc . 34 | --*/ 35 | PRO -------------------------------------------------------------------------------- /trace_10053_mysid_off.sql: -------------------------------------------------------------------------------- 1 | -- trace_10053_mysid_off.sql - Turn OFF CBO EVENT 10053 on own Session 2 | ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT OFF'; 3 | -- 4 | HOS cp &&trace_file. /tmp/ 5 | HOS chmod 644 /tmp/&&filename. 6 | -- 7 | PRO scp &&host_name.:/tmp/&&filename.* . 8 | -------------------------------------------------------------------------------- /trace_10053_mysid_on.sql: -------------------------------------------------------------------------------- 1 | -- trace_10053_mysid_on.sql - Turn ON CBO EVENT 10053 LEVEL 1 on own Session 2 | ALTER SESSION SET tracefile_identifier = '10053'; 3 | -- 4 | COL host_name NEW_V host_name; 5 | COL trace_file NEW_V trace_file; 6 | COL filename NEW_V filename; 7 | -- 8 | SELECT host_name, value trace_file, SUBSTR(value, INSTR(value, '/', -1) +1) filename FROM v$instance, v$diag_info WHERE name = 'Default Trace File'; 9 | -- 10 | ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL 1'; -------------------------------------------------------------------------------- /trace_DUMP_sql_id.sql: -------------------------------------------------------------------------------- 1 | -- trace_SPM_sql_id.sql - Turn ON and OFF SQL Plan Management Trace on given SQL_ID 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; 3 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 4 | -- 5 | PRO 6 | PRO 1. SQL_ID: 7 | DEF sql_id = '&1.'; 8 | UNDEF 1; 9 | -- 10 | PRO 11 | PRO CBO Trace (a.k.a. 10053 Event Trace) is same as "Optimizer" scope. Compiler is a superset of Optimizer. 12 | PRO 13 | PRO 2. Scope: [{Optimizer}|Compiler] 14 | DEF scope = '&2.'; 15 | UNDEF 2; 16 | COL scope NEW_V scope NOPRI; 17 | SELECT CASE WHEN '&&scope.' IN ('Optimizer', 'Compiler') THEN '&&scope.' ELSE 'Optimizer' END AS scope FROM DUAL; 18 | -- 19 | COL host_name NEW_V host_name NOPRI; 20 | COL trace_dir NEW_V trace_dir NOPRI; 21 | SELECT host_name, value AS trace_dir FROM v$instance, v$diag_info WHERE name = 'Diag Trace'; 22 | -- 23 | SET SERVEROUT ON; 24 | DECLARE 25 | l_child_number DBMS_UTILITY.number_array; 26 | BEGIN 27 | SELECT DISTINCT child_number BULK COLLECT INTO l_child_number FROM v$sql WHERE sql_id = '&&sql_id.' AND object_status = 'VALID' AND is_obsolete = 'N' ORDER BY 1; 28 | IF l_child_number.LAST >= l_child_number.FIRST THEN 29 | FOR i IN l_child_number.FIRST .. l_child_number.LAST 30 | LOOP 31 | DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')||' DBMS_SQLDIAG.dump_trace of child_number:'||l_child_number(i)); 32 | DBMS_SQLDIAG.dump_trace(p_sql_id => '&&sql_id.', p_child_number => l_child_number(i), p_component => '&&scope.', p_file_id => 'DUMP_TRACE_10053_&&sql_id._'||l_child_number(i)); 33 | END LOOP; 34 | END IF; 35 | END; 36 | / 37 | SET SERVEROUT OFF; 38 | -- 39 | HOS mkdir -p /tmp/SQL_ID_&&sql_id. 40 | --*/ 41 | HOS mv &&trace_dir./*DUMP_TRACE_10053_&&sql_id.*.trc /tmp/SQL_ID_&&sql_id. 42 | --*/ 43 | HOS rename "ora_" "" /tmp/SQL_ID_&&sql_id./*ora*.trc 44 | --*/ 45 | HOS chmod 644 /tmp/SQL_ID_&&sql_id./*DUMP_TRACE_10053_&&sql_id.*.trc 46 | --*/ 47 | HOS ls -lt /tmp/SQL_ID_&&sql_id./*DUMP_TRACE_10053_&&sql_id.*.trc 48 | --*/ 49 | PRO 50 | PRO If you want to preserve traces, execute scp command below, from a TERM session running on your Mac/PC: 51 | PRO scp &&host_name.:/tmp/SQL_ID_&&sql_id./*DUMP_TRACE_10053_&&sql_id.*.trc . 52 | --*/ 53 | PRO -------------------------------------------------------------------------------- /view.sql: -------------------------------------------------------------------------------- 1 | -- view.sql - Display Text of a given VIEW name 2 | SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; 3 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; 4 | -- 5 | SELECT text 6 | FROM dba_views 7 | WHERE view_name = UPPER('&view_name.') 8 | / 9 | -------------------------------------------------------------------------------- /x.sql: -------------------------------------------------------------------------------- 1 | @@cs_planx.sql --------------------------------------------------------------------------------