├── mig360.sql ├── moat369 ├── .gitignore ├── js │ ├── sorttable.js │ ├── tablefilter │ │ └── style │ │ │ └── themes │ │ │ ├── blank.png │ │ │ ├── upsimple.png │ │ │ ├── downsimple.png │ │ │ └── btn_clear_filters.png │ ├── vs.css │ ├── style.css │ └── decode.min.js ├── sql │ ├── moat369_0e_html_footer.sql │ ├── moat369_fc_def_empty_var.sql │ ├── moat369_fc_def_output_file.sql │ ├── moat369_fc_set_term_off.sql │ ├── moat369_fc_set_value_var_nvl.sql │ ├── moat369_fc_set_value_var_decode.sql │ ├── moat369_fc_spool_end.sql │ ├── moat369_fc_add_sorttable.sql │ ├── moat369_0g_tkprof.sql │ ├── moat369_fc_spool_start.sql │ ├── moat369_fc_set_value_var_nvl2.sql │ ├── moat369_fc_main_table_name.sql │ ├── moat369_fc_exit_no_folder_perms.sql │ ├── moat369_fc_zip_driver_files.sql │ ├── moat369_fc_gen_temp_file.sql │ ├── moat369_fc_check_file_exists.sql │ ├── moat369_fc_section_variables.sql │ ├── moat369_fc_exit_not_connected.sql │ ├── moat369_fc_def_bind_ifnotdef.sql │ ├── moat369_fc_convert_txt_to_html.sql │ ├── moat369_fc_get_dbvault_user.sql │ ├── moat369_0h_html_encoded.sql │ ├── moat369_fc_encrypt_file.sql │ ├── moat369_fc_clear_defs.sql │ ├── moat369_fc_seq_output_file.sql │ ├── moat369_0d_html_header.sql │ ├── moat369_fc_check_last_sql_status.sql │ ├── moat369_fc_load_file_ifexist.sql │ ├── moat369_fc_ren_output_file.sql │ ├── moat369_9e_one_html_spool.sql │ ├── moat369_9b_one_html.sql │ ├── moat369_fc_encode_html.sql │ ├── moat369_0i_html_encoded_index.sql │ ├── moat369_fc_gen_select_star_query.sql │ ├── moat369_fc_clean_file_name.sql │ ├── moat369_fc_skip_script.sql │ ├── moat369_fc_load_column.sql │ ├── moat369_fc_call_section.sql │ ├── moat369_fc_reset_defs.sql │ ├── moat369_9g_one_html_file.sql │ ├── moat369_fc_call_section_sub.sql │ ├── moat369_9d_one_csv.sql │ ├── moat369_fc_add_tablefilter.sql │ ├── moat369_0j_html_topic_intro.sql │ ├── moat369_9c_one_text.sql │ ├── moat369_gc_graphviz_chart.sql │ ├── moat369_0k_html_topic_end.sql │ ├── moat369_fc_gen_object_ddl.sql │ ├── moat369_gc_map_chart.sql │ ├── moat369_gc_pie_chart.sql │ ├── moat369_fc_validate_variable.sql │ ├── moat369_fc_define_files.sql │ ├── moat369_9f_one_text_file.sql │ ├── moat369_0c_post.sql │ ├── moat369_0a_main.sql │ └── moat369_fc_mod_state.sql ├── README.md └── sh │ ├── add_thead_tag_html.sh │ ├── txt_to_html.sh │ ├── csv_to_gchart_data.sh │ ├── csv_to_metadata_ddl.sh │ ├── csv_to_html_table.sh │ ├── run_all_sids.sh │ ├── encode_html.sh │ └── csv-parser.awk ├── jpg ├── .DS_Store ├── mig360.ico └── mig360.jpg ├── sql ├── mig360_8_70_gg_cloud_service.sql ├── mig360_8_35_rman_cross_platform_transportable_tablespaces_xtts_template.sql ├── mig360_3e_os_stats.sql ├── mig360_0b_post.sql ├── mig360_8_45_unplugging_plugging_cdb_12_2.sql ├── mig360_8_50_remote_cloning_noncdb.sql ├── 00_software.sql ├── mig360_8_55_rman_cross_platform_transportable_pdb.sql ├── mig360_get_users_noncdb.sql ├── mig360_get_tablespaces_noncdb.sql ├── mig360_8_50_remote_cloning_cdb.sql ├── mig360_3b_plan_stability.sql ├── 00_sections.csv ├── mig360_3h_goldengate.sql ├── mig360_8_01_data_pump_template_noncdb.sql ├── mig360_get_dbconf_noncdb.sql ├── mig360_7b_oscheck.sql ├── mig360_get_users_cdb.sql ├── mig360_8_01_data_pump_template_noncdb_to_cdb.sql ├── mig360_get_tablespaces_cdb.sql ├── 00_config.sql ├── mig360_get_dbconf_cdb.sql ├── mig360_3d_performance.sql ├── mig360_8_45_unplugging_plugging_noncdb.sql ├── features_use.sql ├── mig360_8_40_rman_inc_bkp_template.sql ├── mig360_1d_opatch.sql ├── mig360_8_15_rman_transportable_tablespace_with_data_pump_template_noncdb.sql ├── mig360_3a_resource_mgm.sql ├── mig360_1c_maintasks.sql ├── mig360_8_65_oracle_dataguard_template.sql ├── mig360_8_15_rman_transportable_tablespace_with_data_pump_template_noncdb_to_cdb.sql ├── mig360_4e_sysmetric_history.sql ├── mig360_2e_security.sql └── mig360_8_30_rman_cross_platform_transportable_tablespace_bkupsets_template_noncdb.sql ├── mig360.sh └── README.md /mig360.sql: -------------------------------------------------------------------------------- 1 | @@moat369/sql/moat369_0a_main.sql 2 | 3 | EXIT 4 | -------------------------------------------------------------------------------- /moat369/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.txt 3 | js/decode.js 4 | -------------------------------------------------------------------------------- /jpg/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexzaballa/migration360/HEAD/jpg/.DS_Store -------------------------------------------------------------------------------- /jpg/mig360.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexzaballa/migration360/HEAD/jpg/mig360.ico -------------------------------------------------------------------------------- /jpg/mig360.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexzaballa/migration360/HEAD/jpg/mig360.jpg -------------------------------------------------------------------------------- /moat369/js/sorttable.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexzaballa/migration360/HEAD/moat369/js/sorttable.js -------------------------------------------------------------------------------- /moat369/js/tablefilter/style/themes/blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexzaballa/migration360/HEAD/moat369/js/tablefilter/style/themes/blank.png -------------------------------------------------------------------------------- /moat369/js/tablefilter/style/themes/upsimple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexzaballa/migration360/HEAD/moat369/js/tablefilter/style/themes/upsimple.png -------------------------------------------------------------------------------- /moat369/js/tablefilter/style/themes/downsimple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexzaballa/migration360/HEAD/moat369/js/tablefilter/style/themes/downsimple.png -------------------------------------------------------------------------------- /sql/mig360_8_70_gg_cloud_service.sql: -------------------------------------------------------------------------------- 1 | PRO URL: http://www.ateam-oracle.com/goldengate-cloud-service-ggcs-replication-from-on-premises-to-oracle-public-cloud-opc-via-vpn/ -------------------------------------------------------------------------------- /moat369/js/tablefilter/style/themes/btn_clear_filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexzaballa/migration360/HEAD/moat369/js/tablefilter/style/themes/btn_clear_filters.png -------------------------------------------------------------------------------- /moat369/sql/moat369_0e_html_footer.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO
3 | PRO &&moat369_sw_copyright. &&moat369_sw_name. &&moat369_sw_vrsn. based on moat369 &&moat369_fw_vrsn.. Timestamp: &&moat369_time_stamp. &&total_hours. 4 | PRO 5 | PRO 6 | -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_def_empty_var.sql: -------------------------------------------------------------------------------- 1 | -- Define variable as empty string >>> IF UNSET <<< 2 | -- Useful if you don't know if the variable is declared but don't want to stop the code asking for it. 3 | 4 | COL c_def_empty_var NEW_V &&1. NOPRI 5 | SELECT '' c_def_empty_var FROM dual WHERE ROWNUM = 0; 6 | COL c_def_empty_var clear 7 | 8 | UNDEF 1 9 | -------------------------------------------------------------------------------- /mig360.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # mig360 collector 4 | 5 | echo "Start mig360." 6 | 7 | v_param1="$1" # License 8 | v_param2="$2" # ESCP 9 | v_param3="$3" # Sections 10 | 11 | sh ./moat369/sh/run_all_sids.sh "DEF moat369_param1 = '${v_param1}'\nDEF moat369_param2 = '${v_param2}'\nDEF moat369_param3 = '${v_param3}'" 12 | 13 | echo "End mig360 collector." 14 | 15 | ### -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_def_output_file.sql: -------------------------------------------------------------------------------- 1 | -- This code will adapt the filename to a correct patern to be used by the code. 2 | -- Param 1 = Variable name 3 | -- Param 2 = Filename 4 | 5 | def c_ofile_param1 = '&&1.' 6 | def c_ofile_param2 = '&&2.' 7 | undef 1 2 8 | 9 | DEF &&c_ofile_param1. = '&&moat369_sw_output_fdr./&&c_ofile_param2.' 10 | 11 | undef c_ofile_param1 c_ofile_param2 -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_set_term_off.sql: -------------------------------------------------------------------------------- 1 | -- This module will turn term output off only if debug mode is not enabled. 2 | SET TERM OFF 3 | 4 | COL c_set_term_off NEW_V c_set_term_off NOPRI 5 | DEF c_set_term_off = 'TERM OFF' 6 | 7 | SELECT 'TERM ON' c_set_term_off FROM DUAL WHERE UPPER(TRIM('&&DEBUG.')) = 'ON'; 8 | SET &&c_set_term_off. 9 | 10 | COL c_set_term_off clear 11 | UNDEF c_set_term_off -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_set_value_var_nvl.sql: -------------------------------------------------------------------------------- 1 | -- 3 parameters are given, works as NVL function: param1 = NVL(param2,param3) 2 | -- Define variable in 1st parameter as 3rd parameter if 2nd parameter is NULL. Else return the 2nd. 3 | 4 | def c_param1 = '&&1.' 5 | 6 | COL c1 NEW_V &&c_param1. NOPRI 7 | select nvl(q'[&&2.]',q'[&&3.]') "c1" from dual; 8 | col c1 clear 9 | 10 | undef c_param1 11 | undef 1 2 3 -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_set_value_var_decode.sql: -------------------------------------------------------------------------------- 1 | -- Works as DECODE function: param1 = DECODE(param2,param3,param4,param5) 2 | -- Define variable in 1st parameter as 4th parameter if param2=param3. Else set as param5. 3 | 4 | def c_param1 = '&&1.' 5 | 6 | col c1 new_v &&c_param1. NOPRI 7 | select decode(q'[&&2.]',q'[&&3.]',q'[&&4.]',q'[&&5.]') "c1" from dual; 8 | col c1 clear 9 | 10 | undef c_param1 11 | undef 1 2 3 4 5 12 | -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_spool_end.sql: -------------------------------------------------------------------------------- 1 | -- This module will prepare SQL*Plus when SPOOL ends 2 | -- This module will turn term output off only if debug mode is not enabled. 3 | COL c_spool_end NEW_V c_spool_end NOPRI 4 | DEF c_spool_end = 'TERM OFF ECHO OFF FEED OFF VER OFF HEAD OFF' 5 | 6 | SELECT 'TERM ON ECHO ON FEED ON VER ON HEAD ON' c_spool_end FROM DUAL WHERE UPPER(TRIM('&&DEBUG.')) = 'ON'; 7 | SET &&c_spool_end. 8 | 9 | COL c_spool_end clear 10 | UNDEF c_spool_end -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_add_sorttable.sql: -------------------------------------------------------------------------------- 1 | -- Parameter 1 : HTML file to have tag fixed 2 | DEF in_html_src_file = '&1.' 3 | UNDEF 1 4 | -- 5 | 6 | SPO &&in_html_src_file. APP 7 | PRO #: click on a column heading to sort on it 8 | PRO
9 | SPO OFF 10 | 11 | SPO &&in_html_src_file. APP 12 | -- Sort TABLE 13 | PRO 14 | SPO OFF 15 | 16 | UNDEF in_html_src_file 17 | 18 | DEF moat369_tf_usage = 'N' 19 | -- 20 | -------------------------------------------------------------------------------- /moat369/sql/moat369_0g_tkprof.sql: -------------------------------------------------------------------------------- 1 | -- tkprof for trace from execution of tool in case someone reports slow performance in tool 2 | HOS ls -lat &&moat369_udump_path.*ora_&&moat369_spid._&&moat369_tracefile_identifier..trc >> &&moat369_log3. 3 | HOS tkprof &&moat369_udump_path.*ora_&&moat369_spid._&&moat369_tracefile_identifier..trc &&moat369_tkprof._sort.txt sort=prsela exeela fchela >> &&moat369_log3. 4 | HOS zip -j &&moat369_zip_filename. &&moat369_tkprof._sort.txt >> &&moat369_log3. 5 | -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_spool_start.sql: -------------------------------------------------------------------------------- 1 | -- This module will prepare SQL*Plus to begin SPOOL 2 | -- This module will turn term output off only if debug mode is not enabled. 3 | COL c_spool_start NEW_V c_spool_start NOPRI 4 | DEF c_spool_start = 'TERM OFF ECHO OFF FEED OFF VER OFF HEAD OFF' 5 | 6 | SELECT 'TERM ON ECHO OFF FEED OFF VER OFF HEAD OFF' c_spool_start FROM DUAL WHERE UPPER(TRIM('&&DEBUG.')) = 'ON'; 7 | SET &&c_spool_start. 8 | 9 | COL c_spool_start clear 10 | UNDEF c_spool_start -------------------------------------------------------------------------------- /sql/mig360_8_35_rman_cross_platform_transportable_tablespaces_xtts_template.sql: -------------------------------------------------------------------------------- 1 | PRO For this migration type, is recommended to use the XTTS script, available at: 2 | PRO 3 | PRO 11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 1389592.1) 4 | PRO 5 | PRO 12C - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2005729.1) 6 | PRO 7 | PRO 8 | PRO If you are on 12c, you can also use "BACKUP FOR TRANSPORT ALLOW INCONSISTENT INCREMENTAL LEVEL 0/1" strategy 9 | PRO 10 | -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_set_value_var_nvl2.sql: -------------------------------------------------------------------------------- 1 | -- 4 parameters are given, works similar to NVL2 function: param1 = NVL2(param2,param3,param4) 2 | -- NVL2 lets you determine the value returned by a query based on whether a specified expression is null or not null. 3 | -- If param2 is not null, then NVL2 returns param3. If param2 is null, then NVL2 returns param4. 4 | 5 | def c_param1 = '&&1.' 6 | 7 | col c1 new_v &&c_param1. NOPRI 8 | select nvl2(q'[&&2.]',q'[&&3.]',q'[&&4.]') "c1" from dual; 9 | col c1 clear 10 | 11 | undef c_param1 12 | undef 1 2 3 4 -------------------------------------------------------------------------------- /moat369/README.md: -------------------------------------------------------------------------------- 1 | # Mother of All Tools 369 2 | 3 | MOAT369 is a Framework created based on [edb360](https://github.com/carlos-sierra/edb360) and [sqld360](https://github.com/mauropagano/sqld360), by [Carlos Sierra](https://carlos-sierra.net/) and [Mauro Pagano](https://mauro-pagano.com/). 4 | 5 | The goal of this framework is to allow anyone to easily extract information from Oracle Databases or Operating System into a fancy HTML format with tables and charts, with minimal coding required. 6 | 7 | For usage sample, check [smp360](https://github.com/dbarj/smp360). -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_main_table_name.sql: -------------------------------------------------------------------------------- 1 | -- If parameter 1 is 'T' or 'Y' (True or Yes), it will define main_table variable as parameter 2, otherwise as parameter 3. 2 | 3 | -- Param 1 = Any variable 4 | -- Param 2 = Value to put in main_table if param1 is T or F 5 | -- Param 3 = Value to put in main_table if param1 isn't T or F 6 | 7 | DEF main_table = '' 8 | COL main_table NEW_V main_table nopri 9 | -- TODO Improve it 10 | SELECT /*+ result_cache */ CASE WHEN '&1' IN ('T','Y') THEN '&2' ELSE '&3' end main_table 11 | FROM dual; 12 | COL main_table clear 13 | 14 | UNDEF 1 2 3 -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_exit_no_folder_perms.sql: -------------------------------------------------------------------------------- 1 | -- Exit the program if not connect to any database in sqlplus. 2 | -- Do not use "fc_set_term_off" in this script to avoid replacing main 1st parameter. 3 | SET TERM OFF 4 | 5 | DEF exit_file = '/tmp/exit_now.sql' 6 | 7 | HOS printf "HOS rm -f &&exit_file." > &&exit_file. 8 | HOS [ -w "&&moat369_sw_output_fdr." ] || printf "PRO OUTPUT FOLDER '&&moat369_sw_output_fdr.' NOT WRITABLE\nHOS rm -f original_settings.sql\nHOS rm -f &&exit_file.\nEXIT SQL.SQLCODE" > &&exit_file. 9 | 10 | SET TERM ON 11 | 12 | @&&exit_file. 13 | UNDEF exit_file 14 | 15 | SET TERM OFF -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_zip_driver_files.sql: -------------------------------------------------------------------------------- 1 | -- This code will save step files generated during MOAT369 execution for DEBUG. 2 | DEF in_file_name = '&1.' 3 | UNDEF 1 4 | 5 | EXEC :driver_seq := :driver_seq + 1; 6 | 7 | COL step_new_file_name new_v step_new_file_name nopri 8 | select substr(word,1,instr(word,'/',-1)) || LPAD(:driver_seq, 3, '0') || '_' || substr(word,instr(word,'/',-1)+1) step_new_file_name 9 | from (select '&&in_file_name.' word from dual); 10 | COL step_new_file_name clear 11 | 12 | HOS mv &&in_file_name. &&step_new_file_name. 13 | 14 | HOS zip -mj &&moat369_driver. &&step_new_file_name. >> &&moat369_log3. 15 | 16 | UNDEF in_file_name step_new_file_name -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_gen_temp_file.sql: -------------------------------------------------------------------------------- 1 | -- This code will generate a temporary file name to be used by the code. 2 | -- Param 1 = Variable name 3 | -- Param 2 = Optionally file name prefix 4 | -- Param 3 = Optionally file name extension 5 | def c_param1 = '&&1.' 6 | @@&&fc_def_empty_var. 2 7 | @@&&fc_def_empty_var. 3 8 | 9 | def c_param2 = '&&2.' 10 | def c_param3 = '&&3.' 11 | undef 1 2 3 12 | 13 | EXEC :temp_seq := :temp_seq + 1; 14 | 15 | col c1 new_v &&c_param1. NOPRI 16 | SELECT '&&moat369_sw_output_fdr./' || NVL('&&c_param2','step_file') || '_' || LPAD(:temp_seq, 5, '0') || '.' || NVL('&&c_param3','sql') c1 from dual; 17 | col c1 clear 18 | 19 | undef c_param1 c_param2 -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_check_file_exists.sql: -------------------------------------------------------------------------------- 1 | -- This code will check if SQL file passed as first parameter exists and will return T or F in the second argument variable. 2 | DEF in_file_name = '&1.' 3 | DEF in_var_name = '&2.' 4 | DEF in_if_true = '&3.' 5 | DEF in_if_false = '&4.' 6 | UNDEF 1 2 3 4 7 | 8 | @@&&fc_def_output_file. step_load_file_name 'step_load_file_name.sql' 9 | 10 | HOS echo "DEF &&in_var_name. = '&&in_if_false.'" > &&step_load_file_name. 11 | HOS if [ -f &&in_file_name. ]; then echo "DEF &&in_var_name. = '&&in_if_true.'" > &&step_load_file_name.; fi 12 | @&&step_load_file_name. 13 | HOS rm -f &&step_load_file_name. 14 | UNDEF step_load_file_name 15 | 16 | UNDEF in_file_name in_var_name in_if_true in_if_false -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_section_variables.sql: -------------------------------------------------------------------------------- 1 | -- Run the following lines from 1 to 9 and from a to j 2 | -- COL moat369_1a NEW_V moat369_1a 3 | -- SELECT CASE WHEN '1a' BETWEEN :moat369_sec_from AND :moat369_sec_to THEN '' ELSE '&&fc_skip_script.' END moat369_1a FROM DUAL; 4 | 5 | @@&&fc_def_output_file. step_file 'step_file.sql'; 6 | HOS &&cmd_awk. 'BEGIN { for (i=1; i<10; i++) for (j=97; j<108; j++) printf("COL c_section_variables NEW_V &&moat369_sw_name._%d%c nopri\nSELECT CASE WHEN '\''%d%c'\'' BETWEEN :moat369_sec_from AND :moat369_sec_to THEN '\'\'' ELSE '\'\&\&'fc_skip_script.'\'' END c_section_variables FROM DUAL;\nCOL c_section_variables clear\n", i, j, i, j) }' > &&step_file. 7 | @&&step_file. 8 | @@&&fc_zip_driver_files. &&step_file. 9 | UNDEF step_file -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_exit_not_connected.sql: -------------------------------------------------------------------------------- 1 | -- Exit the program if not connect to any database in sqlplus. 2 | -- Do not use "fc_set_term_off" in this script to avoid replacing main 1st parameter. 3 | SET TERM OFF 4 | 5 | DEF step_file = '/tmp/step_file.sql' 6 | DEF exit_file = '/tmp/exit_now.sql' 7 | 8 | SPOOL &&step_file. 9 | SELECT 'I_AM_HERE_' || COUNT(*) FROM DUAL; 10 | SPOOL OFF 11 | 12 | HOS printf "HOS rm -f &&exit_file." > &&exit_file. 13 | HOS grep "I_AM_HERE_1" &&step_file. 1>/dev/null || printf "PRO YOU ARE NOT CONNECTED\nHOS rm -f original_settings.sql\nHOS rm -f &&exit_file.\nEXIT SQL.SQLCODE" > &&exit_file. 14 | 15 | HOS rm -f &&step_file. 16 | UNDEF step_file 17 | 18 | SET TERM ON 19 | 20 | @&&exit_file. 21 | UNDEF exit_file 22 | 23 | SET TERM OFF -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_def_bind_ifnotdef.sql: -------------------------------------------------------------------------------- 1 | -- If variable exists, does not declare it again. So the current value is maintained. 2 | -- The select below will drop an error if variable doesn't exist. 3 | 4 | DEF in_param_var = '&&1.' 5 | UNDEF 1 6 | 7 | COL moat369_var_declare NEW_V moat369_var_declare NOPRI 8 | DEF moat369_var_declare = 'VAR &&in_param_var. NUMBER' 9 | SELECT '' moat369_var_declare FROM DUAL WHERE :&&in_param_var. IS NULL OR :&&in_param_var. IS NOT NULL; 10 | COL moat369_var_declare CLEAR 11 | 12 | @@&&fc_def_output_file. step_file_dec_var 'step_file_dec_var.sql' 13 | SPO &&step_file_dec_var. 14 | PRO &&moat369_var_declare. 15 | SPO OFF 16 | @&&step_file_dec_var. 17 | HOS rm -f &&step_file_dec_var. 18 | UNDEF step_file_dec_var moat369_var_declare 19 | 20 | UNDEF in_param_var -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_convert_txt_to_html.sql: -------------------------------------------------------------------------------- 1 | -- This code will check if parameter 1 has a valid file. If it does, it will convert the file to html and update the input parameter with the new name. 2 | DEF in_param = "&1." 3 | UNDEF 1 4 | 5 | @@&&fc_def_output_file. step_file_conv 'step_file_conv.sql' 6 | HOS echo "DEF in_param_content = '&&""&&in_param..'" > &&step_file_conv. 7 | @&&step_file_conv. 8 | 9 | HOS if [ -f &&in_param_content. ]; then echo "HOS sh &&moat369_fdr_sh./txt_to_html.sh &&""in_param_content." > &&step_file_conv.; fi 10 | @&&step_file_conv. 11 | HOS if [ -f &&in_param_content..html ]; then echo "DEF &&in_param. = '&&""in_param_content..html'" > &&step_file_conv.; fi 12 | @&&step_file_conv. 13 | 14 | HOS rm -f &&step_file_conv. 15 | UNDEF step_file_conv 16 | 17 | UNDEF in_param in_param_content -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_get_dbvault_user.sql: -------------------------------------------------------------------------------- 1 | SET TERM ON 2 | PRO 3 | PRO Oracle Database Vault feature is enabled on this DB. 4 | PRO If you have a license for Oracle Database Vault and want this tool to scan for issues on its configuration, 5 | PRO please provide a username and password with access to DV_SECANALYST or DV_OWNER role. 6 | PRO 7 | ACCEPT dbvault_user char format a30 default '?' PROMPT "Oracle DB Vault Username: (NULL to skip check): " 8 | ACCEPT dbvault_pass char format a30 default '?' PROMPT "Oracle DB Vault Password: (NULL to skip check): " HIDE 9 | @@&&fc_set_term_off. 10 | 11 | COL skip_database_vault NEW_V skip_database_vault 12 | SELECT CASE WHEN '&&dbvault_user.' = '?' OR '&&dbvault_pass.' = '?' THEN '&&fc_skip_script.' ELSE NULL END skip_database_vault FROM DUAL; 13 | COL skip_database_vault clear -------------------------------------------------------------------------------- /moat369/sql/moat369_0h_html_encoded.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO 3 | PRO 4 | PRO 5 | PRO 19 | PRO 20 | PRO 21 | PRO 22 | PRO
-------------------------------------------------------------------------------- /moat369/sql/moat369_fc_encrypt_file.sql: -------------------------------------------------------------------------------- 1 | -- This code will check if parameter 1 has a valid file. If it does, it will encrypt the file and update the input parameter with the new name. 2 | DEF in_param = "&1." 3 | UNDEF 1 4 | 5 | @@&&fc_def_output_file. step_file 'step_file.sql' 6 | HOS echo "DEF in_param_content = '&&""&&in_param..'" > &&step_file. 7 | @&&step_file. 8 | 9 | DEF out_enc_file = '&&in_param_content..enc' 10 | 11 | HOS openssl smime -encrypt -binary -aes-256-cbc -in &&in_param_content. -out &&out_enc_file. -outform DER &&moat369_enc_pub_file. 12 | HOS if [ -f &&out_enc_file. ]; then rm -f &&in_param_content.; fi 13 | HOS if [ -f &&out_enc_file. ]; then echo "DEF &&in_param. = '&&""out_enc_file.'" > &&step_file.; fi 14 | @&&step_file. 15 | 16 | HOS rm -f &&step_file. 17 | UNDEF step_file 18 | 19 | UNDEF in_param in_param_content out_enc_file -------------------------------------------------------------------------------- /sql/mig360_3e_os_stats.sql: -------------------------------------------------------------------------------- 1 | /*****************************************************************************************/ 2 | --Operating System (OS) Statistics 3 | 4 | DEF title = 'Operating System (OS) Statistics'; 5 | DEF main_table = '&&gv_view_prefix.OSSTAT'; 6 | BEGIN 7 | :sql_text := q'[ 8 | SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */ 9 | * 10 | FROM &&gv_object_prefix.osstat 11 | ]'; 12 | END; 13 | / 14 | @@&&9a_pre_one. 15 | 16 | /*****************************************************************************************/ 17 | 18 | DEF skip_lch = 'Y'; 19 | DEF skip_bch = 'Y'; 20 | DEF skip_pch = 'Y'; 21 | DEF vaxis = ''; 22 | DEF haxis = ''; 23 | DEF skip_all = ''; 24 | DEF title_suffix = ''; 25 | EXEC :sql_text := ''; 26 | 27 | /*****************************************************************************************/ -------------------------------------------------------------------------------- /sql/mig360_0b_post.sql: -------------------------------------------------------------------------------- 1 | -- Put here any customization that you want to load always after executing the sections. 2 | -- Note it will load only once in the end. 3 | 4 | -- 5 | UNDEF default_user_list_1 6 | UNDEF default_user_list_2 7 | -- 8 | -- 9 | --Call eSCP according to the user choice 10 | -- 11 | COL escp_exec NEW_V escp_exec NOPRI 12 | SELECT CASE WHEN '&escp_mig360_param.' = 'Y' THEN 'sql/esp_master.sql' ELSE '' END escp_exec FROM DUAL; 13 | COL escp_exec clear 14 | @&&escp_exec. 15 | UNDEF escp_exec 16 | 17 | HOS zip -mj &&moat369_zip_filename. awr_ash_pre_check_*.txt > /dev/null 18 | 19 | HOS zip -mj &&moat369_zip_filename. quick_db_view_*.txt > /dev/null 20 | 21 | --zip ddl for users and tablespaces 22 | HOS zip -mj &&moat369_zip_filename. ddl_users.txt > /dev/null 23 | HOS zip -mj &&moat369_zip_filename. ddl_tablespaces.txt > /dev/null 24 | HOS zip -mj &&moat369_zip_filename. ddl_dbconf.txt > /dev/null -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_clear_defs.sql: -------------------------------------------------------------------------------- 1 | -- This code will clear all the DEFINE variables 2 | @@&&fc_def_output_file. all_def_step_file 'all_def_step_file.sql' 3 | @@&&fc_def_output_file. clear_def_exec_file 'clear_def_exec_file.sql' 4 | 5 | -- Save File 6 | SPO &&all_def_step_file. 7 | DEF 8 | SPO OFF 9 | 10 | HOS cat &&all_def_step_file. | &&cmd_grep. -Eo '^DEFINE [^ ]+' | sed 's/^DEFINE //' | &&cmd_grep. -Ev '^_' | xargs -n 1 echo UNDEF >> &&clear_def_exec_file. 11 | HOS rm -f &&all_def_step_file. 12 | 13 | SPO &&clear_def_exec_file. APP 14 | PRO HOS rm -f &&clear_def_exec_file. 15 | SPO OFF 16 | 17 | -- This is working but generating the driver file in wrong zipped file. 18 | -- HOS cp &&clear_def_exec_file. &&clear_def_exec_file..2 19 | -- @@&&fc_zip_driver_files. &&clear_def_exec_file. 20 | -- HOS mv &&clear_def_exec_file..2 &&clear_def_exec_file. 21 | 22 | @@&&clear_def_exec_file. 23 | 24 | UNDEF all_def_step_file clear_def_exec_file -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_seq_output_file.sql: -------------------------------------------------------------------------------- 1 | -- This code will append to the variable provided in param1 the file sequence and the common_prefix. 2 | -- Param 1 = Variable name 3 | 4 | DEF in_param = "&1." 5 | UNDEF 1 6 | 7 | @@&&fc_def_output_file. step_file_seq_out 'step_file_seq_out.sql' 8 | HOS echo "DEF in_param_content = '&&""&&in_param..'" > &&step_file_seq_out. 9 | @&&step_file_seq_out. 10 | HOS rm -f &&step_file_seq_out. 11 | UNDEF step_file_seq_out 12 | 13 | EXEC :file_seq := :file_seq + 1; 14 | 15 | col in_param_content new_v in_param_content nopri 16 | SELECT PATH || LPAD(:file_seq, 5, '0') || REGEXP_REPLACE(REPLACE('_&&common_moat369_prefix._&§ion_id._' || FILE_NAME,'__','_'),'_$','') in_param_content 17 | FROM ( select substr(word,1,instr(word,'/',-1)) PATH, substr(word,instr(word,'/',-1)+1) FILE_NAME 18 | from (select '&&in_param_content.' word from dual)); 19 | col in_param_content clear 20 | 21 | DEF &&in_param. = '&&in_param_content.' 22 | UNDEF in_param in_param_content -------------------------------------------------------------------------------- /moat369/sql/moat369_0d_html_header.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO 3 | PRO 4 | PRO 5 | PRO 6 | PRO 7 | PRO 8 | PRO 9 | PRO 10 | PRO 11 | PRO 12 | PRO 13 | PRO 14 | PRO 15 | PRO 16 | PRO &&title.&&title_suffix. 17 | PRO 18 | PRO 19 | PRO -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_check_last_sql_status.sql: -------------------------------------------------------------------------------- 1 | -- This code will if row_num is -1 meaning no lines were returned by the sql_text. 2 | -- If it is, it will count lines on table to ensure it is empty and update to 0. 3 | 4 | @@&&fc_def_output_file. step_file 'step_file_recount.sql' 5 | 6 | -- Define SELECT start line. Var used in cfc_check_last_sql_status 7 | COL line_no NEW_V moat369_select_start_line 8 | SELECT NVL(LENGTH(:sql_with_clause) - LENGTH(REPLACE(:sql_with_clause, CHR(10), '')),0)+1 line_no from dual; 9 | COL line_no clear 10 | 11 | @@&&fc_spool_start. 12 | SPO &&step_file. 13 | PRO COL row_num NOPRI 14 | PRO GET &&moat369_query. 15 | PRO -- remove rownum 16 | PRO &&moat369_select_start_line. 17 | PRO c/TO_CHAR(ROWNUM) row_num, v0.*/TRIM(COUNT(*)) row_num 18 | PRO / 19 | PRO COL row_num PRI 20 | SPO OFF 21 | @@&&fc_spool_end. 22 | 23 | @@&&fc_set_value_var_decode. 'step_file_exec' '&&row_num.' '-1' '&&step_file.' '&&fc_skip_script. &&step_file.' 24 | 25 | @&&step_file_exec. 26 | HOS rm -f &&step_file. 27 | UNDEF step_file step_file_exec moat369_select_start_line -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_load_file_ifexist.sql: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------- 2 | ------- THIS FUNCTION IS DEPRECATED AND WILL BE REMOVED SOON ------- 3 | -------------------------------------------------------------------- 4 | 5 | -- This code will execute SQL file passed as first parameter only if it exists. 6 | DEF in_file_name = '&1.' 7 | UNDEF 1 8 | 9 | @@&&fc_def_output_file. step_load_file_name 'step_load_file_name.sql' 10 | DEF step_skip_file_name = '&&fc_skip_script.' 11 | 12 | HOS echo "" > &&step_load_file_name. 13 | HOS if [ -f &&in_file_name. ]; then echo "DEF step_skip_file_name = ''" > &&step_load_file_name.; fi 14 | @&&step_load_file_name. 15 | HOS rm -f &&step_load_file_name. 16 | UNDEF step_load_file_name 17 | 18 | @&&step_skip_file_name.&&in_file_name. 19 | 20 | UNDEF in_file_name step_skip_file_name 21 | 22 | -------------------------------------------------------------------- 23 | ------- THIS FUNCTION IS DEPRECATED AND WILL BE REMOVED SOON ------- 24 | -------------------------------------------------------------------- -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_ren_output_file.sql: -------------------------------------------------------------------------------- 1 | -- This code will check if parameter 1 has a valid file. If it does, it will put the file in the stardard name and update the input parameter with the new name. 2 | -- Param 1 = Variable with file path 3 | 4 | DEF in_param_ren_file = "&1." 5 | UNDEF 1 6 | 7 | @@&&fc_def_output_file. step_ren_file 'step_ren_file.sql' 8 | HOS echo "DEF in_param_file_old = '&&""&&in_param_ren_file..'" > &&step_ren_file. 9 | HOS echo "DEF in_param_file_new = '&&""&&in_param_ren_file..'" >> &&step_ren_file. 10 | @&&step_ren_file. 11 | 12 | HOS if [ -f &&in_param_file_old. ]; then echo "@@&&fc_seq_output_file. in_param_file_new" >> &&step_ren_file.; fi 13 | HOS if [ -f &&in_param_file_old. ]; then echo "HOS mv &&""in_param_file_old. &&""in_param_file_new." >> &&step_ren_file.; fi 14 | HOS if [ -f &&in_param_file_old. ]; then echo "DEF &&in_param_ren_file. = '&&""in_param_file_new.'" >> &&step_ren_file.; fi 15 | @&&step_ren_file. 16 | 17 | HOS rm -f &&step_ren_file. 18 | UNDEF step_ren_file 19 | 20 | UNDEF in_param_ren_file in_param_file_old in_param_file_new -------------------------------------------------------------------------------- /moat369/js/vs.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Visual Studio-like style based on original C# coloring by Jason Diamond 4 | 5 | */ 6 | .hljs { 7 | display: block; 8 | overflow-x: auto; 9 | padding: 0.5em; 10 | background: white; 11 | color: black; 12 | } 13 | 14 | .hljs-comment, 15 | .hljs-quote, 16 | .hljs-variable { 17 | color: #008000; 18 | } 19 | 20 | .hljs-keyword, 21 | .hljs-selector-tag, 22 | .hljs-built_in, 23 | .hljs-name, 24 | .hljs-tag { 25 | color: #00f; 26 | } 27 | 28 | .hljs-string, 29 | .hljs-title, 30 | .hljs-section, 31 | .hljs-attribute, 32 | .hljs-literal, 33 | .hljs-template-tag, 34 | .hljs-template-variable, 35 | .hljs-type, 36 | .hljs-addition { 37 | color: #a31515; 38 | } 39 | 40 | .hljs-deletion, 41 | .hljs-selector-attr, 42 | .hljs-selector-pseudo, 43 | .hljs-meta { 44 | color: #2b91af; 45 | } 46 | 47 | .hljs-doctag { 48 | color: #808080; 49 | } 50 | 51 | .hljs-attr { 52 | color: #f00; 53 | } 54 | 55 | .hljs-symbol, 56 | .hljs-bullet, 57 | .hljs-link { 58 | color: #00b0e8; 59 | } 60 | 61 | 62 | .hljs-emphasis { 63 | font-style: italic; 64 | } 65 | 66 | .hljs-strong { 67 | font-weight: bold; 68 | } 69 | -------------------------------------------------------------------------------- /moat369/sql/moat369_9e_one_html_spool.sql: -------------------------------------------------------------------------------- 1 | -- add seq to spool_filename 2 | DEF one_spool_filename = '&&spool_filename.' 3 | @@&&fc_seq_output_file. one_spool_filename 4 | @@&&fc_def_output_file. one_spool_fullpath_filename '&&one_spool_filename..html' 5 | 6 | @@moat369_0j_html_topic_intro.sql &&one_spool_filename..html html 7 | 8 | SET HEA OFF 9 | COL row_num NOPRI 10 | 11 | -- get sql 12 | GET &&moat369_query. 13 | 14 | SPO &&one_spool_fullpath_filename. APP 15 | -- body 16 | SET MARK HTML OFF HEAD OFF SPOOL OFF 17 | / 18 | SPO OFF 19 | 20 | SET HEA ON 21 | COL row_num PRI 22 | 23 | -- get sql_id 24 | SELECT prev_sql_id moat369_prev_sql_id, TO_CHAR(prev_child_number) moat369_prev_child_number FROM v$session WHERE sid = SYS_CONTEXT('USERENV', 'SID'); 25 | 26 | @@&&fc_check_last_sql_status. 27 | 28 | SPO &&one_spool_fullpath_filename. APP 29 | -- footer 30 | PRO &&foot. 31 | --PRO #: click on a column heading to sort on it 32 | PRO 33 | SPO OFF 34 | 35 | @@moat369_0k_html_topic_end.sql &&one_spool_filename..html html N &&sql_show. 36 | 37 | @@&&fc_encode_html. &&one_spool_fullpath_filename. 38 | 39 | HOS zip -mj &&moat369_zip_filename. &&one_spool_fullpath_filename. >> &&moat369_log3. 40 | 41 | UNDEF one_spool_fullpath_filename -------------------------------------------------------------------------------- /moat369/sql/moat369_9b_one_html.sql: -------------------------------------------------------------------------------- 1 | -- add seq to spool_filename 2 | DEF one_spool_filename = '&&spool_filename.' 3 | @@&&fc_seq_output_file. one_spool_filename 4 | @@&&fc_def_output_file. one_spool_fullpath_filename '&&one_spool_filename..html' 5 | 6 | @@moat369_0j_html_topic_intro.sql &&one_spool_filename..html html 7 | 8 | -- get sql 9 | GET &&moat369_query. 10 | 11 | SPO &&one_spool_fullpath_filename. APP 12 | -- body 13 | SET HEA ON 14 | SET MARK HTML ON TABLE 'id="maintable" class="sortable"' SPOOL OFF 15 | / 16 | SET MARK HTML OFF 17 | SPO OFF 18 | 19 | -- get sql_id 20 | SELECT prev_sql_id moat369_prev_sql_id, TO_CHAR(prev_child_number) moat369_prev_child_number FROM v$session WHERE sid = SYS_CONTEXT('USERENV', 'SID'); 21 | 22 | @@&&fc_check_last_sql_status. 23 | 24 | @@&&fc_add_tablefilter. &&one_spool_fullpath_filename. 25 | @@&&fc_add_sorttable. &&one_spool_fullpath_filename. 26 | 27 | SPO &&one_spool_fullpath_filename. APP 28 | -- footer 29 | PRO &&foot. 30 | PRO 31 | SPO OFF 32 | 33 | @@moat369_0k_html_topic_end.sql &&one_spool_filename..html html '' &&sql_show. 34 | 35 | @@&&fc_encode_html. &&one_spool_fullpath_filename. 36 | 37 | HOS zip -mj &&moat369_zip_filename. &&one_spool_fullpath_filename. >> &&moat369_log3. 38 | 39 | UNDEF one_spool_fullpath_filename -------------------------------------------------------------------------------- /sql/mig360_8_45_unplugging_plugging_cdb_12_2.sql: -------------------------------------------------------------------------------- 1 | 2 | PRO URL: https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/mig-unplugging-plugging-pdb.htm 3 | PRO 12.2 4 | PRO 5 | PRO 6 | PRO On Premises: 7 | PRO 8 | PRO mkdir &&path_unplug_pdb. -p 9 | PRO 10 | PRO sqlplus / as sysdba 11 | PRO 12 | PRO 13 | select 'alter pluggable database '||name||' close immediate;'||chr(10)||' ' from v$pdbs where con_id>=3 order by con_id; 14 | PRO 15 | PRO 16 | select 'alter pluggable database '||name||' unplug into ''&&path_unplug_pdb./'||name||'.pdb'';'||chr(10)||' ' from v$pdbs where con_id>=3 order by con_id; 17 | PRO 18 | PRO 19 | PRO Cloud: 20 | PRO 21 | PRO mkdir &&path_plug_pdb. -p 22 | PRO 23 | PRO 24 | PRO On Premises: 25 | PRO 26 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 27 | '&&path_unplug_pdb./*.pdb \'||chr(10)|| 28 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&path_plug_pdb./' 29 | from dual 30 | ; 31 | PRO 32 | PRO 33 | PRO Cloud: 34 | PRO 35 | PRO sqlplus / as sysdba 36 | PRO 37 | PRO 38 | select 'create pluggable database '||name||' using ''&&path_plug_pdb./'||name||'.pdb'';'||chr(10)||' ' from v$pdbs where con_id>=3 order by con_id; 39 | PRO 40 | PRO 41 | select 'alter pluggable database '||name||' open;'||chr(10)||' ' from v$pdbs where con_id>=3 order by con_id; 42 | PRO 43 | PRO -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_encode_html.sql: -------------------------------------------------------------------------------- 1 | -- Parameter 1 : HTML file to be encrypted 2 | -- Parameter 2 : Optional parameter. If not null, means this is the first index page and add a the application logo 3 | DEF in_enc_html_src_file = '&1.' 4 | UNDEF 1 5 | 6 | -- Do not ask for &2. if 2nd parameter is null. 7 | COL C2 NEW_V 2 8 | SELECT '' "C2" FROM dual WHERE ROWNUM = 0; 9 | COL C2 clear 10 | -- 11 | 12 | DEF enc_html_template_file = '' 13 | COL enc_html_template_file NEW_V enc_html_template_file 14 | SELECT DECODE('&2.','','&&moat369_fdr_sql./moat369_0h_html_encoded.sql','&&moat369_fdr_sql./moat369_0i_html_encoded_index.sql') enc_html_template_file FROM DUAL; 15 | COL enc_html_template_file clear 16 | UNDEF 2 17 | 18 | -- This is necessary to resolve the variables inside the enc_html_template_file. 19 | @@&&fc_def_output_file. step_enc_html_file 'step_enc_html_template.sql' 20 | @@&&fc_spool_start. 21 | SPOOL &&step_enc_html_file. 22 | @@&&enc_html_template_file. 23 | SPOOL OFF 24 | @@&&fc_spool_end. 25 | 26 | HOS sh &&moat369_fdr_sh./encode_html.sh '&&in_enc_html_src_file.' '&&step_enc_html_file.' '&&enc_key_file.' '&&moat369_conf_encrypt_html.' '&&moat369_conf_compress_html.' ### Encode html. 27 | 28 | UNDEF in_enc_html_src_file enc_html_template_file 29 | 30 | HOS rm -f &&step_enc_html_file. 31 | UNDEF step_enc_html_file -------------------------------------------------------------------------------- /moat369/sql/moat369_0i_html_encoded_index.sql: -------------------------------------------------------------------------------- 1 | PRO 2 | PRO 3 | PRO 4 | PRO 5 | PRO 19 | PRO 20 | PRO 21 | PRO 22 | PRO
23 | PRO
24 | PRO &&moat369_sw_name. 33 | PRO 34 | PRO
35 | PRO
-------------------------------------------------------------------------------- /moat369/sql/moat369_fc_gen_select_star_query.sql: -------------------------------------------------------------------------------- 1 | -- This code will generate a default "SELECT * FROM" query based on table of parameter 1 and put this query into parameter 2 variable. 2 | -- If parameter 3 is defined, it will order by this parameter. If param1 is a CDB view, con_id will be the first order by clause. 3 | DEF in_table = '&1.' 4 | DEF in_variable = '&2.' 5 | 6 | UNDEF 1 2 7 | 8 | @@&&fc_def_empty_var. 3 9 | def in_order_by = '&&3.' 10 | undef 3 11 | 12 | @@&&fc_set_value_var_nvl. in_order_by '&&in_order_by.' '1, 2' 13 | 14 | DEF def_sel_star_qry = '' 15 | COL def_sel_star_qry NEW_V def_sel_star_qry 16 | 17 | DEF order_by_cdb_flag = '' 18 | COL order_by_cdb_flag NEW_V order_by_cdb_flag 19 | SELECT DECODE(REGEXP_REPLACE(UPPER('&&in_table.'),'^CDB_'),UPPER('&&in_table.'),'','CON_ID, ') order_by_cdb_flag 20 | FROM DUAL; 21 | 22 | DEF in_order_by = '&&order_by_cdb_flag.&&in_order_by.' 23 | 24 | SELECT 25 | 'SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */' || CHR(10) || 26 | ' *' || CHR(10) || 27 | ' FROM &&in_table.' || CHR(10) || 28 | ' ORDER BY ' || CHR(10) || 29 | ' &&in_order_by.' def_sel_star_qry 30 | FROM DUAL; 31 | 32 | COL def_sel_star_qry clear 33 | COL order_by_cdb_flag clear 34 | 35 | EXEC :&&in_variable. := '&&def_sel_star_qry.'; 36 | 37 | UNDEF in_table in_variable in_order_by 38 | UNDEF def_sel_star_qry order_by_cdb_flag -------------------------------------------------------------------------------- /moat369/sh/add_thead_tag_html.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Written by Rodrigo Jorge 4 | # Last updated on: Oct/2018 by Rodrigo Jorge 5 | # ---------------------------------------------------------------------------- 6 | set -e # Exit if error 7 | 8 | if [ $# -ne 1 ] 9 | then 10 | echo "One argument is needed..." 11 | exit 1 12 | fi 13 | 14 | in_file=$1 15 | out_file=$1.tmp 16 | 17 | SOTYPE=$(uname -s) 18 | if [ "$SOTYPE" = "SunOS" ] 19 | then 20 | AWKCMD=/usr/xpg4/bin/awk 21 | SEDCMD=/usr/xpg4/bin/sed 22 | else 23 | AWKCMD=awk 24 | SEDCMD=sed 25 | fi 26 | 27 | test -f $in_file || exit 1 28 | 29 | in_fst_tr_line=`$SEDCMD -ne '//=' $in_file | $SEDCMD -n 1p` 30 | in_sec_tr_line=`$SEDCMD -ne '/<\/tr>/=' $in_file | $SEDCMD -n 1p` 31 | in_last_line=`cat $in_file | wc -l` 32 | 33 | test -n "${in_fst_tr_line}" || exit 1 34 | test -n "${in_sec_tr_line}" || exit 1 35 | test -n "${in_last_line}" || exit 1 36 | 37 | $AWKCMD "NR >= 1 && NR < $in_fst_tr_line {print;}" $in_file > $out_file 38 | echo '' >> $out_file 39 | $AWKCMD "NR >= $in_fst_tr_line && NR <= $in_sec_tr_line {print;}" $in_file >> $out_file 40 | echo '' >> $out_file 41 | $AWKCMD "NR > $in_sec_tr_line && NR <= $in_last_line {print;}" $in_file >> $out_file 42 | mv $out_file $in_file 43 | 44 | exit 0 45 | ### -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_clean_file_name.sql: -------------------------------------------------------------------------------- 1 | -- Convert string on variable specified at parameter 1 to file_name string returned on variable specified on parameter 2 2 | -- Param 1 = Input Variable 3 | -- Param 2 = Output Variable 4 | -- Param 3 = (Optional) If defined to PATH, remove PATH from variable. If NULL clear file as usual. 5 | 6 | DEF in_param = '&1.' 7 | DEF out_param = '&2.' 8 | UNDEF 1 2 9 | 10 | @@&&fc_def_empty_var. 3 11 | def type_param = '&&3.' 12 | undef 3 13 | 14 | @@&&fc_def_output_file. step_file 'step_file.sql' 15 | @@&&fc_spool_start. 16 | SPOOL &&step_file. 17 | PRO DEF in_param_content = '&&&&in_param..' 18 | SPOOL OFF 19 | @@&&fc_spool_end. 20 | @&&step_file. 21 | HOS rm -f &&step_file. 22 | UNDEF step_file 23 | 24 | -- CHR: 25 | -- 00 = NULL 26 | -- 09 = TAB 27 | -- 10 = LF 28 | -- 13 = CR 29 | -- 38 = & 30 | 31 | COL &&out_param. NEW_V &&out_param. 32 | SELECT REPLACE(TRANSLATE('&&in_param_content.', 33 | 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ''`~!@#$%^*()-_=+[]{}\|;:",.<>/?'||CHR(0)||CHR(9)||CHR(10)||CHR(13)||CHR(38), 34 | 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789_'), '__', '_') &&out_param. FROM DUAL WHERE '&&type_param.' IS NULL; 35 | SELECT SUBSTR('&&in_param_content.',INSTR('&&in_param_content.','/',-1)+1) &&out_param. FROM DUAL WHERE '&&type_param.' = 'PATH'; 36 | COL &&out_param. clear 37 | 38 | UNDEF in_param in_param_content out_param type_param -------------------------------------------------------------------------------- /moat369/sh/txt_to_html.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Written by Rodrigo Jorge 4 | # Last updated on: Mar/2017 by Rodrigo Jorge 5 | # ---------------------------------------------------------------------------- 6 | set -e # Exit if error 7 | 8 | if [ $# -ne 1 ] 9 | then 10 | echo "One argument is needed..." 11 | exit 1 12 | fi 13 | 14 | in_file=$1 15 | out_file=$1.html 16 | 17 | SOTYPE=$(uname -s) 18 | if [ "$SOTYPE" = "SunOS" ] 19 | then 20 | SEDCMD=/usr/xpg4/bin/sed 21 | else 22 | SEDCMD=sed 23 | fi 24 | 25 | test -f $in_file || exit 1 26 | 27 | touch $out_file 28 | 29 | echo '' > $out_file 30 | echo '' >> $out_file 31 | echo '
'                     >> $out_file
32 | cat $in_file | $SEDCMD 's|\&|\&|g' | $SEDCMD 's|>|\>|g' | $SEDCMD 's|<|\<|g' >> $out_file
33 | echo '
' >> $out_file 34 | echo '' >> $out_file 35 | echo '' >> $out_file 36 | 37 | test -f $out_file || exit 1 38 | 39 | rm -f $in_file 40 | 41 | exit 0 42 | ### -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_skip_script.sql: -------------------------------------------------------------------------------- 1 | -- This code will skip a script and print what command line was not executed. 2 | SET TERM OFF 3 | COL c_skip_script_1 NEW_V 1 NOPRI 4 | COL c_skip_script_2 NEW_V 2 NOPRI 5 | COL c_skip_script_3 NEW_V 3 NOPRI 6 | COL c_skip_script_4 NEW_V 4 NOPRI 7 | COL c_skip_script_5 NEW_V 5 NOPRI 8 | COL c_skip_script_6 NEW_V 6 NOPRI 9 | COL c_skip_script_7 NEW_V 7 NOPRI 10 | COL c_skip_script_8 NEW_V 8 NOPRI 11 | 12 | SELECT '' c_skip_script_1, '' c_skip_script_2, '' c_skip_script_3, '' c_skip_script_4, '' c_skip_script_5, '' c_skip_script_6, '' c_skip_script_7, '' c_skip_script_8 FROM dual WHERE ROWNUM = 0; 13 | 14 | COL c_skip_script_1 clear 15 | COL c_skip_script_2 clear 16 | COL c_skip_script_3 clear 17 | COL c_skip_script_4 clear 18 | COL c_skip_script_5 clear 19 | COL c_skip_script_6 clear 20 | COL c_skip_script_7 clear 21 | COL c_skip_script_8 clear 22 | 23 | COL c_skip_result NEW_V c_skip_result NOPRI 24 | 25 | select trim('&1. &2. &3. &4. &5. &6. &7. &8.') c_skip_result from dual; 26 | select regexp_replace('&&c_skip_result.','^(&&fc_skip_script.)*','') c_skip_result from dual; 27 | 28 | COL c_skip_result clear 29 | 30 | UNDEF 1 2 3 4 5 6 7 8 31 | 32 | @@&&fc_set_term_off. 33 | 34 | PRO Skip call "&c_skip_result." as per execution parameter. 35 | 36 | --@@&&fc_def_empty_var. moat369_log3 37 | --HOS if [ -f &&moat369_log3. ]; then echo 'Skip call "&c_skip_result." as per execution parameter.' >> &&moat369_log3.; fi 38 | 39 | UNDEF c_skip_result -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_load_column.sql: -------------------------------------------------------------------------------- 1 | -- This code will check for all sections configured for a given column (parameter 1) and load them. 2 | DEF moat369_cur_col_id = '&1.' 3 | UNDEF 1 4 | 5 | DEF moat369_sections_file = '&&moat369_sw_folder./00_sections.csv' 6 | 7 | -- The variable below will be changed to YES if the code ever enter in 9a 8 | DEF moat369_column_print = 'NO' 9 | 10 | @@&&fc_def_output_file. moat369_col_temp_file 'moat369_temp_onload_section_&&moat369_cur_col_id..sql' 11 | HOS &&cmd_grep. -e "^&&moat369_cur_col_id." &&moat369_sections_file. | while read line || [ -n "$line" ]; do echo $line | &&cmd_awk. -F',' '{printf("@"$4"&&""&&moat369_sw_name._"$1".&&""fc_call_secion. "$1" &&moat369_sw_name._"$1"_"$2" "$3"\n")}'; done > &&moat369_col_temp_file. 12 | @&&moat369_col_temp_file. 13 | @@&&fc_zip_driver_files. &&moat369_col_temp_file. 14 | UNDEF moat369_col_temp_file 15 | 16 | HOS unzip &&moat369_zip_filename. &&moat369_style_css. -d &&moat369_sw_output_fdr. >> &&moat369_log3. 17 | HOS if [ "&&moat369_column_print." == "NO" ]; then echo "td.i&&moat369_cur_col_id. {display:none;}" >> &&moat369_sw_output_fdr./&&moat369_style_css.; fi 18 | HOS if [ "&&moat369_column_print." == "YES" ]; then echo "td.i&&moat369_cur_col_id. {}" >> &&moat369_sw_output_fdr./&&moat369_style_css.; fi 19 | HOS zip -mj &&moat369_zip_filename. &&moat369_sw_output_fdr./&&moat369_style_css. >> &&moat369_log3. 20 | 21 | UNDEF moat369_cur_col_id moat369_sections_file moat369_column_print -------------------------------------------------------------------------------- /moat369/js/style.css: -------------------------------------------------------------------------------- 1 | body {font:10pt Arial,Helvetica,Geneva,sans-serif; color:black; background:white;} 2 | h1 {font-size:16pt; font-weight:bold; color:#336699; border-bottom:1px solid #336699; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} 3 | h2 {font-size:14pt; font-weight:bold; color:#336699; margin-top:4pt; margin-bottom:0pt;} 4 | h3 {font-size:12pt; font-weight:bold; color:#336699; margin-top:4pt; margin-bottom:0pt;} 5 | pre {font:8pt monospace,Monaco,"Courier New",Courier;} 6 | a {color:#663300;} 7 | table {font-size:8pt; border-collapse:collapse; empty-cells:show; white-space:nowrap; border:1px solid #336699;} 8 | li {font-size:8pt; color:black; padding-left:4px; padding-right:4px; padding-bottom:2px;} 9 | th {font-weight:bold; color:white; background:#0066CC; padding-left:4px; padding-right:4px; padding-bottom:2px;} 10 | tr {color:black; background:white;} 11 | tr:hover {color:white; background:#0066CC;} 12 | tr.main {color:black; background:white;} 13 | tr.main:hover {color:black; background:white;} 14 | td {vertical-align:top; border:1px solid #336699;} 15 | td.c {text-align:center;} 16 | font.n {font-size:8pt; font-style:italic; color:#336699;} 17 | font.f {font-size:8pt; color:#999999; border-top:1px solid #336699; margin-top:30pt;} 18 | div.google-chart {width:809px; height:500px;} 19 | -------------------------------------------------------------------------------- /sql/mig360_8_50_remote_cloning_noncdb.sql: -------------------------------------------------------------------------------- 1 | 2 | PRO URL: https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/mig-remote-cloning-non-cdb.htm 3 | PRO 4 | PRO 5 | PRO On Premises: 6 | PRO 7 | PRO 8 | PRO sqlplus / as sysdba 9 | PRO 10 | PRO 11 | PRO CREATE USER remote_clone_user IDENTIFIED BY remote_clone_user;; 12 | PRO GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE TO remote_clone_user;; 13 | PRO 14 | PRO shutdown immediate;; 15 | PRO STARTUP MOUNT;; 16 | PRO ALTER DATABASE OPEN READ ONLY;; 17 | PRO 18 | PRO 19 | PRO Cloud: 20 | PRO 21 | PRO 22 | PRO Add to tnsnames.ora 23 | PRO 24 | PRO 25 | select 'dbclone'||'=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=&&mig360_host_name.)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME='||'&&mig360_dbname.'||')))' 26 | from dual; 27 | PRO 28 | PRO 29 | PRO sqlplus / as sysdba 30 | PRO 31 | PRO 32 | select 'CREATE DATABASE LINK clone_link'|| 33 | ' CONNECT TO remote_clone_user IDENTIFIED BY remote_clone_user USING '||'''dbclone'''||';' 34 | from dual 35 | ; 36 | PRO 37 | PRO 38 | select 'CREATE PLUGGABLE DATABASE '||'pdb1'||' FROM '||'NON$CDB'||'@clone_link'||';' 39 | from dual; 40 | PRO 41 | PRO 42 | select 'ALTER SESSION SET CONTAINER='||'pdb1'||';'||chr(10)|| 43 | '@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql' 44 | from dual; 45 | PRO 46 | PRO 47 | select 'alter pluggable database '||'pdb1'||' open;' from dual; 48 | PRO 49 | PRO 50 | PRO 51 | PRO On Premises: 52 | PRO 53 | PRO sqlplus / as sysdba 54 | PRO 55 | PRO ALTER USER remote_clone_user account lock;; 56 | PRO -------------------------------------------------------------------------------- /sql/00_software.sql: -------------------------------------------------------------------------------- 1 | /*********************** software configuration (do not modify ) ************************/ 2 | 3 | DEF moat369_sw_name = 'mig360' 4 | DEF moat369_sw_logo_file = 'mig360.jpg' 5 | DEF moat369_sw_icon_file = 'mig360.ico' 6 | DEF moat369_sw_cert_file = '' 7 | DEF moat369_sw_title_desc = 'Cloud Migration Tool' 8 | DEF moat369_sw_url = 'https://www.enkitec.com' 9 | DEF moat369_sw_rpt_cols = '9' 10 | DEF moat369_sw_misc_fdr = 'jpg' 11 | DEF moat369_sw_dbtool = 'Y' 12 | 13 | DEF moat369_sw_logo_title_1 = "mig360 is a tool that provides a 360-degree view of an Oracle Database migration to the Cloud." 14 | DEF moat369_sw_logo_title_2 = "" 15 | DEF moat369_sw_logo_title_3 = "" 16 | DEF moat369_sw_logo_title_4 = "" 17 | DEF moat369_sw_logo_title_5 = "" 18 | DEF moat369_sw_logo_title_6 = "" 19 | DEF moat369_sw_logo_title_7 = "" 20 | DEF moat369_sw_logo_title_8 = "" 21 | 22 | DEF moat369_sw_vYYNN = 'v01' 23 | DEF moat369_sw_vrsn = '&&moat369_sw_vYYNN. (2021-04-02)' 24 | 25 | DEF moat369_sw_copyright = 'mig360 (c) 2020, All rights reserved. (Based on SQLDB360 and ESEC360)' 26 | DEF moat369_sw_author = 'alex.zaballa' 27 | DEF moat369_sw_email = 'zaballa@gmail.com' 28 | 29 | DEF moat369_sw_enc_sql = 'N' 30 | DEF moat369_sw_dec_cmd = '' 31 | 32 | DEF moat369_sw_param1 = 'license' 33 | DEF moat369_sw_param2 = 'custom' 34 | DEF moat369_sw_param2_var = 'escp_mig360_param' 35 | DEF moat369_sw_param3 = 'section' 36 | 37 | /*************************** software configuration (do not modify ) ****************************/ -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_call_section.sql: -------------------------------------------------------------------------------- 1 | -- This code will call a section and print it. 2 | -- Param 1 = Section ID 3 | -- Param 2 = Section Name 4 | -- Param 3 = File Name 5 | 6 | DEF moat369_sec_id = '&1.' 7 | DEF moat369_sec_fl = '&2.' 8 | DEF moat369_sec_nm = '&3.' 9 | UNDEF 1 2 3 10 | 11 | @@&&skip_tkprof.moat369_0g_tkprof.sql 12 | DEF section_id = '&&moat369_sec_id.'; 13 | DEF section_name = '&&moat369_sec_nm.'; 14 | EXEC DBMS_APPLICATION_INFO.SET_MODULE('&&moat369_prefix.','&§ion_id.'); 15 | @@&&fc_spool_start. 16 | SPO &&moat369_main_report. APP; 17 | PRO

&§ion_id.. &§ion_name.

18 | PRO
    19 | SPO OFF; 20 | @@&&fc_spool_end. 21 | 22 | -- Reset section related DEFs 23 | @@&&fc_reset_defs. 24 | 25 | @@&&fc_def_output_file. section_fifo '&&moat369_sec_id._fifo.sql' 26 | -- HOS mkfifo &§ion_fifo. 27 | set define ^ 28 | HOS [ '^^moat369_sw_enc_sql.' == 'Y' ] && (cat ^^moat369_sw_folder./^^moat369_sec_fl. | openssl enc -d -aes256 -a -salt -pass file:^^moat369_enc_pub_file. > ^^section_fifo.) 29 | -- HOS [ '^^moat369_sw_enc_sql.' != 'Y' ] && (echo "@@^^moat369_sw_folder./^^moat369_sec_fl." > ^^section_fifo.) Commented to reduce nested queries 30 | HOS [ '^^moat369_sw_enc_sql.' != 'Y' ] && (cat ^^moat369_sw_folder./^^moat369_sec_fl. > ^^section_fifo.) 31 | set define & 32 | 33 | @&§ion_fifo. 34 | HOS rm &§ion_fifo. 35 | 36 | @@&&fc_spool_start. 37 | SPO &&moat369_main_report. APP; 38 | PRO
39 | SPO OFF; 40 | @@&&fc_spool_end. 41 | 42 | UNDEF section_id section_name section_fifo 43 | 44 | UNDEF moat369_sec_id moat369_sec_fl moat369_sec_nm -------------------------------------------------------------------------------- /sql/mig360_8_55_rman_cross_platform_transportable_pdb.sql: -------------------------------------------------------------------------------- 1 | PRO Doc ID 2308210.1 2 | PRO Check BUG 28502403 – ORACLE 18.3.0 MULTITENANT: COMPATIBILITY CHECK DOES NOT WORK. 3 | PRO 4 | PRO 5 | PRO On Premises: 6 | PRO 7 | PRO mkdir &&path_unplug_pdb. -p 8 | PRO 9 | PRO sqlplus / as sysdba 10 | PRO 11 | PRO 12 | select 'alter pluggable database '||name||' close immediate;'||chr(10)||' ' from v$pdbs where con_id>=3 order by con_id; 13 | PRO 14 | PRO 15 | PRO rman target / 16 | PRO 17 | select 18 | 'backup for transport'||chr(10)|| 19 | 'unplug into ''&&path_unplug_pdb./'||name||'.xml'''||chr(10)|| 20 | 'format ''&&path_unplug_pdb./'||name||'_BKP_%U'''||chr(10)|| 21 | 'pluggable database '||name||';'||chr(10)|| 22 | ' ' 23 | from v$pdbs where con_id>=3 order by con_id; 24 | PRO 25 | PRO 26 | PRO Cloud: 27 | PRO 28 | PRO mkdir &&path_plug_pdb. -p 29 | PRO 30 | PRO 31 | PRO On Premises: 32 | PRO 33 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 34 | '&&path_unplug_pdb./* \'||chr(10)|| 35 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&path_plug_pdb./' 36 | from dual 37 | ; 38 | PRO 39 | PRO 40 | PRO Cloud: 41 | PRO 42 | PRO rman target / 43 | PRO 44 | PRO 45 | select 46 | 'restore using ''&&path_plug_pdb./'||name||'.xml'''||chr(10)|| 47 | 'foreign pluggable database '||name||chr(10)|| 48 | 'format ''+DATA/***ASM_PATH***/%U'''||chr(10)|| 49 | 'from backupset ''&&path_plug_pdb./***BACKUPSET_NAME_HERE***'''||';'||chr(10)|| 50 | ' ' 51 | from v$pdbs where con_id>=3 order by con_id 52 | ; 53 | PRO 54 | PRO 55 | select 'alter pluggable database '||name||' open;'||chr(10)||' ' from v$pdbs where con_id>=3 order by con_id; 56 | PRO -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_reset_defs.sql: -------------------------------------------------------------------------------- 1 | -- Reset variables and defs used by each item. 2 | EXEC :sql_text := NULL; 3 | EXEC :sql_text_cdb := NULL; 4 | EXEC :sql_text_display := NULL; 5 | EXEC :sql_with_clause := NULL; 6 | DEF row_num = '-1' 7 | DEF row_num_dif = 0 8 | DEF abstract = '' 9 | DEF abstract2 = '' 10 | DEF main_table = '' 11 | DEF foot = '' 12 | DEF max_rows = '&&moat369_def_sql_maxrows.' 13 | DEF sql_hl = '&&moat369_def_sql_highlight.' 14 | DEF sql_format = '&&moat369_def_sql_format.' 15 | DEF sql_show = '&&moat369_def_sql_show.' 16 | -- 17 | DEF skip_html = '&&moat369_def_skip_html.' 18 | DEF skip_text = '&&moat369_def_skip_text.' 19 | DEF skip_csv = '&&moat369_def_skip_csv.' 20 | DEF skip_lch = '&&moat369_def_skip_line.' 21 | DEF skip_pch = '&&moat369_def_skip_pie.' 22 | DEF skip_bch = '&&moat369_def_skip_bar.' 23 | DEF skip_graph = '&&moat369_def_skip_graph.' 24 | DEF skip_map = '&&moat369_def_skip_map.' 25 | DEF skip_treemap = '&&moat369_def_skip_treemap.' 26 | DEF skip_html_spool = '&&fc_skip_script.' 27 | DEF skip_text_file = '&&fc_skip_script.' 28 | DEF skip_html_file = '&&fc_skip_script.' 29 | DEF d3_graph = '' 30 | -- 31 | DEF title_suffix = '' 32 | DEF haxis = '&&db_version. &&cores_threads_hosts.' 33 | -- 34 | -- needed reset after eventual sqlmon 35 | SET HEA ON 36 | SET LIN 32767 37 | SET NEWP NONE 38 | SET PAGES &&moat369_def_sql_maxrows. 39 | SET LONG 32000000 40 | SET LONGC 4000 41 | SET WRA ON 42 | SET TRIMS ON 43 | SET TRIM ON 44 | SET TI OFF 45 | SET TIMI OFF 46 | SET ARRAY 1000 47 | SET NUM 20 48 | SET SQLBL ON 49 | SET BLO . 50 | SET RECSEP OFF 51 | -- -------------------------------------------------------------------------------- /moat369/sql/moat369_9g_one_html_file.sql: -------------------------------------------------------------------------------- 1 | -- add seq to spool_filename 2 | DEF one_spool_filename = '&&spool_filename.' 3 | @@&&fc_seq_output_file. one_spool_filename 4 | @@&&fc_def_output_file. one_spool_fullpath_filename '&&one_spool_filename..html' 5 | 6 | -- Check mandatory variables 7 | @@&&fc_def_empty_var. one_spool_html_file 8 | @@&&fc_def_empty_var. one_spool_html_file_type 9 | @@&&fc_def_empty_var. one_spool_html_desc_table 10 | @@&&fc_set_value_var_nvl. 'one_spool_html_desc_table' '&&one_spool_html_desc_table.' 'N' 11 | 12 | @@&&fc_set_value_var_nvl. one_spool_html_file_type '&&one_spool_html_file_type.' 'html' 13 | 14 | @@moat369_0j_html_topic_intro.sql &&one_spool_filename..html &&one_spool_html_file_type. 15 | 16 | HOS cat &&one_spool_html_file. >> &&one_spool_fullpath_filename. 17 | 18 | @@&&fc_def_output_file. step_file 'step_file.sql' 19 | HOS echo "DEF row_num = '"$(($(cat &&one_spool_html_file. | grep '' | wc -l)-1))"'" > &&step_file. 20 | @&&step_file. 21 | HOS rm -f &&step_file. 22 | UNDEF step_file 23 | 24 | -- get sql_id 25 | SELECT prev_sql_id moat369_prev_sql_id, TO_CHAR(prev_child_number) moat369_prev_child_number FROM v$session WHERE sid = SYS_CONTEXT('USERENV', 'SID') 26 | / 27 | 28 | @@moat369_0k_html_topic_end.sql &&one_spool_filename..html &&one_spool_html_file_type. &&one_spool_html_desc_table. N 29 | 30 | @@&&fc_encode_html. &&one_spool_fullpath_filename. 31 | 32 | -- zip 33 | HOS zip -mj &&moat369_zip_filename. &&one_spool_fullpath_filename. >> &&moat369_log3. 34 | 35 | HOS rm -f &&one_spool_html_file. 36 | 37 | UNDEF one_spool_html_file one_spool_html_desc_table one_spool_html_file_type 38 | 39 | UNDEF one_spool_fullpath_filename -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_call_section_sub.sql: -------------------------------------------------------------------------------- 1 | -- This code will call a section and print it. 2 | -- Param 1 = Section ID 3 | -- Param 2 = Section Name 4 | -- Param 3 = File Name 5 | 6 | DEF moat369_subsec_id = '&1.' 7 | DEF moat369_subsec_fl = '&2.' 8 | DEF moat369_subsec_nm = '&3.' 9 | UNDEF 1 2 3 10 | 11 | @@&&skip_tkprof.moat369_0g_tkprof.sql 12 | DEF section_id = '&&moat369_subsec_id.'; 13 | DEF section_name = '&&moat369_subsec_nm.'; 14 | EXEC DBMS_APPLICATION_INFO.SET_MODULE('&&moat369_prefix.','&§ion_id.'); 15 | @@&&fc_spool_start. 16 | SPO &&moat369_main_report. APP; 17 | PRO

&§ion_id.. &§ion_name.

18 | PRO
    19 | SPO OFF; 20 | @@&&fc_spool_end. 21 | 22 | -- Reset section related DEFs 23 | @@&&fc_reset_defs. 24 | 25 | @@&&fc_def_output_file. sub_section_fifo '&&moat369_subsec_id._fifo.sql' 26 | -- HOS mkfifo &&sub_section_fifo. 27 | set define ^ 28 | HOS [ '^^moat369_sw_enc_sql.' == 'Y' ] && (cat ^^moat369_sw_folder./^^moat369_subsec_fl. | openssl enc -d -aes256 -a -salt -pass file:^^moat369_enc_pub_file. > ^^sub_section_fifo.) 29 | -- HOS [ '^^moat369_sw_enc_sql.' != 'Y' ] && (echo "@@^^moat369_sw_folder./^^moat369_subsec_fl." > ^^sub_section_fifo.) Commented to reduce nested queries 30 | HOS [ '^^moat369_sw_enc_sql.' != 'Y' ] && (cat ^^moat369_sw_folder./^^moat369_subsec_fl. > ^^sub_section_fifo.) 31 | set define & 32 | 33 | @&&sub_section_fifo. 34 | HOS rm &&sub_section_fifo. 35 | 36 | @@&&fc_spool_start. 37 | SPO &&moat369_main_report. APP; 38 | PRO
39 | SPO OFF; 40 | @@&&fc_spool_end. 41 | 42 | UNDEF section_id section_name sub_section_fifo 43 | 44 | UNDEF moat369_subsec_id moat369_subsec_fl moat369_subsec_nm -------------------------------------------------------------------------------- /sql/mig360_get_users_noncdb.sql: -------------------------------------------------------------------------------- 1 | -- 2 | SET TERM ON; 3 | SET HEA ON; 4 | SET LIN 32767; 5 | SET NEWP NONE; 6 | SET PAGES 1000; 7 | SET LONG 32000; 8 | SET LONGC 2000; 9 | SET WRA ON; 10 | SET TRIMS ON; 11 | SET TRIM ON; 12 | SET TI OFF; 13 | SET TIMI OFF; 14 | SET NUM 20; 15 | SET SQLBL ON; 16 | SET BLO .; 17 | SET RECSEP OFF; 18 | SET ECHO OFF; 19 | SET VER OFF; 20 | SET FEED OFF; 21 | 22 | SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON 23 | 24 | BEGIN 25 | DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); 26 | DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); 27 | END; 28 | / 29 | 30 | COL my_spool_filename NEW_V my_spool_filename NOPRI; 31 | 32 | -- get sool filename and dbid 33 | SELECT 'ddl_users.txt' my_spool_filename FROM dual 34 | / 35 | 36 | 37 | SPO &&my_spool_filename. 38 | 39 | PRO 40 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 41 | PRO USERS 42 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 43 | PRO 44 | PRO 45 | 46 | @@&&fc_main_table_name. '&&is_cdb.' 'CDB_USERS' 'DBA_USERS' 47 | 48 | SELECT &&skip_when_noncdb.'pdb-->'||con_id||chr(10)|| 49 | DBMS_METADATA.get_ddl ('USER', username) 50 | FROM &&main_table. s 51 | WHERE 1=1 52 | &&skip_10g_column.&&skip_11g_column.AND oracle_maintained = 'N' 53 | &&skip_12c_column.&&skip_18c_column.AND (username not in &&default_user_list_1. and username not in &&default_user_list_2.) 54 | ORDER BY 55 | &&skip_when_noncdb.con_id, 56 | username 57 | / 58 | 59 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 | PRO 61 | 62 | SPO OFF; 63 | 64 | COL my_spool_filename CLE; 65 | 66 | -------------------------------------------------------------------------------- /moat369/sql/moat369_9d_one_csv.sql: -------------------------------------------------------------------------------- 1 | -- add seq to one_spool_filename 2 | DEF one_spool_filename = '&&spool_filename.' 3 | @@&&fc_seq_output_file. one_spool_filename 4 | @@&&fc_def_output_file. one_spool_fullpath_filename '&&one_spool_filename..csv' 5 | 6 | -- display 7 | SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') hh_mm_ss FROM DUAL; 8 | SET TERM ON; 9 | SPO &&moat369_log. APP; 10 | PRO &&hh_mm_ss. &§ion_id. "&&one_spool_filename..csv" 11 | SPO OFF; 12 | @@&&fc_set_term_off. 13 | 14 | -- update main report 15 | SPO &&moat369_main_report. APP; 16 | PRO csv 17 | SPO OFF; 18 | 19 | -- get time t0 20 | EXEC :get_time_t0 := DBMS_UTILITY.get_time; 21 | 22 | -- get sql 23 | GET &&moat369_query. 24 | 25 | -- header 26 | SPO &&one_spool_fullpath_filename.; 27 | 28 | -- body 29 | SET PAGES 50000; 30 | SET COLSEP '<,>'; 31 | / 32 | SET PAGES &&moat369_def_sql_maxrows.; 33 | SET COLSEP ' '; 34 | SPO OFF 35 | 36 | -- get sql_id 37 | SELECT prev_sql_id moat369_prev_sql_id, TO_CHAR(prev_child_number) moat369_prev_child_number FROM v$session WHERE sid = SYS_CONTEXT('USERENV', 'SID'); 38 | 39 | @@&&fc_check_last_sql_status. 40 | 41 | -- footer 42 | 43 | -- get time t1 44 | EXEC :get_time_t1 := DBMS_UTILITY.get_time; 45 | 46 | -- update log2 47 | SET HEA OFF; 48 | SPO &&moat369_log2. APP; 49 | SELECT TO_CHAR(SYSDATE, '&&moat369_date_format.')||' , '|| 50 | TO_CHAR((:get_time_t1 - :get_time_t0)/100, '999,999,990.00')||'s , rows:'|| 51 | '&&row_num., &§ion_id., &&main_table., &&moat369_prev_sql_id., &&moat369_prev_child_number., &&title_no_spaces., csv , &&one_spool_filename..csv' 52 | FROM DUAL 53 | / 54 | SPO OFF; 55 | SET HEA ON; 56 | 57 | HOS zip -mj &&moat369_zip_filename. &&one_spool_fullpath_filename. >> &&moat369_log3. 58 | 59 | UNDEF one_spool_fullpath_filename -------------------------------------------------------------------------------- /sql/mig360_get_tablespaces_noncdb.sql: -------------------------------------------------------------------------------- 1 | -- 2 | SET TERM ON; 3 | SET HEA ON; 4 | SET LIN 32767; 5 | SET NEWP NONE; 6 | SET PAGES 1000; 7 | SET LONG 32000; 8 | SET LONGC 2000; 9 | SET WRA ON; 10 | SET TRIMS ON; 11 | SET TRIM ON; 12 | SET TI OFF; 13 | SET TIMI OFF; 14 | SET NUM 20; 15 | SET SQLBL ON; 16 | SET BLO .; 17 | SET RECSEP OFF; 18 | SET ECHO OFF; 19 | SET VER OFF; 20 | SET FEED OFF; 21 | 22 | SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON 23 | 24 | BEGIN 25 | DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); 26 | DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); 27 | END; 28 | / 29 | 30 | COL my_spool_filename NEW_V my_spool_filename NOPRI; 31 | 32 | -- get sool filename and dbid 33 | SELECT 'ddl_tablespaces.txt' my_spool_filename FROM dual 34 | / 35 | 36 | 37 | SPO &&my_spool_filename. 38 | 39 | PRO 40 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 41 | PRO TABLESPACES 42 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 43 | PRO 44 | PRO 45 | 46 | @@&&fc_main_table_name. '&&is_cdb.' 'CDB_TABLESPACES' 'DBA_TABLESPACES' 47 | 48 | SELECT &&skip_when_noncdb.'pdb-->'||con_id||chr(10)|| 49 | DBMS_METADATA.get_ddl ('TABLESPACE', tablespace_name) 50 | FROM &&main_table. s 51 | WHERE 1=1 52 | AND s.contents NOT IN ('UNDO','TEMPORARY') 53 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS') 54 | ORDER BY 55 | &&skip_when_noncdb.con_id, 56 | tablespace_name 57 | / 58 | 59 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 | PRO 61 | 62 | SPO OFF; 63 | 64 | COL my_spool_filename CLE; 65 | 66 | -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_add_tablefilter.sql: -------------------------------------------------------------------------------- 1 | -- Parameter 1 : HTML file to have tag fixed 2 | DEF in_html_src_file = '&1.' 3 | UNDEF 1 4 | -- 5 | @@&&fc_def_empty_var. filtertab_option1 6 | @@&&fc_def_empty_var. filtertab_option2 7 | @@&&fc_def_empty_var. filtertab_option3 8 | @@&&fc_def_empty_var. filtertab_option4 9 | @@&&fc_set_value_var_nvl. 'filtertab_option1' "&&filtertab_option1." "alternate_rows: true, col_types: ['number']," 10 | @@&&fc_set_value_var_nvl. 'filtertab_option2' "&&filtertab_option2." "rows_counter: true, btn_reset: true, loader: true," 11 | @@&&fc_set_value_var_nvl. 'filtertab_option3' "&&filtertab_option3." "status_bar: true, mark_active_columns: true, highlight_keywords: true," 12 | @@&&fc_set_value_var_nvl. 'filtertab_option4' "&&filtertab_option4." "auto_filter: true, extensions:[{ name: 'sort' }]" 13 | 14 | -- Add to first row so column sort can work. 15 | HOS sh &&moat369_fdr_sh./add_thead_tag_html.sh '&&in_html_src_file.' 16 | 17 | SPO &&in_html_src_file. APP 18 | PRO #: click on a column heading to sort on it 19 | PRO
20 | SPO OFF 21 | 22 | SPO &&in_html_src_file. APP 23 | -- Filter TABLE 24 | PRO 25 | PRO 38 | SPO OFF 39 | 40 | UNDEF in_html_src_file 41 | 42 | UNDEF filtertab_option1 filtertab_option2 filtertab_option3 filtertab_option4 43 | 44 | DEF moat369_tf_usage = 'Y' 45 | -- -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # mig360 2 | 3 | MIG360 is a tool to advise Database migrations. 4 | 5 | 1. Unzip mig360.zip, navigate to the root mig360 directory, and connect as SYS, 6 | DBA, or any User with Data Dictionary access: 7 | 8 | ``` 9 | $ unzip mig360.zip 10 | $ cd mig360 11 | $ sqlplus / as sysdba 12 | ``` 13 | 14 | 2. Execute mig360.sql. 15 | 16 | ``` 17 | SQL> @mig360.sql 18 | ``` 19 | 20 | Usage: 21 | 22 | ``` 23 | @mig360 24 | 25 | @mig360 T N 26 | 27 | @mig360 T N 1-4 28 | 29 | @mig360 T Y 8 30 | ``` 31 | 32 | 1st parameter: (T)uning pack, (D)iagnostic pack, (N)one 33 | 34 | 2nd parameter: Y/N - run or not run ESP_COLLECT - https://github.com/carlos-sierra/esp_collect 35 | 36 | 3rd parameter: sections (optional) - default all sections 37 | 38 | 4th parameter: Type of migration (To be implemented) 39 | 40 | 41 | 42 | 3. Unzip output MIG360___YYYYMMDD_HH24MI.zip into a directory on your PC 43 | 44 | 4. Review main html file 00001_mig360__index.html 45 | 46 | 47 | 48 | ## Notes ## 49 | 50 | 1. As mig360 can run for a long time, in some systems it's recommend to execute it unattended: 51 | 52 | $ nohup sqlplus / as sysdba @mig360.sql T Y & 53 | 54 | 2. If you need to execute MIG360 against all databases in the host, use mig360.sh: 55 | 56 | $ unzip mig360.zip 57 | 58 | $ cd mig360 59 | 60 | $ sh mig360.sh T Y 61 | 62 | 63 | 3. If you need to execute only a portion of MIG360 (i.e. a column, section or range) use 64 | these commands. Notice first parameter can be set to one section (i.e. 3b), 65 | one column (i.e. 3), a range of sections (i.e. 5c-6b) or range of columns (i.e. 5-7): 66 | 67 | SQL> @mig360.sql T N 8 68 | 69 | note: valid column range for first parameter is 1 to 9. 70 | 71 | 72 | ## Versions ## 73 | * v01 (2023-04-19) by Alex Zaballa 74 | -------------------------------------------------------------------------------- /sql/mig360_8_50_remote_cloning_cdb.sql: -------------------------------------------------------------------------------- 1 | 2 | PRO URL: https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/mig-remote-cloning-pdb.htm 3 | PRO 4 | PRO 5 | PRO On Premises: 6 | PRO 7 | PRO 8 | PRO sqlplus / as sysdba 9 | PRO 10 | PRO 11 | select 'ALTER SESSION SET CONTAINER='||name||';'||chr(10)|| 12 | ' CREATE USER remote_clone_user IDENTIFIED BY remote_clone_user;'||chr(10)|| 13 | ' GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE TO remote_clone_user;'||chr(10)|| 14 | ' ' 15 | from v$pdbs where con_id>=3 order by con_id; 16 | PRO 17 | PRO 18 | PRO CONN / AS SYSDBA 19 | PRO 20 | select 21 | 'ALTER PLUGGABLE DATABASE '||name||' CLOSE;'||chr(10)|| 22 | 'ALTER PLUGGABLE DATABASE '||name||' OPEN READ ONLY;'||chr(10)|| 23 | ' ' 24 | from v$pdbs where con_id>=3 order by con_id; 25 | PRO 26 | PRO 27 | PRO 28 | PRO Cloud: 29 | PRO 30 | PRO 31 | PRO Add to tnsnames.ora 32 | PRO 33 | PRO 34 | select name||'_onp=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=&&mig360_host_name.)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME='||name||')))' 35 | from v$pdbs where con_id>=3 order by con_id; 36 | PRO 37 | PRO 38 | PRO sqlplus / as sysdba 39 | PRO 40 | PRO 41 | select 'CREATE DATABASE LINK clone_link_'||name|| 42 | ' CONNECT TO remote_clone_user IDENTIFIED BY remote_clone_user USING '''||name||'_onp'';'||chr(10)||' ' 43 | from v$pdbs where con_id>=3 order by con_id 44 | ; 45 | PRO 46 | PRO 47 | select 'CREATE PLUGGABLE DATABASE '||name||' FROM '||name||'@clone_link_'||name||';'||chr(10)||' ' 48 | from v$pdbs where con_id>=3 order by con_id; 49 | PRO 50 | PRO 51 | select 'alter pluggable database '||name||' open;'||chr(10)||' ' 52 | from v$pdbs where con_id>=3 order by con_id; 53 | PRO 54 | PRO 55 | PRO On Premises: 56 | PRO 57 | PRO sqlplus / as sysdba 58 | PRO 59 | select 'ALTER SESSION SET CONTAINER='||name||';'||chr(10)|| 60 | 'ALTER USER remote_clone_user account lock;'||chr(10)|| 61 | ' ' 62 | from v$pdbs where con_id>=3 order by con_id; 63 | PRO 64 | -------------------------------------------------------------------------------- /moat369/sql/moat369_0j_html_topic_intro.sql: -------------------------------------------------------------------------------- 1 | -- Param1: file_name / Param2: Type 2 | def 0j_param1 = '&&1.' 3 | def 0j_param2 = '&&2.' 4 | undef 1 2 5 | 6 | -- display 7 | SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') hh_mm_ss FROM DUAL; 8 | @@&&fc_spool_start. 9 | SET TERM ON 10 | SPO &&moat369_log. APP 11 | PRO &&hh_mm_ss. &§ion_id. "&&0j_param1." 12 | SPO OFF 13 | @@&&fc_set_term_off. 14 | @@&&fc_spool_end. 15 | 16 | -- update main report 17 | @@&&fc_spool_start. 18 | SPO &&moat369_main_report. APP 19 | PRO &&0j_param2. 20 | SPO OFF 21 | @@&&fc_spool_end. 22 | 23 | -- get time t0 24 | EXEC :get_time_t0 := DBMS_UTILITY.get_time; 25 | 26 | -- header 27 | @@&&fc_spool_start. 28 | SPO &&moat369_sw_output_fdr./&&0j_param1. 29 | @@moat369_0d_html_header.sql 30 | SPO OFF 31 | @@&&fc_spool_end. 32 | 33 | -- javascripts 34 | HOS if [ '&&sql_format.' == 'Y' ]; then echo '' >> &&moat369_sw_output_fdr./&&0j_param1.; fi 35 | HOS if [ '&&sql_hl.' == 'Y' ]; then echo '' >> &&moat369_sw_output_fdr./&&0j_param1.; fi 36 | HOS if [ '&&sql_hl.' == 'Y' ]; then echo '' >> &&moat369_sw_output_fdr./&&0j_param1.; fi 37 | 38 | @@&&fc_def_empty_var. main_table_print 39 | @@&&fc_set_value_var_nvl2. main_table_print '&&main_table.' ' (&&main_table.)' '' 40 | 41 | -- topic begin 42 | @@&&fc_spool_start. 43 | SPO &&moat369_sw_output_fdr./&&0j_param1. APP 44 | PRO 45 | PRO 46 | PRO 47 | PRO 48 | PRO

&&moat369_sw_name. &§ion_id..&&report_sequence.. &&title.&&title_suffix.&&main_table_print.

49 | PRO 50 | PRO
51 | PRO &&abstract. 52 | PRO &&abstract2. 53 | PRO 54 | SPO OFF 55 | @@&&fc_spool_end. 56 | 57 | undef main_table_print 58 | undef 0j_param1 0j_param2 -------------------------------------------------------------------------------- /moat369/sh/csv_to_gchart_data.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Written by Rodrigo Jorge 4 | # Last updated on: May/2017 by Rodrigo Jorge 5 | # ---------------------------------------------------------------------------- 6 | if [ $# -ne 2 ] 7 | then 8 | echo "Two arguments are needed..." 9 | exit 1 10 | fi 11 | 12 | v_sep=$1 13 | v_sourcecsv=$2 14 | 15 | test -f $v_sourcecsv || exit 1 16 | 17 | v_fl_col_tag_o="'" 18 | v_fl_col_tag_c="'" 19 | v_al_col_tag_o="" 20 | v_al_col_tag_c="" 21 | v_col_sep="," 22 | v_line_o="[" 23 | v_line_c="]" 24 | v_line_sep="," 25 | 26 | SOTYPE=$(uname -s) 27 | if [ "$SOTYPE" = "SunOS" ] 28 | then 29 | AWKCMD=/usr/xpg4/bin/awk 30 | SEDCMD=/usr/xpg4/bin/sed 31 | # echo -e "xxx" in solaris prints "-e xxx" when using /bin/sh. 32 | ECHO_E="echo" 33 | else 34 | AWKCMD=awk 35 | SEDCMD=sed 36 | ECHO_E="echo -e" 37 | fi 38 | 39 | v_firstline=true 40 | 41 | v_head_ncols=$(head -n 1 $v_sourcecsv | $AWKCMD '{n=split($0, array, "'$v_sep'")} END{print n }') 42 | 43 | v_tot=$(cat $v_sourcecsv | wc -l | $AWKCMD '{print $1}') 44 | 45 | v_count=0 46 | 47 | while read -r line || [ -n "$line" ] 48 | do 49 | v_ncols=$($AWKCMD '{n=split($0, array, "'$v_sep'")} END{print n }' <<< "$line") 50 | if [ $v_head_ncols -ne $v_ncols ] 51 | then 52 | echo ERROR 53 | break 54 | fi 55 | $ECHO_E $v_line_o\\c 56 | if $v_firstline 57 | then 58 | v_linerep=$($SEDCMD "s|$v_sep|${v_fl_col_tag_c}${v_col_sep}${v_fl_col_tag_o}|g" <<< "$line") 59 | $ECHO_E ${v_fl_col_tag_o}${v_linerep}${v_fl_col_tag_c}\\c 60 | v_firstline=false 61 | else 62 | v_linerep=$($SEDCMD "s|$v_sep|${v_al_col_tag_c}${v_col_sep}${v_al_col_tag_o}|g" <<< "$line") 63 | $ECHO_E ${v_al_col_tag_o}${v_linerep}${v_al_col_tag_c}\\c 64 | fi 65 | $ECHO_E $v_line_c\\c 66 | v_count=$((v_count+1)) 67 | [ $v_count -eq $v_tot ] && echo "" || echo ${v_line_sep} 68 | done < ${v_sourcecsv} 69 | 70 | exit 0 71 | #### -------------------------------------------------------------------------------- /sql/mig360_3b_plan_stability.sql: -------------------------------------------------------------------------------- 1 | /*****************************************************************************************/ 2 | --SQL Patches 3 | 4 | DEF title = 'SQL Patches'; 5 | @@&&fc_main_table_name. '&&is_cdb.' 'CDB_SQL_PATCHES' 'DBA_SQL_PATCHES' 6 | BEGIN 7 | :sql_text := q'[ 8 | SELECT * 9 | FROM &&dva_object_prefix.sql_patches 10 | ORDER BY 11 | created DESC 12 | ]'; 13 | :sql_text_cdb := q'[ 14 | SELECT * 15 | FROM CDB_SQL_PATCHES 16 | ORDER BY 17 | con_id, 18 | created DESC 19 | ]'; 20 | END; 21 | / 22 | @@&&skip_ver_le_10.&&9a_pre_one. 23 | 24 | 25 | /*****************************************************************************************/ 26 | --SQL Profiles 27 | 28 | DEF title = 'SQL Profiles'; 29 | @@&&fc_main_table_name. '&&is_cdb.' 'CDB_SQL_PROFILES' 'DBA_SQL_PROFILES' 30 | BEGIN 31 | :sql_text := q'[ 32 | SELECT * 33 | FROM &&dva_object_prefix.sql_profiles 34 | ORDER BY 35 | created DESC 36 | ]'; 37 | :sql_text_cdb := q'[ 38 | SELECT * 39 | FROM CDB_SQL_PROFILES 40 | ORDER BY 41 | con_id, 42 | created DESC 43 | ]'; 44 | END; 45 | / 46 | @@&&skip_tuning.&&9a_pre_one. 47 | 48 | /*****************************************************************************************/ 49 | --SQL Plan Baselines 50 | 51 | DEF title = 'SQL Plan Baselines'; 52 | @@&&fc_main_table_name. '&&is_cdb.' 'CDB_SQL_PLAN_BASELINES' 'DBA_SQL_PLAN_BASELINES' 53 | BEGIN 54 | :sql_text := q'[ 55 | SELECT * 56 | FROM &&dva_object_prefix.sql_plan_baselines 57 | ORDER BY 58 | created DESC 59 | ]'; 60 | :sql_text_cdb := q'[ 61 | SELECT * 62 | FROM CDB_SQL_PLAN_BASELINES 63 | ORDER BY 64 | con_id, 65 | created DESC 66 | ]'; 67 | END; 68 | / 69 | @@&&skip_ver_le_10.&&9a_pre_one. 70 | 71 | /*****************************************************************************************/ 72 | 73 | DEF skip_lch = 'Y'; 74 | DEF skip_bch = 'Y'; 75 | DEF skip_pch = 'Y'; 76 | DEF vaxis = ''; 77 | DEF haxis = ''; 78 | DEF skip_all = ''; 79 | DEF title_suffix = ''; 80 | EXEC :sql_text := ''; 81 | 82 | /*****************************************************************************************/ 83 | -------------------------------------------------------------------------------- /moat369/sql/moat369_9c_one_text.sql: -------------------------------------------------------------------------------- 1 | -- add seq to one_spool_filename 2 | DEF one_spool_filename = '&&spool_filename.' 3 | @@&&fc_seq_output_file. one_spool_filename 4 | @@&&fc_def_output_file. one_spool_fullpath_filename '&&one_spool_filename..txt' 5 | 6 | -- display 7 | SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') hh_mm_ss FROM DUAL; 8 | SET TERM ON 9 | SPO &&moat369_log. APP 10 | PRO &&hh_mm_ss. &§ion_id. "&&one_spool_filename..txt" 11 | SPO OFF 12 | @@&&fc_set_term_off. 13 | 14 | -- update main report 15 | SPO &&moat369_main_report. APP; 16 | PRO text 17 | SPO OFF; 18 | 19 | -- get time t0 20 | EXEC :get_time_t0 := DBMS_UTILITY.get_time; 21 | 22 | -- get sql 23 | GET &&moat369_query. 24 | 25 | -- header 26 | SPO &&one_spool_fullpath_filename.; 27 | PRO &&title.&&title_suffix. (&&main_table.) 28 | PRO 29 | PRO &&abstract. 30 | PRO &&abstract2. 31 | PRO 32 | 33 | -- body 34 | / 35 | SPO OFF 36 | 37 | -- get sql_id 38 | SELECT prev_sql_id moat369_prev_sql_id, TO_CHAR(prev_child_number) moat369_prev_child_number FROM v$session WHERE sid = SYS_CONTEXT('USERENV', 'SID'); 39 | 40 | @@&&fc_check_last_sql_status. 41 | 42 | SPO &&one_spool_fullpath_filename. APP 43 | -- footer 44 | PRO &&foot. 45 | SET LIN &&moat369_sw_desc_linesize. 46 | DESC &&main_table. 47 | SET HEA OFF LIN 32767 48 | PRINT sql_text_display; 49 | SET HEA ON 50 | PRO &&row_num. rows selected. 51 | 52 | PRO 53 | PRO &&moat369_sw_copyright. &&moat369_sw_name. &&moat369_sw_vrsn. based on moat369 &&moat369_fw_vrsn.. Timestamp: &&moat369_time_stamp. &&total_hours. 54 | SPO OFF; 55 | 56 | -- get time t1 57 | EXEC :get_time_t1 := DBMS_UTILITY.get_time; 58 | 59 | -- update log2 60 | SET HEA OFF; 61 | SPO &&moat369_log2. APP; 62 | SELECT TO_CHAR(SYSDATE, '&&moat369_date_format.')||' , '|| 63 | TO_CHAR((:get_time_t1 - :get_time_t0)/100, '999,999,990.00')||'s , rows:'|| 64 | '&&row_num., &§ion_id., &&main_table., &&moat369_prev_sql_id., &&moat369_prev_child_number., &&title_no_spaces., txt , &&one_spool_filename..txt' 65 | FROM DUAL 66 | / 67 | SPO OFF; 68 | SET HEA ON; 69 | 70 | HOS zip -mj &&moat369_zip_filename. &&one_spool_fullpath_filename. >> &&moat369_log3. 71 | 72 | UNDEF one_spool_fullpath_filename -------------------------------------------------------------------------------- /moat369/sh/csv_to_metadata_ddl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Written by Rodrigo Jorge 4 | # Last updated on: Dec/2016 by Rodrigo Jorge 5 | # ---------------------------------------------------------------------------- 6 | set -e # Exit if error 7 | 8 | if [ $# -ne 7 ] 9 | then 10 | echo "Seven arguments are needed..." 11 | exit 1 12 | fi 13 | 14 | v_sep=$1 15 | v_sourcecsv=$2 16 | v_ignore_header=$3 17 | v_field_type=$4 18 | v_field_owner=$5 19 | v_field_name=$6 20 | v_targetzip=$7 21 | 22 | v_meta_func="&&fc_gen_object_ddl." 23 | v_ren_func="&&fc_ren_output_file." 24 | v_to_html_func="&&fc_convert_txt_to_html." 25 | v_enc_html_func="&&fc_encode_html." 26 | ### 27 | v_var_output="out_filename" 28 | v_stm_id="META_OBJCTS" 29 | 30 | test -f $v_sourcecsv || exit 1 31 | 32 | SOTYPE=$(uname -s) 33 | if [ "$SOTYPE" = "SunOS" ] 34 | then 35 | AWKCMD=/usr/xpg4/bin/awk 36 | else 37 | AWKCMD=awk 38 | fi 39 | 40 | v_firstline=true 41 | 42 | while read -r line || [ -n "$line" ] 43 | do 44 | v_type=$($AWKCMD '{n=split($0, array, "'$v_sep'")} END{print array['$v_field_type'] }' <<< "$line") 45 | v_owner=$($AWKCMD '{n=split($0, array, "'$v_sep'")} END{print array['$v_field_owner'] }' <<< "$line") 46 | v_name=$($AWKCMD '{n=split($0, array, "'$v_sep'")} END{print array['$v_field_name'] }' <<< "$line") 47 | # read v_type v_owner v_name <<< $(echo $line | $AWKCMD -F"${v_sep}" '{print $'$v_field_type', $'$v_field_owner', $'$v_field_name'}') 48 | 49 | if $v_firstline && $v_ignore_header 50 | then 51 | v_firstline=false 52 | else 53 | echo "@$v_meta_func \"${v_type// /_}\" \"${v_name}\" \"${v_owner}\" \"${v_var_output}\"" 54 | echo "HOS zip -j ${v_targetzip} &&${v_var_output}. >> &&moat369_log3." 55 | echo "@$v_ren_func ${v_var_output}" 56 | echo "@$v_to_html_func ${v_var_output}" 57 | echo "@$v_enc_html_func &&${v_var_output}." 58 | echo "insert into plan_table (STATEMENT_ID, OBJECT_OWNER, OBJECT_NAME, OBJECT_TYPE, REMARKS)" 59 | echo "values ('${v_stm_id}','${v_owner}','${v_name}','${v_type}','&&${v_var_output}.');" 60 | echo "HOS zip -mj &&moat369_zip_filename. &&${v_var_output}. >> &&moat369_log3." 61 | echo "UNDEF ${v_var_output}" 62 | fi 63 | done < ${v_sourcecsv} 64 | 65 | exit 0 66 | #### -------------------------------------------------------------------------------- /sql/00_sections.csv: -------------------------------------------------------------------------------- 1 | -- Add or remove new Sections in this file. No need to update anywhere else. 2 | -- Use "," as field separator 3 | -- Format: Section ID [1a - 9z], File Sufix Name, Section Description, Skip Variables (If last field is empty or its variables return NULL, sql WILL be executed) 4 | -- 5 | 1a,configuration.sql,'Database Configuration' 6 | 1b,scheduler.sql,'Scheduler' 7 | 1c,maintasks.sql,'Maintenance Tasks',&&skip_ver_le_10. 8 | 1d,opatch.sql,'Patch Info' 9 | 1e,memory.sql,'Memory' 10 | 1f,resources.sql,'Resources (as per AWR and MEM)' 11 | 1g,features.sql,'Options - Usage Statistics' 12 | -- 13 | 2a,admin.sql,'Database Administration' 14 | 2b,storage.sql,'Storage' 15 | 2c,asm.sql,'Automatic Storage Management (ASM)' 16 | 2d,rman.sql,'Backup and Recovery' 17 | 2e,security.sql,'User Security Configuration' 18 | 2f,profiles.sql,'DB Profiles' 19 | 2g,secsystem.sql,'System Privilege Analyses' 20 | 2h,secroles.sql,'Roles Privilege Analyses' 21 | -- 22 | 3a,resource_mgm.sql,'Database Resource Management (DBRM)' 23 | 3b,plan_stability.sql,'Plan Stability' 24 | 3c,cbo_stats.sql,'Cost-based Optimizer (CBO) Statistics' 25 | 3d,performance.sql,'Performance Summaries' 26 | 3e,os_stats.sql,'Operating System (OS) Statistics History' 27 | 3f,sessions.sql,'Sessions' 28 | 3g,dataguard.sql,'Data Guard Primary Site' 29 | 3h,goldengate.sql,'Golden Gate' 30 | -- 31 | 4a,sga_stats.sql,'System Global Area (SGA) Statistics History' 32 | 4b,pga_stats.sql,'Program Global Area (PGA) Statistics History' 33 | 4c,mem_stats.sql,'Memory Statistics History' 34 | 4d,time_model.sql,'System Time Model' 35 | 4e,sysmetric_history.sql,'System Metric History per Snap Interval' 36 | -- 37 | 5a,ash.sql,'Active Session History (ASH)' 38 | -- 39 | 6a,ash_class.sql,'Active Session History (ASH) - Top Timed Classes' 40 | 6b,ash_event.sql,'Active Session History (ASH) - Top Timed Events' 41 | 6c,ash_sql.sql,'Active Session History (ASH) - Top SQL' 42 | -- 43 | 7a,network.sql,'Network' 44 | 7b,oscheck.sql,'OS Security Checks' 45 | -- 46 | 8a,mig.sql,'Migration Options',&&skip_run_8. 47 | -- 48 | 9a,shape.sql,'Shape - Recommendations',&&skip_run_9. 49 | -- 50 | -- Note: You can optionally have sections 0a_pre.sql and 0b_post.sql (not defined on this csv). 51 | -- They are not mandatory and they instruct moat to run only once a initial sql before all of them (0a) or after all of them (0b). -------------------------------------------------------------------------------- /sql/mig360_3h_goldengate.sql: -------------------------------------------------------------------------------- 1 | /*****************************************************************************************/ 2 | -- 3 | 4 | DEF title = 'Golden Gate Parameters'; 5 | DEF main_table = 'GV$SYSTEM_PARAMETER2'; 6 | BEGIN 7 | :sql_text := q'[ 8 | SELECT /*+ &&top_level_hints. */ 9 | * 10 | FROM gv$system_parameter2 11 | WHERE name like '%goldengate%' 12 | ORDER BY 13 | name, 14 | inst_id, 15 | ordinal 16 | ]'; 17 | END; 18 | / 19 | @@&&9a_pre_one. 20 | 21 | 22 | -- TO add in future release 23 | 24 | --MOS Note:1298562.1: 25 | --Oracle GoldenGate database Complete Database Profile check script for Oracle DB (All Schemas) Classic Extract 26 | 27 | --MOS Note: 1296168.1 28 | --Oracle GoldenGate database Schema Profile check script for Oracle DB 29 | 30 | /*****************************************************************************************/ 31 | 32 | DEF title = 'Golden Gate Process'; 33 | @@&&fc_def_output_file. out_filename 'gg&¤t_time..txt' 34 | 35 | COL cmd_gg NEW_V cmd_gg NOPRI 36 | --select ' echo `ps -ef | /usr/bin/grep "./mgr PARAMFILE" | /usr/bin/grep -v grep`' 37 | select ' if [ `ps -ef | grep "./mgr PARAMFILE" | grep -v grep | wc -l` -ge 1 ]; then echo `ps -ef | grep "./mgr PARAMFILE" | grep -v grep`; fi' 38 | cmd_gg from dual; 39 | COL cmd_gg NEW_V clear 40 | 41 | HOS &&cmd_gg. > &&out_filename. 42 | UNDEF cmd_gg 43 | 44 | COL cmd_gg2 NEW_V cmd_gg2 NOPRI 45 | --select ' 46 | --if [ `ps -ef | /usr/bin/grep "./mgr PARAMFILE" | /usr/bin/grep -v /usr/bin/grep | /usr/bin/wc -l` -ge 1 ]; then echo "Golden Gate Manager is running."; fi' 47 | select ' if [ `ps -ef | grep "./mgr PARAMFILE" | grep -v grep | wc -l` -ge 1 ]; then echo "Golden Gate Manager is running."; fi' 48 | cmd_gg2 from dual; 49 | COL cmd_gg2 NEW_V clear 50 | 51 | HOS &&cmd_gg2. >> &&out_filename. 52 | UNDEF cmd_gg2 53 | 54 | DEF one_spool_text_file = '&&out_filename.' 55 | DEF one_spool_text_file_rename = 'Y' 56 | DEF skip_html = '--'; 57 | DEF skip_text_file = '' 58 | @@&&9a_pre_one. 59 | 60 | 61 | 62 | /*****************************************************************************************/ 63 | 64 | DEF skip_lch = 'Y'; 65 | DEF skip_bch = 'Y'; 66 | DEF skip_pch = 'Y'; 67 | DEF vaxis = ''; 68 | DEF haxis = ''; 69 | DEF skip_all = ''; 70 | DEF title_suffix = ''; 71 | EXEC :sql_text := ''; 72 | 73 | /*****************************************************************************************/ 74 | -------------------------------------------------------------------------------- /moat369/sql/moat369_gc_graphviz_chart.sql: -------------------------------------------------------------------------------- 1 | -- add seq to one_spool_filename 2 | DEF one_spool_filename = '&&spool_filename.' 3 | @@&&fc_seq_output_file. one_spool_filename 4 | @@&&fc_def_output_file. one_spool_fullpath_filename '&&one_spool_filename._graph_chart.html' 5 | 6 | @@moat369_0j_html_topic_intro.sql &&one_spool_filename._graph_chart.html graph 7 | 8 | SPO &&one_spool_fullpath_filename. APP 9 | PRO 10 | PRO 11 | PRO 12 | -- chart header 13 | PRO 58 | 59 | -- footer 60 | PRO
61 | PRONotes:
1) up to &&history_days. days of awr history were considered
2) ASH reports are based on number of samples
62 | PRO
3) &&foot.
63 | PRO 64 | SPO OFF 65 | 66 | @@moat369_0k_html_topic_end.sql &&one_spool_filename._graph_chart.html graph '' &&sql_show. 67 | 68 | @@&&fc_encode_html. &&one_spool_fullpath_filename. 69 | 70 | HOS zip -mj &&moat369_zip_filename. &&one_spool_fullpath_filename. >> &&moat369_log3. 71 | 72 | UNDEF one_spool_fullpath_filename -------------------------------------------------------------------------------- /moat369/js/decode.min.js: -------------------------------------------------------------------------------- 1 | function get_password(){var e=prompt("Please enter password","");if(null!=e&&""!=e)return e}function get_param(e,t){t||(t=location.href),e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var n=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(t);return null==n?null:n[1]}function decompText(t){try{var e=atob(t).split("").map(function(e){return e.charCodeAt(0)}),n=new Uint8Array(e),r=new Zlib.Gunzip(n).decompress();return new TextDecoder("utf-8").decode(r)}catch(e){return t}}function rjorge_decrypt(e,t){e||(e=get_password());var n="";if(null!=e&&""!=e&&(n=CryptoJS.AES.decrypt(enctext,e)),null!=n&&""!=n){try{var r=n.toString(CryptoJS.enc.Utf8)}catch(e){return void(t||alert("Wrong Passphrase"))}if(enctext_comp)var o=decompText(r);else o=r;!t&&isIndexPage()?setParamCurURL("decKey",e):(loadHTML(o),appendPassURL("decKey",e))}}function rjorge_decomp(){loadHTML(decompText(enctext))}function loadHTML(e){document.getElementById("rjorge_block").innerHTML=e,reload_script_section("sqlfor_script"),reload_script_section("sqlhl_script"),loadJS("tablefilter/tablefilter.js",function(){reload_script_section("tablefilter-cfg")}),loadJS("d3.min.js",function(){reload_script_section("d3_script")}),loadJS("http://www.gstatic.com/charts/loader.js",function(){reload_script_section("gchart_script")})}function reload_script_section(name){var reload_script_sec_name=document.getElementById(name);null!=reload_script_sec_name&&""!=reload_script_sec_name&&eval(reload_script_sec_name.text)}function isIndexPage(){return!!window.location.pathname.match(/00001_.*_index.html$/)}function appendPassURL(e,t){for(var n=document.getElementsByTagName("a"),r=0;r 4 | # Last updated on: Dec/2016 by Rodrigo Jorge 5 | # ---------------------------------------------------------------------------- 6 | if [ $# -ne 3 ] 7 | then 8 | echo "Three arguments are needed..." 9 | exit 1 10 | fi 11 | 12 | v_sep="$1" 13 | v_sourcecsv="$2" 14 | v_out_html="$3" 15 | 16 | v_awk_func_dir="./moat369/sh/csv-parser.awk" 17 | 18 | test -f "${v_sourcecsv}" || exit 1 19 | 20 | echo "

" >> "${v_out_html}" 21 | echo '' >> "${v_out_html}" 22 | 23 | v_fcol_tag_o='" 25 | v_acol_tag_o="" 27 | f_line_o="" 28 | f_line_c="" 29 | 30 | AWKCMD_P="-f ${v_awk_func_dir} -v separator=${v_sep} -v enclosure=\"" 31 | 32 | SOTYPE=$(uname -s) 33 | if [ "$SOTYPE" = "SunOS" ] 34 | then 35 | AWKCMD=gawk 36 | AWKCMD_CSV="${AWKCMD} ${AWKCMD_P}" 37 | SEDCMD=/usr/xpg4/bin/sed 38 | # echo -e "xxx" in solaris prints "-e xxx" when using /bin/sh. 39 | ECHO_E="echo" 40 | else 41 | AWKCMD=awk 42 | AWKCMD_CSV="${AWKCMD} ${AWKCMD_P}" 43 | SEDCMD=sed 44 | ECHO_E="echo -e" 45 | fi 46 | 47 | v_firstline=true 48 | 49 | v_head_ncols=$(head -n 1 "${v_sourcecsv}" | ${AWKCMD_CSV} --source '{a=csv_parse_record($0, separator, enclosure, csv); print a}') 50 | 51 | v_count=0 52 | 53 | remove_html_tags() 54 | { 55 | echo "$1" | $SEDCMD 's|&|&|g' | $SEDCMD 's|>|\>|g' | $SEDCMD 's|<|\<|g' 56 | } 57 | 58 | while read -r line || [ -n "$line" ] 59 | do 60 | v_ncols=$(${AWKCMD_CSV} --source '{a=csv_parse_record($0, separator, enclosure, csv); print a}' <<< "$line") 61 | if [ $v_head_ncols -ne $v_ncols ] 62 | then 63 | echo ERROR >> "${v_out_html}" 64 | break 65 | fi 66 | $ECHO_E "$f_line_o\\c" >> "${v_out_html}" 67 | if $v_firstline 68 | then 69 | v_linerep=$(remove_html_tags "$line" | ${AWKCMD_CSV} -v outsep="${v_fcol_tag_c}${v_fcol_tag_o}" --source '{csv_parse_and_display($0, separator, enclosure, outsep)}') 70 | $ECHO_E "${v_fcol_tag_o}#${v_fcol_tag_c}${v_fcol_tag_o}${v_linerep}${v_fcol_tag_c}\\c" >> "${v_out_html}" 71 | v_firstline=false 72 | else 73 | v_linerep=$(remove_html_tags "$line" | ${AWKCMD_CSV} -v outsep="${v_acol_tag_c}${v_acol_tag_o}" --source '{csv_parse_and_display($0, separator, enclosure, outsep)}') 74 | $ECHO_E "${v_acol_tag_o}${v_count}${v_acol_tag_c}${v_acol_tag_o}${v_linerep}${v_acol_tag_c}\\c" >> "${v_out_html}" 75 | fi 76 | echo "$f_line_c" >> "${v_out_html}" 77 | v_count=$((v_count+1)) 78 | done < "${v_sourcecsv}" 79 | 80 | echo "
' 24 | v_fcol_tag_c="" 26 | v_acol_tag_c="
" >> "${v_out_html}" 81 | echo "

" >> "${v_out_html}" 82 | 83 | exit 0 84 | #### -------------------------------------------------------------------------------- /moat369/sh/run_all_sids.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # moat369 collector 3 | 4 | if [ $# -eq 0 ] 5 | then 6 | TOOLFDR="--" 7 | elif [ $# -eq 1 ] 8 | then 9 | TOOLFDR="$1" 10 | elif [ $# -ge 2 ] 11 | then 12 | echo "Wrong Call." 13 | exit 1 14 | fi 15 | 16 | SOTYPE=$(uname -s) 17 | if [ "$SOTYPE" = "SunOS" ] 18 | then 19 | AWKCMD=/usr/xpg4/bin/awk 20 | SEDCMD=/usr/xpg4/bin/sed 21 | GRPCMD=/usr/xpg4/bin/grep 22 | PRCCMD="ps -ef -o comm" 23 | ORATAB=/var/opt/oracle/oratab 24 | else 25 | AWKCMD=awk 26 | SEDCMD=sed 27 | GRPCMD=grep 28 | PRCCMD="ps axo cmd" 29 | ORATAB=/etc/oratab 30 | fi 31 | 32 | 33 | ORIG_PATH=$PATH 34 | ORIG_ORACLE_SID=$ORACLE_SID 35 | ORIG_ORAENV_ASK=$ORAENV_ASK 36 | which oraenv >/dev/null || export PATH=$PATH:/usr/local/bin 37 | 38 | for INST in $($PRCCMD | $GRPCMD ora_pmo[n] | $SEDCMD 's/^ora_pmon_//' | $GRPCMD -v "$SEDCMD "); do 39 | if [ $INST = "$( cat $ORATAB | $GRPCMD -v ^# | $GRPCMD -v ^$ | $AWKCMD -F: '{ print $1 }' | $GRPCMD $INST | head -1)" ]; then 40 | echo "$INST: instance name = db_unique_name (single instance database)" 41 | export ORACLE_SID=$INST; export ORAENV_ASK=NO; . oraenv 42 | else 43 | # remove last char (instance nr) and look for name again 44 | LAST_REMOVED=$(echo "${INST:0:$(echo ${#INST}-1 | bc)}") 45 | if [ $LAST_REMOVED = "$( cat $ORATAB | $GRPCMD -v ^# | $GRPCMD -v ^$ | $AWKCMD -F: '{ print $1 }' | $GRPCMD $LAST_REMOVED )" ]; then 46 | echo "$INST: instance name with last char removed = db_unique_name (RAC: instance number added)" 47 | export ORACLE_SID=$LAST_REMOVED; export ORAENV_ASK=NO; . oraenv; export ORACLE_SID=$INST 48 | elif [[ "$(echo $INST | $SEDCMD 's/.*\(_[12]\)/\1/')" =~ "_[12]" ]]; then 49 | # remove last two chars (rac one node addition) and look for name again 50 | LAST_TWO_REMOVED=$(echo "${INST:0:$(echo ${#INST}-2 | bc)}") 51 | if [ $LAST_TWO_REMOVED = "$( cat $ORATAB | $GRPCMD -v ^# | $GRPCMD -v ^$ | $AWKCMD -F: '{ print $1 }' | $GRPCMD $LAST_TWO_REMOVED )" ]; then 52 | echo "$INST: instance name with either _1 or _2 removed = db_unique_name (RAC one node)" 53 | export ORACLE_SID=$LAST_TWO_REMOVED; export ORAENV_ASK=NO; . oraenv; export ORACLE_SID=$INST 54 | fi 55 | else 56 | echo "Couldn't find instance $INST in $ORATAB" 57 | continue 58 | fi 59 | fi 60 | sqlplus -s /nolog < &&out_filename.; fi 11 | 12 | DEF one_spool_text_file = '&&out_filename.' 13 | DEF one_spool_text_file_rename = 'Y' 14 | DEF skip_html = '--'; 15 | DEF skip_text_file = '' 16 | EXEC :sql_text := '$ cat /etc/passwd'; 17 | @@&&9a_pre_one. 18 | 19 | ----------------------------------------- 20 | 21 | DEF title = 'OS Groups'; 22 | DEF in_filename = '/etc/group' 23 | @@&&fc_def_output_file. out_filename 'osgroup_&¤t_time..txt' 24 | 25 | HOS if [ -f &&in_filename. ]; then cat &&in_filename. > &&out_filename.; fi 26 | 27 | DEF one_spool_text_file = '&&out_filename.' 28 | DEF one_spool_text_file_rename = 'Y' 29 | DEF skip_html = '--'; 30 | DEF skip_text_file = '' 31 | EXEC :sql_text := '$ cat /etc/group'; 32 | @@&&9a_pre_one. 33 | 34 | ----------------------------------------- 35 | 36 | DEF title = 'Crontab'; 37 | @@&&fc_def_output_file. out_filename 'crontab_&¤t_time..txt' 38 | 39 | HOS crontab -l > &&out_filename. 40 | 41 | DEF one_spool_text_file = '&&out_filename.' 42 | DEF one_spool_text_file_rename = 'Y' 43 | DEF skip_html = '--'; 44 | DEF skip_text_file = '' 45 | EXEC :sql_text := '$ crontab -l'; 46 | @@&&9a_pre_one. 47 | 48 | ----------------------------------------- 49 | 50 | DEF title = 'Network Stats'; 51 | @@&&fc_def_output_file. out_filename 'netstat_&¤t_time..txt' 52 | 53 | COL cmd_netstat NEW_V cmd_netstat NOPRI 54 | select decode(platform_id, 55 | 1,'netstat -unv -P tcp', -- Solaris[tm] OE (32-bit) 56 | 2,'netstat -unv -P tcp', -- Solaris[tm] OE (64-bit) 57 | 'netstat -punta') cmd_netstat from v$database; 58 | COL cmd_netstat NEW_V clear 59 | 60 | HOS &&cmd_netstat. > &&out_filename. 61 | UNDEF cmd_netstat 62 | 63 | DEF one_spool_text_file = '&&out_filename.' 64 | DEF one_spool_text_file_rename = 'Y' 65 | DEF skip_html = '--'; 66 | DEF skip_text_file = '' 67 | EXEC :sql_text := '$ netstat -punta'; 68 | @@&&9a_pre_one. 69 | 70 | ----------------------------------------- 71 | 72 | DEF title = 'Environment variables'; 73 | @@&&fc_def_output_file. out_filename 'env_vars_&¤t_time..txt' 74 | 75 | HOS env | &&cmd_grep. ORA > &&out_filename 76 | 77 | DEF one_spool_text_file = '&&out_filename.' 78 | DEF one_spool_text_file_rename = 'Y' 79 | DEF skip_html = '--'; 80 | DEF skip_text_file = '' 81 | @@&&9a_pre_one. 82 | 83 | ----------------------------------------- 84 | 85 | UNDEF skip_if_linux skip_if_sunos 86 | UNDEF current_time out_filename in_filename 87 | -------------------------------------------------------------------------------- /moat369/sql/moat369_0k_html_topic_end.sql: -------------------------------------------------------------------------------- 1 | -- Param1: file_name 2 | -- Param2: Type 3 | -- Param3: Print Table (Default Y) 4 | -- Param4: Print SQL (Default Y) 5 | 6 | def 0k_param1 = '&&1.' 7 | def 0k_param2 = '&&2.' 8 | undef 1 2 9 | @@&&fc_def_empty_var. 3 10 | @@&&fc_def_empty_var. 4 11 | def 0k_param3 = '&&3.' 12 | def 0k_param4 = '&&4.' 13 | undef 3 4 14 | @@&&fc_set_value_var_nvl. '0k_param3' '&&0k_param3.' 'Y' 15 | @@&&fc_set_value_var_nvl. '0k_param4' '&&0k_param4.' 'Y' 16 | 17 | -- DOES NOT WORK setting one_spool_fullpath_filename as 1st parameter. Why? IDK.. 18 | def 0k_var1 = '&&moat369_sw_output_fdr./&&0k_param1.' 19 | 20 | @@&&fc_spool_start. 21 | SPO &&0k_var1. APP 22 | PRO

23 | SPO &&0k_var1..tmp
24 | SET LIN &&moat369_sw_desc_linesize.
25 | DESC &&main_table.
26 | SET HEA OFF LIN 32767
27 | SPO OFF
28 | HOS if [ '&&0k_param3.' == 'Y' -a -n '&&main_table.' ]; then cat &&0k_var1..tmp >> &&0k_var1.; fi
29 | SPO &&0k_var1. APP
30 | PRO 
31 | SPO &&0k_var1..tmp
32 | PRINT sql_text_display
33 | SPO OFF
34 | HOS if [ '&&sql_format.' == 'N' -a '&&0k_param4.' == 'Y' ]; then cat &&0k_var1..tmp >> &&0k_var1.; fi
35 | SPO &&0k_var1. APP
36 | PRO 
37 | SPO &&0k_var1..tmp
38 | PRO &&row_num. rows selected.
39 | SPO OFF
40 | HOS if [ '&&0k_param4.' == 'Y' ]; then cat &&0k_var1..tmp >> &&0k_var1.; fi
41 | SPO &&0k_var1. APP
42 | PRO 
43 | SPO &&0k_var1..tmp 44 | PRO 52 | SPO OFF 53 | HOS if [ '&&sql_format.' == 'Y' -a '&&0k_param4.' == 'Y' ]; then cat &&0k_var1..tmp >> &&0k_var1.; fi 54 | SPO &&0k_var1..tmp 55 | PRO 56 | SPO OFF 57 | HOS if [ '&&sql_hl.' == 'Y' -a '&&0k_param4.' == 'Y' ]; then cat &&0k_var1..tmp >> &&0k_var1.; fi 58 | HOS rm -f &&0k_var1..tmp 59 | SPO &&0k_var1. APP 60 | PRO 61 | @@moat369_0e_html_footer.sql 62 | SPO OFF 63 | @@&&fc_spool_end. 64 | 65 | -- get time t1 66 | EXEC :get_time_t1 := DBMS_UTILITY.get_time; 67 | 68 | -- update log2 69 | SET HEA OFF 70 | SPO &&moat369_log2. APP 71 | SELECT TO_CHAR(SYSDATE, '&&moat369_date_format.')||' , '|| 72 | TO_CHAR((:get_time_t1 - :get_time_t0)/100, '999,999,990.00')||'s , rows:'|| 73 | '&&row_num., &§ion_id., &&main_table., &&moat369_prev_sql_id., &&moat369_prev_child_number., &&title_no_spaces., &&0k_param2. , &&0k_param1.' 74 | FROM DUAL 75 | / 76 | SPO OFF 77 | SET HEA ON 78 | 79 | undef 0k_param1 0k_param2 0k_param3 0k_param4 0k_var1 -------------------------------------------------------------------------------- /sql/mig360_get_users_cdb.sql: -------------------------------------------------------------------------------- 1 | -- 2 | SET TERM ON; 3 | SET HEA ON; 4 | SET LIN 32767; 5 | SET NEWP NONE; 6 | SET PAGES 1000; 7 | SET LONG 32000; 8 | SET LONGC 2000; 9 | SET WRA ON; 10 | SET TRIMS ON; 11 | SET TRIM ON; 12 | SET TI OFF; 13 | SET TIMI OFF; 14 | SET NUM 20; 15 | SET SQLBL ON; 16 | SET BLO .; 17 | SET RECSEP OFF; 18 | SET ECHO OFF; 19 | SET VER OFF; 20 | SET FEED OFF; 21 | 22 | SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON 23 | 24 | BEGIN 25 | DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); 26 | DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); 27 | END; 28 | / 29 | 30 | COL my_spool_filename NEW_V my_spool_filename NOPRI; 31 | 32 | -- get sool filename and dbid 33 | SELECT 'ddl_users.txt' my_spool_filename FROM dual 34 | / 35 | 36 | 37 | SPO &&my_spool_filename. 38 | 39 | PRO 40 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 41 | PRO TABLESPACES 42 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 43 | PRO 44 | PRO 45 | 46 | VAR v_cursor CLOB; 47 | BEGIN 48 | :v_cursor := q'[ 49 | SELECT DBMS_METADATA.get_ddl ('USER', username) result_ddl 50 | FROM DBA_USERS s 51 | WHERE oracle_maintained='N' 52 | ORDER BY username 53 | ]'; 54 | END; 55 | / 56 | 57 | 58 | SET SERVEROUTPUT ON 59 | DECLARE 60 | l_cursor_id INTEGER; 61 | l_rows_processed INTEGER; 62 | v_ret clob; 63 | v_ret2 number; 64 | BEGIN 65 | l_cursor_id := DBMS_SQL.OPEN_CURSOR; 66 | FOR i IN (SELECT name 67 | FROM v$containers 68 | WHERE con_id > 2 69 | AND open_mode = 'READ WRITE' 70 | ORDER BY con_id) 71 | LOOP 72 | DBMS_OUTPUT.PUT_LINE('--'||i.name); 73 | DBMS_SQL.PARSE 74 | ( c => l_cursor_id 75 | , statement => :v_cursor 76 | , language_flag => DBMS_SQL.NATIVE 77 | , container => i.name 78 | ); 79 | dbms_sql.define_column(l_cursor_id, 1, v_ret); 80 | l_rows_processed := DBMS_SQL.EXECUTE(c => l_cursor_id); 81 | LOOP 82 | IF DBMS_SQL.FETCH_ROWS(l_cursor_id) = 0 THEN 83 | EXIT; 84 | END IF; 85 | 86 | dbms_sql.column_value(l_cursor_id, 1, v_ret); 87 | dbms_output.put_line(v_ret); 88 | dbms_output.put_line(' '); 89 | END LOOP; 90 | END LOOP; 91 | DBMS_SQL.CLOSE_CURSOR(c => l_cursor_id); 92 | EXCEPTION WHEN OTHERS THEN 93 | IF DBMS_SQL.IS_OPEN(l_cursor_id) THEN 94 | DBMS_SQL.CLOSE_CURSOR(l_cursor_id); 95 | END IF; 96 | END; 97 | / 98 | 99 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 100 | PRO 101 | 102 | SPO OFF; 103 | 104 | COL my_spool_filename CLE; 105 | 106 | -------------------------------------------------------------------------------- /sql/mig360_8_01_data_pump_template_noncdb_to_cdb.sql: -------------------------------------------------------------------------------- 1 | 2 | PRO URL: https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/mig-data-pump-conventional.htm 3 | PRO NON-CDB to CDB 4 | PRO TO-DO: 1-Tablespaces - DDL *** 5 | PRO 6 | PRO On Premises: 7 | PRO 8 | PRO 9 | PRO mkdir &&dpdump_for_cloud. -p 10 | PRO 11 | PRO 12 | PRO sqlplus / as sysdba 13 | PRO 14 | PRO CREATE OR REPLACE DIRECTORY dp_for_cloud AS '&&dpdump_for_cloud.';; 15 | PRO 16 | PRO 17 | PRO ****You can use PARALLEL parameter with expdp to speed up the process. Remember to add %U to dumpfile parameter**** 18 | PRO ****You can also set FILESIZE parameter. For example filesize=2g**** 19 | PRO 20 | PRO 21 | select 'expdp \''/ as sysdba\'' SCHEMAS='||username||' DIRECTORY=dp_for_cloud DUMPFILE='||username||'.dmp'||' LOGFILE='||username||'_exp.log flashback_time=systimestamp' from dba_users where 1=1 22 | &&skip_10g_column.&&skip_11g_column.AND oracle_maintained = 'N' 23 | &&skip_12c_column.&&skip_18c_column.AND (username not in &&default_user_list_1. and username not in &&default_user_list_2.) 24 | order by username 25 | ; 26 | PRO 27 | PRO 28 | PRO Cloud: 29 | PRO 30 | PRO mkdir &&dpdump_for_onprem. -p 31 | PRO 32 | PRO 33 | PRO On Premises: 34 | PRO 35 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 36 | '&&dpdump_for_cloud./*.dmp \'||chr(10)|| 37 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&dpdump_for_onprem./' 38 | from dual 39 | ; 40 | PRO 41 | PRO 42 | PRO Cloud: 43 | PRO 44 | PRO 45 | PRO Adjust file permission on &&dpdump_for_onprem./ 46 | PRO 47 | PRO 48 | PRO Add to tnsnames.ora 49 | PRO 50 | PRO pdbXX=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=my_cloud_server_name)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=pdbXX))) 51 | PRO 52 | PRO 53 | PRO sqlplus / as sysdba 54 | PRO 55 | PRO alter session set container=pdbXX;; 56 | PRO 57 | PRO 58 | PRO CREATE OR REPLACE DIRECTORY dp_from_onprem AS '&&dpdump_for_onprem.';; 59 | PRO 60 | PRO grant read,write on directory dp_from_onprem to system;; 61 | PRO 62 | PRO 63 | PRO Adjust and create the tablespaces 64 | PRO 65 | PRO 66 | select 'CREATE BIGFILE TABLESPACE '||tablespace_name||' DATAFILE '||'''+DATA'''||' SIZE 10M AUTOEXTEND ON NEXT 10M;' 67 | from DBA_TABLESPACES s 68 | where 1=1 69 | AND s.contents NOT IN ('UNDO','TEMPORARY') 70 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') 71 | order by tablespace_name 72 | ; 73 | PRO 74 | PRO 75 | PRO ****You can use PARALLEL parameter with impdp to speed up the process. Remember to add %U to dumpfile parameter**** 76 | PRO 77 | PRO 78 | select 'impdp system@pdbXX SCHEMAS='||username||' DIRECTORY=dp_from_onprem DUMPFILE='||username||'.dmp'||' LOGFILE='||username||'_imp.log' from dba_users where 1=1 79 | &&skip_10g_column.&&skip_11g_column.AND oracle_maintained = 'N' 80 | &&skip_12c_column.&&skip_18c_column.AND (username not in &&default_user_list_1. and username not in &&default_user_list_2.) 81 | order by username 82 | ; 83 | PRO 84 | PRO 85 | -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_gen_object_ddl.sql: -------------------------------------------------------------------------------- 1 | -- Receive 4 parameters: Obj Type, Obj Name and Obj Owner and return in 4th parameter (that must be a variable) the generate .sql file 2 | COL c_gen_object_ddl_1 NEW_V 1 NOPRI 3 | COL c_gen_object_ddl_2 NEW_V 2 NOPRI 4 | COL c_gen_object_ddl_3 NEW_V 3 NOPRI 5 | COL c_gen_object_ddl_4 NEW_V 4 NOPRI 6 | 7 | -- To ignore empty parameters 8 | SELECT '' c_gen_object_ddl_1, '' c_gen_object_ddl_2, '' c_gen_object_ddl_3, '' c_gen_object_ddl_4 FROM dual WHERE ROWNUM = 0; 9 | 10 | COL c_gen_object_ddl_1 CLEAR 11 | COL c_gen_object_ddl_2 CLEAR 12 | COL c_gen_object_ddl_3 CLEAR 13 | COL c_gen_object_ddl_4 CLEAR 14 | 15 | DEF in_obj_type = '&1.' 16 | DEF in_obj_name = '&2.' 17 | DEF in_obj_owner = '&3.' 18 | DEF in_obj_var = '&4.' 19 | 20 | UNDEF 1 2 3 4 21 | 22 | @@&&fc_def_output_file. step_file_meta 'step_file_meta.sql' 23 | DEF exec_file_meta = '&&step_file_meta.' 24 | @@&&fc_def_output_file. meta_pre_settings 'moat369_pre_meta_settings' 25 | 26 | COL exec_file_meta NEW_V exec_file_meta 27 | SELECT '&&fc_skip_script.' exec_file_meta from dual where '&&in_obj_type.' IS NULL OR '&&in_obj_name.' IS NULL OR '&&in_obj_owner.' IS NULL OR '&&in_obj_var.' IS NULL; 28 | COL exec_file_meta clear 29 | 30 | -- DEF in_obj_fname_type = '&&in_obj_type.' 31 | -- DEF in_obj_fname_name = '&&in_obj_name.' 32 | -- DEF in_obj_fname_owner = '&&in_obj_owner.' 33 | 34 | DEF sqlout_file_meta = '&&in_obj_owner. &&in_obj_name. &&in_obj_type.' 35 | @@&&fc_clean_file_name. "sqlout_file_meta" "sqlout_file_meta" 36 | @@&&fc_def_output_file. sqlout_file_meta '&&sqlout_file_meta..sql' 37 | 38 | -- @@&&fc_clean_file_name. "in_obj_fname_type" "in_obj_fname_type" 39 | -- @@&&fc_clean_file_name. "in_obj_fname_name" "in_obj_fname_name" 40 | -- @@&&fc_clean_file_name. "in_obj_fname_owner" "in_obj_fname_owner" 41 | -- DEF sqlout_file_meta = '&&in_obj_fname_owner..&&in_obj_fname_name..&&in_obj_fname_type..sql' 42 | -- 43 | -- UNDEF in_obj_fname_type in_obj_fname_name in_obj_fname_owner 44 | 45 | 46 | EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT',true); 47 | EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true); 48 | EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',true); 49 | 50 | STORE SET &&meta_pre_settings. REPLACE 51 | SET ECHO OFF 52 | SET PAGES 0 53 | SET LONG 2000000000 54 | SET LINES 32767 55 | SET TRIM ON 56 | SET TRIMSPOOL ON 57 | SET FEEDBACK OFF 58 | SET VERIFY OFF 59 | SET TIMING OFF 60 | SET HEAD OFF 61 | 62 | SPOOL &&step_file_meta. 63 | PRO SPO &&sqlout_file_meta. 64 | PRO SELECT DBMS_METADATA.GET_DDL('&&in_obj_type.','&&in_obj_name.','&&in_obj_owner.') FROM DUAL;; 65 | PRO SPO OFF 66 | PRO DEF &&in_obj_var. = '&&sqlout_file_meta.' 67 | SPO OFF 68 | 69 | @&&exec_file_meta. 70 | HOS rm -f &&step_file_meta. 71 | @&&meta_pre_settings. 72 | HOS rm -f &&meta_pre_settings..sql 73 | 74 | UNDEF in_obj_type in_obj_name in_obj_owner in_obj_var 75 | UNDEF sqlout_file_meta step_file_meta exec_file_meta meta_pre_settings -------------------------------------------------------------------------------- /sql/mig360_get_tablespaces_cdb.sql: -------------------------------------------------------------------------------- 1 | -- 2 | SET TERM ON; 3 | SET HEA ON; 4 | SET LIN 32767; 5 | SET NEWP NONE; 6 | SET PAGES 1000; 7 | SET LONG 32000; 8 | SET LONGC 2000; 9 | SET WRA ON; 10 | SET TRIMS ON; 11 | SET TRIM ON; 12 | SET TI OFF; 13 | SET TIMI OFF; 14 | SET NUM 20; 15 | SET SQLBL ON; 16 | SET BLO .; 17 | SET RECSEP OFF; 18 | SET ECHO OFF; 19 | SET VER OFF; 20 | SET FEED OFF; 21 | 22 | SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON 23 | 24 | BEGIN 25 | DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); 26 | DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); 27 | END; 28 | / 29 | 30 | COL my_spool_filename NEW_V my_spool_filename NOPRI; 31 | 32 | -- get sool filename and dbid 33 | SELECT 'ddl_tablespaces.txt' my_spool_filename FROM dual 34 | / 35 | 36 | 37 | SPO &&my_spool_filename. 38 | 39 | PRO 40 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 41 | PRO TABLESPACES 42 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 43 | PRO 44 | PRO 45 | 46 | VAR v_cursor CLOB; 47 | BEGIN 48 | :v_cursor := q'[ 49 | SELECT DBMS_METADATA.get_ddl ('TABLESPACE', tablespace_name) result_ddl 50 | FROM DBA_TABLESPACES s 51 | WHERE s.contents NOT IN ('UNDO','TEMPORARY') 52 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS') 53 | ORDER BY tablespace_name 54 | ]'; 55 | END; 56 | / 57 | 58 | 59 | SET SERVEROUTPUT ON 60 | DECLARE 61 | l_cursor_id INTEGER; 62 | l_rows_processed INTEGER; 63 | v_ret clob; 64 | v_ret2 number; 65 | BEGIN 66 | l_cursor_id := DBMS_SQL.OPEN_CURSOR; 67 | FOR i IN (SELECT name 68 | FROM v$containers 69 | WHERE con_id > 2 70 | AND open_mode = 'READ WRITE' 71 | ORDER BY con_id) 72 | LOOP 73 | DBMS_OUTPUT.PUT_LINE('--'||i.name); 74 | DBMS_SQL.PARSE 75 | ( c => l_cursor_id 76 | , statement => :v_cursor 77 | , language_flag => DBMS_SQL.NATIVE 78 | , container => i.name 79 | ); 80 | dbms_sql.define_column(l_cursor_id, 1, v_ret); 81 | l_rows_processed := DBMS_SQL.EXECUTE(c => l_cursor_id); 82 | LOOP 83 | IF DBMS_SQL.FETCH_ROWS(l_cursor_id) = 0 THEN 84 | EXIT; 85 | END IF; 86 | 87 | dbms_sql.column_value(l_cursor_id, 1, v_ret); 88 | dbms_output.put_line(v_ret); 89 | dbms_output.put_line(' '); 90 | END LOOP; 91 | END LOOP; 92 | DBMS_SQL.CLOSE_CURSOR(c => l_cursor_id); 93 | EXCEPTION WHEN OTHERS THEN 94 | IF DBMS_SQL.IS_OPEN(l_cursor_id) THEN 95 | DBMS_SQL.CLOSE_CURSOR(l_cursor_id); 96 | END IF; 97 | END; 98 | / 99 | 100 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 101 | PRO 102 | 103 | SPO OFF; 104 | 105 | COL my_spool_filename CLE; 106 | 107 | -------------------------------------------------------------------------------- /sql/00_config.sql: -------------------------------------------------------------------------------- 1 | -- moat369 configuration file. for those cases where you must change moat369 functionality 2 | 3 | /*********************** software configuration (do not remove ) ************************/ 4 | @@00_software 5 | 6 | /*************************** ok to modify (if really needed) ****************************/ 7 | 8 | -- report column, or section, or range of columns or range of sections i.e. 3, 3-4, 3a, 3a-4c, 3-4c, 3c-4 / null means all (default) 9 | DEF moat369_sections = ''; 10 | 11 | -- history days (default 31) 12 | DEF moat369_conf_days = '31'; 13 | 14 | -- range of dates below superceed history days when values are other than YYYY-MM-DD 15 | DEF moat369_conf_date_from = 'YYYY-MM-DD'; 16 | DEF moat369_conf_date_to = 'YYYY-MM-DD'; 17 | 18 | -- working hours are defined between these two HH24MM values (i.e. 7:30AM and 7:30PM) 19 | DEF moat369_conf_work_time_from = '0730'; 20 | DEF moat369_conf_work_time_to = '1930'; 21 | 22 | -- working days are defined between 1 (Sunday) and 7 (Saturday) 23 | DEF moat369_conf_work_day_from = '2'; 24 | DEF moat369_conf_work_day_to = '6'; 25 | 26 | -- defines if the output will be encrypted using provided AEG certificate 27 | DEF moat369_conf_encrypt_output = 'OFF'; 28 | DEF moat369_conf_encrypt_html = 'OFF'; 29 | 30 | DEF tool_repo_user = ''; 31 | 32 | DEF mig360_conf_incl_segments = 'Y'; 33 | 34 | /**************************** not recommended to modify *********************************/ 35 | 36 | -- excluding report types reduce usability while providing marginal performance gain 37 | DEF moat369_conf_incl_html = 'Y'; 38 | DEF moat369_conf_incl_text = 'Y'; 39 | DEF moat369_conf_incl_csv = 'Y'; 40 | DEF moat369_conf_incl_line = 'Y'; 41 | DEF moat369_conf_incl_pie = 'Y'; 42 | DEF moat369_conf_incl_bar = 'Y'; 43 | DEF moat369_conf_incl_graph = 'Y'; 44 | DEF moat369_conf_incl_file = 'Y'; 45 | 46 | -- Default values skip_xxx for each type. Usually you enable HTML and control the others inside sections with "skip_" variables. 47 | DEF moat369_conf_def_html = 'Y'; 48 | DEF moat369_conf_def_text = 'N'; 49 | DEF moat369_conf_def_csv = 'N'; 50 | DEF moat369_conf_def_line = 'N'; 51 | DEF moat369_conf_def_pie = 'N'; 52 | DEF moat369_conf_def_bar = 'N'; 53 | DEF moat369_conf_def_graph = 'N'; 54 | DEF moat369_conf_def_file = 'N'; 55 | 56 | -- excluding some features from the reports substantially reduces usability with minimal performance gain 57 | DEF moat369_conf_incl_tkprof = 'N'; 58 | DEF moat369_conf_incl_wr_data = 'N'; 59 | DEF moat369_conf_incl_res = 'N'; 60 | DEF moat369_conf_incl_esp = 'N'; 61 | DEF moat369_conf_incl_opatch = 'N'; 62 | DEF moat369_conf_incl_driver = 'Y'; 63 | DEF moat369_conf_ask_license = 'Y'; 64 | DEF moat369_conf_sql_format = 'Y'; 65 | DEF moat369_conf_sql_highlight = 'Y'; 66 | 67 | DEF moat369_def_sql_format = 'N'; 68 | DEF moat369_def_sql_highlight = 'Y'; 69 | 70 | /**************************** enter your modifications here *****************************/ 71 | 72 | -- if you are planning to skip part 8 and/or 9, set '--' 73 | DEF skip_run_8 = '' 74 | DEF skip_run_9 = '' -------------------------------------------------------------------------------- /sql/mig360_get_dbconf_cdb.sql: -------------------------------------------------------------------------------- 1 | -- 2 | SET TERM ON; 3 | SET HEA ON; 4 | SET LIN 32767; 5 | SET NEWP NONE; 6 | SET PAGES 1000; 7 | SET LONG 32000; 8 | SET LONGC 2000; 9 | SET WRA ON; 10 | SET TRIMS ON; 11 | SET TRIM ON; 12 | SET TI OFF; 13 | SET TIMI OFF; 14 | SET NUM 20; 15 | SET SQLBL ON; 16 | SET BLO .; 17 | SET RECSEP OFF; 18 | SET ECHO OFF; 19 | SET VER OFF; 20 | SET FEED OFF; 21 | 22 | SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON 23 | 24 | 25 | COL my_spool_filename NEW_V my_spool_filename NOPRI; 26 | 27 | -- get sool filename and dbid 28 | SELECT 'ddl_dbconf.txt' my_spool_filename FROM dual 29 | / 30 | 31 | 32 | SPO &&my_spool_filename. 33 | 34 | PRO 35 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36 | PRO Data to import and generate migration scripts 37 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 38 | PRO 39 | PRO 40 | 41 | PRO ***cdb_tablespaces*** 42 | SELECT 43 | tablespace_name|| ',' || 44 | status|| ',' || 45 | contents|| ',' || 46 | con_id "cdb_tablespaces" 47 | FROM 48 | cdb_tablespaces; 49 | 50 | PRO 51 | PRO ***cdb_data_files*** 52 | SELECT 53 | file_name|| ',' || 54 | file_id|| ',' || 55 | tablespace_name|| ',' || 56 | con_id "cdb_data_files" 57 | FROM 58 | cdb_data_files; 59 | 60 | PRO 61 | PRO ***cdb_users*** 62 | SELECT 63 | username|| ',' || 64 | user_id|| ',' || 65 | account_status|| ',' || 66 | oracle_maintained|| ',' || 67 | con_id "cdb_users" 68 | FROM 69 | cdb_users; 70 | 71 | PRO 72 | PRO ***cdb_role_privs*** 73 | SELECT 74 | grantee|| ',' || 75 | granted_role|| ',' || 76 | con_id "cdb_role_privs" 77 | FROM 78 | cdb_role_privs 79 | WHERE granted_role='PDB_DBA' 80 | and grantee<>'SYS'; 81 | 82 | PRO 83 | PRO ***v$pdbs*** 84 | SELECT 85 | con_id|| ',' || 86 | dbid|| ',' || 87 | con_uid|| ',' || 88 | guid|| ',' || 89 | name|| ',' || 90 | open_mode "v$pdbs" 91 | FROM 92 | v$pdbs; 93 | 94 | PRO 95 | PRO ***v$parameter*** 96 | SELECT 97 | name|| ',' || 98 | value "v$parameter" 99 | FROM 100 | v$parameter 101 | WHERE 102 | name IN( 103 | 'db_recovery_file_dest', 104 | 'audit_file_dest' 105 | ); 106 | 107 | PRO 108 | PRO ***v$database*** 109 | SELECT 110 | dbid|| ',' || 111 | name|| ',' || 112 | log_mode|| ',' || 113 | force_logging|| ',' || 114 | open_mode|| ',' || 115 | platform_name|| ',' || 116 | cdb "v$database" 117 | FROM 118 | v$database; 119 | 120 | PRO 121 | PRO ***v$log*** 122 | SELECT 123 | group#|| ',' || 124 | thread#|| ',' || 125 | sequence#|| ',' || 126 | bytes|| ',' || 127 | status "v$log" 128 | FROM 129 | v$log; 130 | 131 | PRO 132 | PRO ***v$logfile*** 133 | SELECT 134 | group#|| ',' || 135 | member "v$logfile" 136 | FROM 137 | v$logfile; 138 | PRO 139 | 140 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 141 | PRO 142 | 143 | SPO OFF; 144 | 145 | COL my_spool_filename CLE; 146 | 147 | -------------------------------------------------------------------------------- /sql/mig360_3d_performance.sql: -------------------------------------------------------------------------------- 1 | /*****************************************************************************************/ 2 | -- 3 | 4 | DEF title = 'Result Cache related parameters'; 5 | DEF main_table = '&&gv_view_prefix.SYSTEM_PARAMETER2'; 6 | BEGIN 7 | :sql_text := q'[ 8 | SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */ 9 | inst_id, name "PARAMETER", value, isdefault, ismodified 10 | FROM &&gv_object_prefix.system_parameter2 11 | WHERE name IN ('result_cache_mode','result_cache_max_size','result_cache_max_result') 12 | ORDER BY 2,1,3 13 | ]'; 14 | :sql_text_cdb := q'[ 15 | SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */ 16 | con_id, inst_id, name "PARAMETER", value, isdefault, ismodified 17 | FROM &&gv_object_prefix.system_parameter2 18 | WHERE name IN ('result_cache_mode','result_cache_max_size','result_cache_max_result') 19 | ORDER BY 1,3,2,4 20 | ]'; 21 | END; 22 | / 23 | @@&&9a_pre_one. 24 | 25 | 26 | /*****************************************************************************************/ 27 | -- 28 | 29 | DEF title = 'Result Cache status'; 30 | DEF main_table = 'DBMS_RESULT_CACHE'; 31 | BEGIN 32 | :sql_text := q'[ 33 | SELECT dbms_result_cache.status FROM dual 34 | ]'; 35 | END; 36 | / 37 | @@&&skip_ver_le_10.&&skip_ver_le_11_1.&&9a_pre_one. 38 | 39 | 40 | /*****************************************************************************************/ 41 | -- 42 | 43 | DEF title = 'Result Cache memory'; 44 | DEF main_table = '&&gv_view_prefix.RESULT_CACHE_MEMORY'; 45 | BEGIN 46 | :sql_text := q'[ 47 | SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */ 48 | inst_id, free, count(*) 49 | FROM &&gv_object_prefix.result_cache_memory 50 | GROUP BY inst_id, free 51 | ]'; 52 | :sql_text_cdb := q'[ 53 | SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */ 54 | con_id, inst_id, free, count(*) 55 | FROM &&gv_object_prefix.result_cache_memory 56 | GROUP BY con_id, inst_id, free 57 | order by 1, 2, 4 desc 58 | ]'; 59 | END; 60 | / 61 | @@&&skip_ver_le_10.&&skip_ver_le_11_1.&&9a_pre_one. 62 | 63 | 64 | /*****************************************************************************************/ 65 | -- 66 | 67 | DEF title = 'Result Cache statistics'; 68 | DEF main_table = '&&gv_view_prefix.RESULT_CACHE_STATISTICS'; 69 | BEGIN 70 | :sql_text := q'[ 71 | SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */ 72 | inst_id, name, value 73 | FROM &&gv_object_prefix.result_cache_statistics 74 | ORDER BY 1, 2 75 | ]'; 76 | :sql_text_cdb := q'[ 77 | SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */ 78 | con_id, inst_id, name, value 79 | FROM &&gv_object_prefix.result_cache_statistics 80 | ORDER BY 1, 2, 3 81 | ]'; 82 | END; 83 | / 84 | @@&&skip_ver_le_10.&&skip_ver_le_11_1.&&9a_pre_one. 85 | 86 | 87 | /*****************************************************************************************/ 88 | 89 | DEF skip_lch = 'Y'; 90 | DEF skip_bch = 'Y'; 91 | DEF skip_pch = 'Y'; 92 | DEF vaxis = ''; 93 | DEF haxis = ''; 94 | DEF skip_all = ''; 95 | DEF title_suffix = ''; 96 | EXEC :sql_text := ''; 97 | 98 | /*****************************************************************************************/ 99 | -------------------------------------------------------------------------------- /moat369/sql/moat369_gc_map_chart.sql: -------------------------------------------------------------------------------- 1 | -- add seq to one_spool_filename 2 | DEF one_spool_filename = '&&spool_filename.' 3 | @@&&fc_seq_output_file. one_spool_filename 4 | @@&&fc_def_output_file. one_spool_fullpath_filename '&&one_spool_filename._map_chart.html' 5 | 6 | @@moat369_0j_html_topic_intro.sql &&one_spool_filename._map_chart.html map 7 | 8 | SPO &&one_spool_fullpath_filename. APP 9 | PRO 12 | PRO 15 | PRO 16 | 17 | -- chart header 18 | PRO
19 | PRO 71 | 72 | -- footer 73 | PRO
74 | PRO Notes:
1) Locations are approximated
75 | PRO 2) &&foot. 76 | PRO 77 | SPO OFF 78 | 79 | @@moat369_0k_html_topic_end.sql &&one_spool_filename._map_chart.html map '' &&sql_show. 80 | 81 | @@&&fc_encode_html. &&one_spool_fullpath_filename. 82 | 83 | HOS zip -mj &&moat369_zip_filename. &&one_spool_fullpath_filename. >> &&moat369_log3. 84 | 85 | UNDEF one_spool_fullpath_filename -------------------------------------------------------------------------------- /moat369/sql/moat369_gc_pie_chart.sql: -------------------------------------------------------------------------------- 1 | -- add seq to one_spool_filename 2 | DEF one_spool_filename = '&&spool_filename.' 3 | @@&&fc_seq_output_file. one_spool_filename 4 | @@&&fc_def_output_file. one_spool_fullpath_filename '&&one_spool_filename._pie_chart.html' 5 | 6 | @@moat369_0j_html_topic_intro.sql &&one_spool_filename._pie_chart.html pie 7 | 8 | SPO &&one_spool_fullpath_filename. APP 9 | PRO 10 | 11 | -- chart header 12 | PRO 78 | PRO 79 | PRO
80 | PRO 81 | 82 | -- footer 83 | PRONotes:
&&foot.
84 | PRO 85 | SPO OFF 86 | 87 | @@moat369_0k_html_topic_end.sql &&one_spool_filename._pie_chart.html pie '' &&sql_show. 88 | 89 | @@&&fc_encode_html. &&one_spool_fullpath_filename. 90 | 91 | HOS zip -mj &&moat369_zip_filename. &&one_spool_fullpath_filename. >> &&moat369_log3. 92 | 93 | UNDEF one_spool_fullpath_filename -------------------------------------------------------------------------------- /sql/mig360_8_45_unplugging_plugging_noncdb.sql: -------------------------------------------------------------------------------- 1 | 2 | PRO URL: https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/mig-unplugging-plugging-non-cdb.htm 3 | PRO 12.2 4 | PRO 5 | PRO 6 | PRO On Premises: 7 | PRO 8 | PRO mkdir &&path_unplug_pdb. -p 9 | PRO 10 | PRO 11 | PRO sqlplus / as sysdba 12 | PRO 13 | PRO shutdown immediate; 14 | PRO 15 | PRO STARTUP OPEN READ ONLY; 16 | PRO 17 | PRO 18 | select 'BEGIN'||chr(10)||' DBMS_PDB.DESCRIBE(''&&path_unplug_pdb./'||'db'||'.xml'');'||chr(10)||'END;'||chr(10)||'/'||chr(10) from dual; 19 | PRO 20 | PRO 21 | select 'Set environment variables to +ASM'||chr(10)|| 22 | 'asmcmd' 23 | from dba_data_files s 24 | where instr(file_name,'+') > 0 25 | AND rownum=1 26 | ; 27 | PRO 28 | select 'cp '||file_name||' '||'&&path_unplug_pdb./' 29 | from dba_data_files s 30 | where instr(file_name,'+') > 0 31 | order by tablespace_name 32 | ; 33 | select 'cp '||file_name||' '||'&&path_unplug_pdb./' 34 | from dba_temp_files s 35 | where instr(file_name,'+') > 0 36 | order by tablespace_name 37 | ; 38 | PRO 39 | PRO 40 | select 'Copy using SO'||chr(10) 41 | from dba_data_files s 42 | where instr(file_name,'+') = 0 43 | AND rownum=1 44 | ; 45 | PRO 46 | select 'cp '||file_name||' '||'&&path_unplug_pdb./' 47 | from dba_data_files s 48 | where instr(file_name,'+') = 0 49 | order by tablespace_name 50 | ; 51 | select 'cp '||file_name||' '||'&&path_unplug_pdb./' 52 | from dba_temp_files s 53 | where instr(file_name,'+') = 0 54 | order by tablespace_name 55 | ; 56 | PRO 57 | PRO 58 | PRO Cloud: 59 | PRO 60 | PRO mkdir &&path_plug_pdb. -p 61 | PRO 62 | PRO 63 | PRO On Premises: 64 | PRO 65 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 66 | '&&path_unplug_pdb./* \'||chr(10)|| 67 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&path_plug_pdb./' 68 | from dual 69 | ; 70 | PRO 71 | PRO 72 | PRO Cloud: 73 | PRO 74 | PRO 75 | select 'Adjust ASM PATH'||chr(10)|| 76 | 'Set environment variables to +ASM'||chr(10)|| 77 | 'asmcmd' 78 | from dba_data_files s 79 | where instr(file_name,'+') > 0 80 | AND rownum=1 81 | ; 82 | PRO 83 | select 'cp '||'&&path_plug_pdb./'||substr(file_name,instr(file_name,'/',-1)+1,length(file_name))||' '||'+DATA/'||'&&mig360_dbname.'||'/DATAFILE/'||substr(file_name,instr(file_name,'/',-1)+1,instr(file_name,'.',1)-(instr(file_name,'/',-1)+1))||'_'||file_id||'.dbf' 84 | from dba_data_files s 85 | order by tablespace_name 86 | ; 87 | select 'cp '||'&&path_plug_pdb./'||substr(file_name,instr(file_name,'/',-1)+1,length(file_name))||' '||'+DATA/'||'&&mig360_dbname.'||'/DATAFILE/'||substr(file_name,instr(file_name,'/',-1)+1,instr(file_name,'.',1)-(instr(file_name,'/',-1)+1))||'_'||file_id||'.dbf' 88 | from dba_temp_files s 89 | order by tablespace_name 90 | ; 91 | PRO 92 | PRO 93 | PRO Adjust ASM PATH on &&path_plug_pdb./db.xml 94 | PRO 95 | PRO 96 | PRO sqlplus / as sysdba 97 | PRO 98 | select 'create pluggable database '||'pdb1'||' using ''&&path_plug_pdb./'||'db'||'.xml'';'||chr(10) from dual; 99 | PRO 100 | PRO 101 | select 'ALTER SESSION SET CONTAINER='||'pdb1'||';'||chr(10)||'@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql;'||chr(10)||'ALTER PLUGGABLE DATABASE OPEN;'||chr(10) from dual; 102 | PRO 103 | PRO 104 | -------------------------------------------------------------------------------- /sql/features_use.sql: -------------------------------------------------------------------------------- 1 | ---------------------------------------------------------------------------------------- 2 | -- 3 | -- File name: features_use.sql (2016-09-01) 4 | -- 5 | -- Purpose: Collect Database Features Use 6 | -- 7 | -- Author: Carlos Sierra 8 | -- 9 | -- Usage: Collects V$OPTION and DBA_FEATURE_USAGE_STATISTICS 10 | -- 11 | -- The output of this script can be used to determine which database 12 | -- features the application requires. 13 | -- 14 | -- Example: # cd esp_collect-master 15 | -- # sqlplus / as sysdba 16 | -- SQL> START sql/esp_master.sql 17 | -- 18 | -- Notes: Developed and tested on 12.1.0.2, 11.2.0.4, 11.2.0.3, 10.2.0.4 19 | -- 20 | --------------------------------------------------------------------------------------- 21 | -- 22 | SET TERM OFF ECHO OFF FEED OFF VER OFF HEA ON PAGES 100 COLSEP ' ' LIN 32767 TRIMS ON TRIM ON TI OFF TIMI OFF ARRAY 100 NUM 10 SQLBL ON BLO . RECSEP OFF LONG 8000 LONGC 80; 23 | 24 | -- get host name (up to 30, stop before first '.', no special characters) 25 | DEF esp_host_name_short = ''; 26 | COL esp_host_name_short NEW_V esp_host_name_short FOR A30; 27 | SELECT LOWER(SUBSTR(SYS_CONTEXT('USERENV', 'SERVER_HOST'), 1, 30)) esp_host_name_short FROM DUAL; 28 | SELECT SUBSTR('&&esp_host_name_short.', 1, INSTR('&&esp_host_name_short..', '.') - 1) esp_host_name_short FROM DUAL; 29 | SELECT TRANSLATE('&&esp_host_name_short.', 30 | 'abcdefghijklmnopqrstuvwxyz0123456789-_ ''`~!@#$%&*()=+[]{}\|;:",.<>/?'||CHR(0)||CHR(9)||CHR(10)||CHR(13)||CHR(38), 31 | 'abcdefghijklmnopqrstuvwxyz0123456789-_') esp_host_name_short FROM DUAL; 32 | 33 | -- get database name (up to 10, stop before first '.', no special characters) 34 | COL esp_dbname_short NEW_V esp_dbname_short FOR A10; 35 | SELECT LOWER(SUBSTR(SYS_CONTEXT('USERENV', 'DB_NAME'), 1, 10)) esp_dbname_short FROM DUAL; 36 | SELECT SUBSTR('&&esp_dbname_short.', 1, INSTR('&&esp_dbname_short..', '.') - 1) esp_dbname_short FROM DUAL; 37 | SELECT TRANSLATE('&&esp_dbname_short.', 38 | 'abcdefghijklmnopqrstuvwxyz0123456789-_ ''`~!@#$%&*()=+[]{}\|;:",.<>/?'||CHR(0)||CHR(9)||CHR(10)||CHR(13)||CHR(38), 39 | 'abcdefghijklmnopqrstuvwxyz0123456789-_') esp_dbname_short FROM DUAL; 40 | 41 | -- get collection date 42 | DEF esp_collection_yyyymmdd_hhmi = ''; 43 | COL esp_collection_yyyymmdd_hhmi NEW_V esp_collection_yyyymmdd_hhmi FOR A13; 44 | SELECT TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MI') esp_collection_yyyymmdd_hhmi FROM DUAL; 45 | 46 | ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,"; 47 | ALTER SESSION SET NLS_SORT = 'BINARY'; 48 | ALTER SESSION SET NLS_COMP = 'BINARY'; 49 | 50 | CL COL; 51 | 52 | SPO features_use_&&esp_host_name_short._&&esp_dbname_short._&&esp_collection_yyyymmdd_hhmi..txt; 53 | 54 | /*****************************************************************************************/ 55 | 56 | PRO 57 | PRO V$OPTION 58 | PRO ~~~~~~~~ 59 | SELECT * FROM v$option 60 | / 61 | 62 | /*****************************************************************************************/ 63 | 64 | PRO 65 | PRO DBA_FEATURE_USAGE_STATISTICS 66 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 67 | SELECT * FROM dba_feature_usage_statistics 68 | / 69 | 70 | /*****************************************************************************************/ 71 | 72 | SPO OFF; 73 | SET TERM ON ECHO OFF FEED ON VER ON HEA ON PAGES 14 COLSEP ' ' LIN 80 TRIMS OFF TRIM ON TI OFF TIMI OFF ARRAY 15 NUM 10 SQLBL OFF BLO ON RECSEP WR; 74 | 75 | -------------------------------------------------------------------------------- /sql/mig360_8_40_rman_inc_bkp_template.sql: -------------------------------------------------------------------------------- 1 | 2 | PRO URL: https://docs.oracle.com/database/121/ADMQS/GUID-74D6A06A-EC88-4CF0-B486-7B68DE4A78E4.htm#ADMQS09311 3 | PRO NON-CDB 4 | PRO 5 | PRO On Premises: 6 | PRO 7 | PRO mkdir &&path_data_onprem. -p 8 | PRO mkdir &&path_data_onprem./control -p 9 | PRO mkdir &&path_data_onprem./level0 -p 10 | PRO mkdir &&path_data_onprem./level1 -p 11 | PRO 12 | PRO 13 | PRO Cloud: 14 | PRO 15 | PRO mkdir &&path_data_cloud. -p 16 | PRO mkdir &&path_data_cloud./control -p 17 | PRO mkdir &&path_data_cloud./level0 -p 18 | PRO mkdir &&path_data_cloud./level1 -p 19 | PRO 20 | PRO 21 | PRO On Premises: 22 | PRO 23 | PRO 24 | PRO ****You can use RMAN PARALLEL parameters or allocate multiple channels in a run block to speed up the process**** 25 | PRO 26 | PRO 27 | PRO rman target / 28 | PRO 29 | PRO alter database backup controlfile to '&&path_data_onprem./control/controlfile.cf' reuse;; 30 | PRO 31 | PRO backup as compressed backupset incremental level 0 database format '/u04/oradata/orclp/level0/%U';; 32 | PRO 33 | PRO 34 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 35 | '&&path_data_onprem./control/* \'||chr(10)|| 36 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&path_data_cloud./control/' 37 | from dual 38 | ; 39 | PRO 40 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 41 | '&&path_data_onprem./level0/* \'||chr(10)|| 42 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&path_data_cloud./level0/' 43 | from dual 44 | ; 45 | PRO 46 | PRO 47 | PRO ****Move the spfile and password file to the Cloud**** 48 | PRO 49 | PRO 50 | PRO Cloud: 51 | PRO 52 | PRO 53 | PRO Adjust file permission on &&path_data_cloud. 54 | PRO 55 | PRO 56 | PRO ****You can use RMAN PARALLEL parameters or allocate multiple channels in a run block to speed up the process**** 57 | PRO 58 | PRO 59 | PRO rman target / 60 | PRO 61 | PRO startup nomount;; 62 | PRO 63 | PRO restore controlfile from '&&path_data_cloud./control/controlfile.cf';; 64 | PRO 65 | PRO alter database mount;; 66 | PRO 67 | PRO catalog start with '&&path_data_cloud./level0/';; 68 | PRO 69 | PRO run 70 | PRO { 71 | PRO set newname for database to '+DATA';; 72 | PRO restore database;; 73 | PRO } 74 | PRO 75 | PRO SWITCH DATABASE TO COPY;; 76 | PRO 77 | PRO 78 | PRO On Premises: 79 | PRO 80 | PRO 81 | PRO ****Run this part as many as needed**** 82 | PRO 83 | PRO 84 | PRO rman target / 85 | PRO 86 | PRO backup as compressed backupset incremental level 1 database plus archivelog format '&&path_data_onprem/level1/%U';; 87 | PRO 88 | PRO 89 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 90 | '&&path_data_onprem./level1/* \'||chr(10)|| 91 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&path_data_cloud./level1/' 92 | from dual 93 | ; 94 | PRO 95 | PRO 96 | PRO Cloud: 97 | PRO 98 | PRO 99 | PRO Adjust file permission on &&path_data_cloud. 100 | PRO 101 | PRO 102 | PRO rman target / 103 | PRO 104 | PRO catalog start with '&&path_data_cloud./level1/';; 105 | PRO 106 | PRO 107 | PRO On Premises: 108 | PRO 109 | PRO 110 | PRO rman target / 111 | PRO 112 | PRO RESTORE DATABASE PREVIEW;; 113 | PRO 114 | PRO ****Get the SCN**** 115 | PRO 116 | PRO 117 | PRO Cloud: 118 | PRO 119 | PRO 120 | PRO ****If you are on 12.2, you can use "RECOVER DATABASE UNTIL AVAILABLE REDO;"**** 121 | PRO 122 | PRO 123 | PRO RECOVER DATABASE UNTIL SCN your_production_scn;; 124 | PRO 125 | PRO 126 | PRO At the end 127 | PRO 128 | PRO 129 | PRO sqlplus / as sysdba 130 | PRO 131 | PRO alter database open RESETLOGS;; 132 | PRO 133 | PRO ****Check RedoLogs and TempFiles**** 134 | PRO 135 | 136 | -------------------------------------------------------------------------------- /moat369/sh/encode_html.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Written by Rodrigo Jorge 4 | # Last updated on: Jun/2018 by Rodrigo Jorge 5 | # ---------------------------------------------------------------------------- 6 | set -e # Exit if error 7 | 8 | # 1 = Input file with BEGIN_SENSITIVE_DATA and END_SENSITIVE_DATA tags. Output file will be the same, replaced. 9 | # 2 = Encoded HTML template. 10 | # 3 = Key File used OpenSSL for encryption. 11 | # 4 = Enable Encryption? ON or OFF 12 | # 5 = Enable Comprssion? ON or OFF 13 | 14 | if [ $# -ne 5 ] 15 | then 16 | echo "Five arguments are needed..." 17 | exit 1 18 | fi 19 | 20 | in_file=$1 21 | enc_file=$2 22 | x_file=$3 23 | flag_encr=$4 24 | flag_comp=$5 25 | out_tmp_file=$1.tmp 26 | 27 | SOTYPE=$(uname -s) 28 | if [ "$SOTYPE" = "SunOS" ] 29 | then 30 | AWKCMD=/usr/xpg4/bin/awk 31 | SEDCMD=/usr/xpg4/bin/sed 32 | else 33 | AWKCMD=awk 34 | SEDCMD=sed 35 | fi 36 | 37 | [ "$flag_encr" == "ON" -o "$flag_encr" == "OFF" ] || exit 1 38 | [ "$flag_comp" == "ON" -o "$flag_comp" == "OFF" ] || exit 1 39 | 40 | # Nothing to do here. 41 | [ "$flag_encr" == "ON" -o "$flag_comp" == "ON" ] || exit 0 42 | 43 | 44 | test -f $in_file || exit 1 45 | test -f $enc_file || exit 1 46 | 47 | if [ "$flag_encr" == "ON" ] 48 | then 49 | which openssl > /dev/null 2>&- || exit 1 50 | [ -f $x_file ] || exit 1 51 | fi 52 | if [ "$flag_comp" == "ON" ] 53 | then 54 | which gzip > /dev/null 2>&- || exit 1 55 | which base64 > /dev/null 2>&- || exit 1 56 | fi 57 | 58 | in_start_line=`$SEDCMD -ne /\ 20 | PRO 21 | SPO OFF 22 | @@&&fc_spool_end. 23 | 24 | @@&&fc_def_output_file. step_main_file_driver 'step_main_file_driver_header.sql' 25 | 26 | SET SERVEROUT ON 27 | 28 | @@&&fc_spool_start. 29 | SPO &&step_main_file_driver. 30 | BEGIN 31 | FOR I IN 1 .. :moat369_total_cols 32 | LOOP 33 | IF I = 1 THEN 34 | DBMS_OUTPUT.PUT_LINE('PRO '); 35 | ELSE 36 | DBMS_OUTPUT.PUT_LINE('PRO '); 37 | END IF; 38 | END LOOP; 39 | END; 40 | / 41 | SPO OFF 42 | 43 | SPO &&moat369_main_report. APP 44 | @&&step_main_file_driver. 45 | SPO OFF 46 | @@&&fc_spool_end. 47 | 48 | 49 | @@&&fc_zip_driver_files. &&step_main_file_driver. 50 | UNDEF step_main_file_driver 51 | 52 | @@&&fc_spool_start. 53 | SPO &&moat369_main_report. APP 54 | PRO '); 93 | END IF; 94 | put_line('PRO'); 95 | put_line('SPO OFF'); 96 | put_line('@@&&fc_spool_end.'); 97 | END LOOP; 98 | END; 99 | / 100 | SPO OFF 101 | SET DEF ON 102 | 103 | @&&step_main_file_driver. 104 | 105 | @@&&fc_spool_end. 106 | 107 | 108 | @@&&fc_zip_driver_files. &&step_main_file_driver. 109 | UNDEF step_main_file_driver 110 | 111 | -- main footer 112 | @@&&fc_spool_start. 113 | SPO &&moat369_main_report. APP; 114 | PRO
' || I || '/' || :moat369_total_cols || '' || I || '/' || :moat369_total_cols || '
55 | PRO &&moat369_sw_name. 64 | PRO
65 | SPO OFF 66 | @@&&fc_spool_end. 67 | 68 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 69 | 70 | 71 | @@&&fc_def_output_file. step_main_file_driver 'step_main_file_driver_columns.sql' 72 | 73 | @@&&fc_spool_start. 74 | SPO &&step_main_file_driver. 75 | SET DEF OFF 76 | DECLARE 77 | PROCEDURE put_line(p_line IN VARCHAR2) IS 78 | BEGIN 79 | DBMS_OUTPUT.PUT_LINE(p_line); 80 | END put_line; 81 | BEGIN 82 | FOR I IN 1 .. :moat369_total_cols 83 | LOOP 84 | put_line('@@&&fc_load_column. ' || I); 85 | put_line('PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'); 86 | put_line('@@&&fc_spool_start.'); 87 | put_line('SPO &&moat369_main_report. APP'); 88 | put_line('PRO'); 89 | IF I < :moat369_total_cols THEN 90 | put_line('PRO
'); 91 | ELSE 92 | put_line('PRO
115 | PRO 116 | SPO OFF; 117 | 118 | -- log footer 119 | SPO &&moat369_log. APP; 120 | PRO 121 | PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 122 | PRO 123 | DEF; 124 | SHOW PARAMETERS; 125 | PRO 126 | PRO end log 127 | SPO OFF; 128 | @@&&fc_spool_end. 129 | 130 | DEF section_id = '0c' 131 | EXEC DBMS_APPLICATION_INFO.SET_MODULE('&&moat369_prefix.','&§ion_id.') 132 | 133 | -- Load custom post if exists 134 | DEF moat369_skip_check_file = '' 135 | @@&&fc_check_file_exists. '&&moat369_sw_folder./&&moat369_sw_name._0b_post.sql' 'moat369_skip_check_file' '' '&&fc_skip_script.' 136 | @@&&moat369_skip_check_file.&&moat369_sw_folder./&&moat369_sw_name._0b_post.sql 137 | UNDEF moat369_skip_check_file 138 | 139 | @@moat369_0c_post.sql 140 | 141 | EXEC DBMS_APPLICATION_INFO.SET_MODULE(NULL,NULL); 142 | 143 | @@&&fc_encrypt_output. &&moat369_zip_filename..zip 144 | 145 | -- Restore Original SETs 146 | @original_settings 147 | HOS rm -f original_settings.sql 148 | 149 | HOS if [ -f &&moat369_zip_filename..zip ]; then unzip -l &&moat369_zip_filename.; fi 150 | PRO "End &&moat369_sw_name.. Output: &&moat369_zip_filename..zip" -------------------------------------------------------------------------------- /sql/mig360_8_65_oracle_dataguard_template.sql: -------------------------------------------------------------------------------- 1 | PRO URL: https://www.oracle.com/technetwork/database/availability/dr-to-oracle-cloud-2615770.pdf 2 | PRO 3 | PRO 4 | PRO On Premises: 5 | PRO 6 | PRO 7 | SELECT 'Adjust db_recovery_file_dest and db_recovery_file_dest_size' 8 | FROM v$parameter 9 | WHERE name = 'db_recovery_file_dest' 10 | AND value IS NULL 11 | AND rownum=1; 12 | PRO 13 | PRO 14 | SELECT 'Enabling ARCHIVELOG Mode'||chr(10)|| 15 | ''||chr(10)|| 16 | ' sqlplus / as sysdba'||chr(10)|| 17 | ''||chr(10)|| 18 | ' SHUTDOWN IMMEDIATE;'||chr(10)|| 19 | ' STARTUP MOUNT;'||chr(10)|| 20 | ' ALTER DATABASE ARCHIVELOG;'||chr(10)|| 21 | ' ALTER DATABASE OPEN;' 22 | FROM v$database 23 | WHERE log_mode <> 'ARCHIVELOG'; 24 | PRO 25 | PRO 26 | SELECT 'Enabling Force Logging Mode'||chr(10)|| 27 | ''||chr(10)|| 28 | ' ALTER DATABASE FORCE LOGGING;'||chr(10) 29 | FROM v$database 30 | WHERE force_logging = 'NO'; 31 | PRO 32 | PRO 33 | PRO 34 | select ' ALTER DATABASE ADD STANDBY LOGFILE THREAD '||thread#||' GROUP '||((select max(group#) from v$log v2 )+rownum) ||' (''+REDO'') '||' SIZE '||bytes||';' from v$log v; 35 | PRO 36 | PRO -- Add one more per thread **** 37 | PRO 38 | PRO Add to tnsnames.ora 39 | PRO 40 | PRO &&mig360_dbname_dg._STBY=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=&&ip_address_dbaas_vm.)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=&&mig360_dbname_dg.)(UR=A))) 41 | PRO 42 | PRO Add the source and the destination connect descriptor in the $TNS_ADMIN/tnsnames.ora files on both the source and auxiliary server 43 | PRO 44 | PRO 45 | PRO Cloud: 46 | PRO 47 | PRO 48 | PRO Ensure the listener.ora file is configured for static service registration. 49 | PRO 50 | PRO SID_LIST_LISTENER = 51 | PRO (SID_LIST = 52 | PRO (SID_DESC = 53 | PRO (SID_NAME=&&mig360_dbname_dg.) 54 | PRO (ORACLE_HOME=/u01/app/oracle/product/18.0.0/dbhome_1) 55 | PRO ) 56 | PRO ) 57 | PRO 58 | PRO LISTENER = 59 | PRO (DESCRIPTION_LIST = 60 | PRO (DESCRIPTION = 61 | PRO (ADDRESS = (PROTOCOL = TCP)(HOST = &&ip_address_dbaas_vm.)(PORT = 1521)) 62 | PRO ) 63 | PRO ) 64 | PRO 65 | PRO 66 | PRO Create a file called /tmp/init.ora 67 | PRO 68 | PRO *.db_name='&&mig360_dbname_dg.' 69 | PRO 70 | SELECT '*.compatible='''||value||'''' 71 | FROM v$parameter 72 | WHERE name = 'compatible'; 73 | PRO 74 | SELECT '*.enable_pluggable_database='||value 75 | FROM v$parameter 76 | WHERE name = 'enable_pluggable_database'; 77 | PRO 78 | PRO *.log_file_name_convert='dummy','dummy'; 79 | PRO 80 | --Doc ID 352879.1 and Doc ID 2194825.1 81 | PRO 82 | select 'mkdir -p '|| value from v$parameter where name like 'audit_file_dest'; 83 | PRO 84 | PRO orapwd file=$ORACLE_HOME/dbs/orapw&&mig360_dbname_dg. password=YOUR_PASSWORD entries=10 85 | PRO 86 | PRO 87 | PRO export ORACLE_SID=&&mig360_dbname_dg. 88 | PRO 89 | PRO sqlplus / as sysdba 90 | PRO 91 | PRO STARTUP NOMOUNT PFILE='/tmp/init.ora';; 92 | PRO 93 | PRO CREATE SPFILE FROM PFILE='/tmp/init.ora';; 94 | PRO 95 | PRO SHUTDOWN ABORT;; 96 | PRO 97 | PRO STARTUP NOMOUNT;; 98 | PRO 99 | PRO 100 | PRO On Premises: 101 | PRO 102 | PRO 103 | PRO rman TARGET sys/password@&&mig360_dbname_dg. AUXILIARY sys/password@&&mig360_dbname_dg._STBY 104 | PRO 105 | PRO DUPLICATE TARGET DATABASE FOR STANDBY 106 | PRO FROM ACTIVE DATABASE 107 | PRO DORECOVER 108 | PRO NOFILENAMECHECK;; 109 | PRO 110 | PRO 111 | PRO sqlplus / as sysdba 112 | PRO 113 | PRO ALTER SYSTEM SET log_archive_dest_2='SERVICE=&&mig360_dbname_dg._STBY ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=&&mig360_dbname_dg.';; 114 | PRO 115 | PRO 116 | PRO Cloud: 117 | PRO 118 | PRO 119 | PRO sqlplus / as sysdba 120 | PRO 121 | PRO -- Start Apply Process 122 | PRO ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;; 123 | PRO 124 | PRO 125 | PRO On Premises: 126 | PRO 127 | PRO 128 | PRO If you are planning to use Broker, you have to change db_unique_name parameter in the standby database 129 | PRO 130 | PRO 131 | PRO sqlplus / as sysdba 132 | PRO 133 | PRO -- Convert standby database to primary 134 | PRO ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY;; 135 | PRO 136 | PRO -- Shutdown primary database 137 | PRO SHUTDOWN IMMEDIATE;; 138 | PRO 139 | PRO 140 | PRO Cloud: 141 | PRO 142 | PRO 143 | PRO -- Convert standby database to primary 144 | PRO sqlplus / as sysdba 145 | PRO 146 | PRO ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;; 147 | PRO 148 | PRO -- Shutdown standby database 149 | PRO SHUTDOWN IMMEDIATE;; 150 | PRO 151 | PRO -- Open old standby database as primary 152 | PRO STARTUP;; 153 | PRO 154 | -------------------------------------------------------------------------------- /sql/mig360_8_15_rman_transportable_tablespace_with_data_pump_template_noncdb_to_cdb.sql: -------------------------------------------------------------------------------- 1 | 2 | PRO URL: https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/mig-rman-transp-tablespace.htm 3 | PRO NON-CDB to CDB 4 | PRO TO-DO: 1-Adjust Create User *** 5 | PRO 6 | PRO On Premises: 7 | PRO 8 | PRO mkdir &&rman_transdest. -p 9 | PRO 10 | PRO mkdir &&rman_auxdest. -p 11 | PRO 12 | PRO 13 | PRO rman target / 14 | PRO 15 | PRO ****Run a full backup before, to avoid datafile destination errors and auxiliary instance creation errors**** 16 | PRO ****You can use RMAN PARALLEL parameters or allocate multiple channels in a run block to speed up the process**** 17 | PRO 18 | select 'TRANSPORT TABLESPACE '||tablesp||' TABLESPACE DESTINATION '||'''&&rman_transdest.'''||' AUXILIARY DESTINATION '||'''&&rman_auxdest.'''||';' 19 | from( 20 | select LISTAGG(tablespace_name, ',') 21 | WITHIN GROUP (ORDER BY tablespace_name) 22 | AS tablesp 23 | from dba_tablespaces s where 1=1 24 | AND s.contents NOT IN ('UNDO','TEMPORARY') 25 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') 26 | ) 27 | ; 28 | PRO 29 | PRO 30 | PRO Cloud: 31 | PRO 32 | PRO mkdir &&dpdump_for_onprem. -p 33 | PRO 34 | PRO mkdir &&path_data_cloud. -p 35 | PRO 36 | PRO 37 | PRO On Premises: 38 | PRO 39 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 40 | '&&rman_transdest./*.dmp \'||chr(10)|| 41 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&dpdump_for_onprem./' 42 | from dual 43 | ; 44 | PRO 45 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 46 | '&&rman_transdest./*.sql \'||chr(10)|| 47 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&dpdump_for_onprem./' 48 | from dual 49 | ; 50 | PRO 51 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 52 | '&&rman_transdest./*.dbf \'||chr(10)|| 53 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&path_data_cloud./' 54 | from dual 55 | ; 56 | PRO 57 | PRO 58 | PRO Cloud: 59 | PRO 60 | PRO 61 | PRO Adjust file permission on &&dpdump_for_onprem./ and &&path_data_cloud. 62 | PRO 63 | PRO 64 | PRO Add to tnsnames.ora 65 | PRO 66 | PRO pdbXX=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=my_cloud_server_name)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=pdbXX))) 67 | PRO 68 | PRO 69 | PRO sqlplus / as sysdba 70 | PRO 71 | PRO alter session set container=pdbXX;; 72 | PRO 73 | PRO 74 | PRO CREATE OR REPLACE DIRECTORY dp_from_onprem AS '&&dpdump_for_onprem.';; 75 | PRO 76 | PRO grant read,write on directory dp_from_onprem to system;; 77 | PRO 78 | PRO 79 | select '--create user '||username||' identified by '||username||';' from dba_users where 1=1 80 | &&skip_10g_column.&&skip_11g_column.AND oracle_maintained = 'N' 81 | &&skip_12c_column.&&skip_18c_column.AND (username not in &&default_user_list_1. and username not in &&default_user_list_2.) 82 | order by username 83 | ; 84 | PRO 85 | PRO 86 | select 'Now, you can move the datafiles from '||'&&path_data_cloud.'||' to +ASM'||chr(10) 87 | from dba_data_files s where 1=1 88 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') 89 | AND s.tablespace_name NOT IN (SELECT tablespace_name 90 | FROM dba_tablespaces 91 | WHERE contents IN ('UNDO','TEMPORARY')) 92 | AND instr(file_name,'+') > 0 93 | AND rownum=1 94 | ; 95 | PRO 96 | PRO 97 | PRO Adjust and run the script &&dpdump_for_onprem./impscrpt.sql using data bellow. 98 | PRO 99 | PRO 100 | select 'impdp system@pdbXX DIRECTORY=dp_from_onprem DUMPFILE=dmpfile.dmp LOGFILE=dmpfile_imp.log TRANSPORT_DATAFILES='||dataf||chr(10)||' ' 101 | from ( 102 | select LISTAGG('&&rman_transdest./'||'o1_mf_'||lower(tablespace_name)||'__'||file_id||'_.dbf' , ',') 103 | WITHIN GROUP (ORDER BY file_name) 104 | AS dataf 105 | from dba_data_files s 106 | where 1=1 107 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') 108 | AND s.tablespace_name NOT IN (SELECT tablespace_name 109 | FROM dba_tablespaces 110 | WHERE contents IN ('UNDO','TEMPORARY')) 111 | ) 112 | ; 113 | PRO 114 | PRO 115 | PRO sqlplus / as sysdba 116 | PRO 117 | PRO alter session set container=pdbXX;; 118 | PRO 119 | select 'ALTER TABLESPACE '||tablespace_name||' READ WRITE;' from dba_tablespaces s where 1=1 120 | AND s.contents NOT IN ('UNDO','TEMPORARY') 121 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') order by tablespace_name 122 | ; 123 | PRO 124 | PRO 125 | -------------------------------------------------------------------------------- /moat369/sql/moat369_fc_mod_state.sql: -------------------------------------------------------------------------------- 1 | -- This code will create/restore/save the define and bind variables of the current execution. Useful when running multiple MOAT369 tools. 2 | -- Param1: CREATE, RESTORE or SAVE 3 | -- Param2: Checkpoint Name 4 | -- Param3: Variable that will receive the PATH where CREATED/SAVED/RESTORED file is placed 5 | -- Param4: (Optional used for RESTORE) If empty full, restore is applied. Single UPPERCASE variable to be read from checkpoint file. 6 | -- Param5: (Optional used for RESTORE) If empty full, restore is applied. Single UPPERCASE variable to be defined with the value from variable of param4. 7 | 8 | -- Definitions for Param1 9 | -- CREATE = Create a file with all current bind and define variables. 10 | -- RESTORE = Restore the file with all bind and define variables. Everything is cleared before RESTORE. 11 | -- SAVE = Save the file inside current driver zip file and delete it. 12 | 13 | DEF in_param1 = '&1.' 14 | DEF in_param2 = '&2.' 15 | DEF in_param3 = '&3.' 16 | UNDEF 1 2 3 17 | 18 | @@&&fc_def_empty_var. 4 19 | @@&&fc_def_empty_var. 5 20 | DEF in_param4 = '&4.' 21 | DEF in_param5 = '&5.' 22 | UNDEF 4 5 23 | 24 | @@&&fc_def_output_file. create_step_file 'create_step_file.sql' 25 | @@&&fc_def_output_file. rest_step_file 'rest_step_file.sql' 26 | @@&&fc_def_output_file. save_step_file 'save_step_file.sql' 27 | @@&&fc_def_output_file. gen_filter_step_file 'gen_filter_step_file.sql' 28 | @@&&fc_def_output_file. all_def_step_file 'all_def_step_file.sql' 29 | @@&&fc_def_output_file. filter_def_step_file 'filter_def_step_file.sql' 30 | DEF db_state_file = '&&in_param3./&&in_param2..db_state_file.sql' 31 | 32 | -- Create File 33 | SPO &&create_step_file. 34 | -- Script to Generate All DEFs 35 | PRO SPO &&gen_filter_step_file. 36 | PRO PRO SPO &&all_def_step_file. 37 | PRO PRO DEF 38 | PRO PRO SPO OFF 39 | PRO PRO HOS cat &&all_def_step_file. | &&cmd_grep. -Eo '^DEFINE [^ ]+' | sed 's/^DEFINE //' | &&cmd_grep. -Ev '^_' | xargs -n 1 echo DEF > &&filter_def_step_file. 40 | PRO PRO HOS rm -f &&all_def_step_file. 41 | PRO SPO OFF 42 | -- Run Script to Generate All DEFs 43 | PRO @@&&gen_filter_step_file. 44 | PRO HOS rm -f &&gen_filter_step_file. 45 | -- Spool to DB State File 46 | PRO SPO &&db_state_file. 47 | PRO PRO SET DEFINE OFF 48 | PRO @@&&filter_def_step_file. 49 | PRO HOS rm -f &&filter_def_step_file. 50 | PRO PRO SET DEFINE ON 51 | PRO SET HEA OFF FEED OFF 52 | PRO SELECT 'EXEC :moat369_total_cols := ''' || :moat369_total_cols || ''';' from dual;; 53 | PRO SELECT 'EXEC :moat369_main_time0 := ''' || :moat369_main_time0 || ''';' from dual;; 54 | PRO --SELECT 'EXEC :file_seq := ''' || :file_seq || ''';' from dual;; 55 | PRO SELECT 'EXEC :driver_seq := ''' || :driver_seq || ''';' from dual;; 56 | PRO SELECT 'EXEC :repo_seq := ''' || :repo_seq || ''';' from dual;; 57 | PRO SELECT 'EXEC :temp_seq := ''' || :temp_seq || ''';' from dual;; 58 | PRO SELECT 'EXEC :get_time_t0 := ''' || :get_time_t0 || ''';' from dual;; 59 | PRO SELECT 'EXEC :moat369_sec_from := ''' || :moat369_sec_from || ''';' from dual;; 60 | PRO SELECT 'EXEC :moat369_sec_to := ''' || :moat369_sec_to || ''';' from dual;; 61 | PRO SET HEA ON 62 | PRO SPO OFF 63 | SPO OFF 64 | 65 | -- Restore File 66 | SPO &&rest_step_file. 67 | -- Script to Generate All DEFs 68 | PRO SPO &&gen_filter_step_file. 69 | PRO PRO HOS if [ '&&in_param4.' != '' ]; then cat &&db_state_file. | &&cmd_grep. -E '^DEFINE &&in_param4. ' | sed 's/ &&in_param4. / &&in_param5. /' > &&filter_def_step_file.; fi 70 | PRO PRO HOS if [ '&&in_param4.' == '' ]; then echo "@@&&fc_clear_defs." > &&filter_def_step_file.; cat &&db_state_file. >> &&filter_def_step_file.; fi 71 | PRO SPO OFF 72 | -- Run Script to Generate All DEFs 73 | PRO @@&&gen_filter_step_file. 74 | PRO HOS rm -f &&gen_filter_step_file. 75 | -- Execute DB State File 76 | PRO @@&&filter_def_step_file. 77 | PRO HOS rm -f &&filter_def_step_file. 78 | SPO OFF 79 | 80 | -- Save File 81 | SPO &&save_step_file. 82 | PRO @@&&fc_zip_driver_files. &&db_state_file. 83 | SPO OFF 84 | 85 | COL step_run_cmd NEW_V step_run_cmd 86 | SELECT DECODE('&&in_param1.','CREATE','@&&create_step_file.','RESTORE','@&&rest_step_file.','SAVE','@&&save_step_file.','') step_run_cmd FROM DUAL; 87 | COL step_run_cmd clear 88 | 89 | @@&&fc_def_output_file. step_file 'step_file.sql' 90 | SPO &&step_file. 91 | PRO &&step_run_cmd. 92 | PRO HOS rm -f &&create_step_file. &&rest_step_file. &&save_step_file. 93 | PRO HOS rm -f &&step_file. 94 | SPO OFF 95 | @&&step_file. 96 | 97 | UNDEF in_param1 in_param2 in_param3 in_param4 in_param5 98 | UNDEF create_step_file save_step_file rest_step_file 99 | UNDEF db_state_file step_run_cmd step_file 100 | UNDEF gen_filter_step_file all_def_step_file filter_def_step_file -------------------------------------------------------------------------------- /sql/mig360_4e_sysmetric_history.sql: -------------------------------------------------------------------------------- 1 | /*****************************************************************************************/ 2 | -- 3 | 4 | DEF main_table = '&&awr_hist_prefix.SYSMETRIC_HISTORY'; 5 | DEF chartype = 'LineChart'; 6 | DEF vbaseline = ''; 7 | DEF stacked = ''; 8 | DEF tit_01 = 'Max'; 9 | DEF tit_02 = '95th Percentile'; 10 | DEF tit_03 = '90th Percentile'; 11 | DEF tit_04 = '85th Percentile'; 12 | DEF tit_05 = '80th Percentile'; 13 | DEF tit_06 = '75th Percentile'; 14 | DEF tit_07 = 'Median'; 15 | DEF tit_08 = 'Avg'; 16 | DEF tit_09 = ''; 17 | DEF tit_10 = ''; 18 | DEF tit_11 = ''; 19 | DEF tit_12 = ''; 20 | DEF tit_13 = ''; 21 | DEF tit_14 = ''; 22 | DEF tit_15 = ''; 23 | 24 | BEGIN 25 | :sql_text_backup := q'[ 26 | WITH 27 | per_instance_and_hour AS ( 28 | SELECT /*+ &&sq_fact_hints. &&ds_hint. */ /* &§ion_id..&&report_sequence. */ 29 | snap_id, 30 | instance_number, 31 | MIN(begin_time) begin_time, 32 | MAX(end_time) end_time, 33 | MAX(value) value_max, 34 | PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY value) value_95p, 35 | PERCENTILE_DISC(0.90) WITHIN GROUP (ORDER BY value) value_90p, 36 | PERCENTILE_DISC(0.85) WITHIN GROUP (ORDER BY value) value_85p, 37 | PERCENTILE_DISC(0.80) WITHIN GROUP (ORDER BY value) value_80p, 38 | PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY value) value_75p, 39 | MEDIAN(value) value_med, 40 | AVG(value) value_avg 41 | FROM &&awr_object_prefix.sysmetric_history 42 | WHERE snap_id BETWEEN &&minimum_snap_id. AND &&maximum_snap_id. 43 | AND dbid = &&mig360_dbid. 44 | AND group_id = 2 /* 1 minute intervals */ 45 | AND metric_name = '@metric_name@' 46 | AND value >= 0 47 | GROUP BY 48 | snap_id, 49 | instance_number 50 | ) 51 | SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */ 52 | snap_id, 53 | TO_CHAR(MIN(begin_time), 'YYYY-MM-DD HH24:MI:SS') begin_time, 54 | TO_CHAR(MIN(end_time), 'YYYY-MM-DD HH24:MI:SS') end_time, 55 | ROUND(SUM(value_max), 1) "Max", 56 | ROUND(SUM(value_95p), 1) "95th Percentile", 57 | ROUND(SUM(value_90p), 1) "90th Percentile", 58 | ROUND(SUM(value_85p), 1) "85th Percentile", 59 | ROUND(SUM(value_80p), 1) "80th Percentile", 60 | ROUND(SUM(value_75p), 1) "75th Percentile", 61 | ROUND(SUM(value_med), 1) "Median", 62 | ROUND(SUM(value_avg), 1) "Avg", 63 | 0 dummy_09, 64 | 0 dummy_10, 65 | 0 dummy_11, 66 | 0 dummy_12, 67 | 0 dummy_13, 68 | 0 dummy_14, 69 | 0 dummy_15 70 | FROM per_instance_and_hour 71 | GROUP BY 72 | snap_id 73 | ORDER BY 74 | snap_id 75 | ]'; 76 | END; 77 | / 78 | 79 | 80 | DEF vbaseline = ''; 81 | 82 | DEF skip_lch = ''; 83 | DEF title = 'I/O Megabytes per Second'; 84 | DEF vaxis = 'Megabtyes per Second'; 85 | DEF abstract = '"&&title." with unit of "&&vaxis.", based on 1-minute samples. Max/Perc/Med/Avg refer to statistics within each hour.
' 86 | DEF foot = 'Max values represent the peak of the metric within each hour and among the 60 samples on it. Each sample represents in turn an average within a 1-minute interval.' 87 | EXEC :sql_text := REPLACE(:sql_text_backup, '@metric_name@', '&&title.'); 88 | @@&&skip_all.&&skip_diagnostics.&&9a_pre_one. 89 | 90 | DEF main_table = '&&awr_hist_prefix.SYSMETRIC_HISTORY'; 91 | DEF chartype = 'LineChart'; 92 | DEF vbaseline = ''; 93 | DEF stacked = ''; 94 | DEF tit_01 = 'Max'; 95 | DEF tit_02 = '95th Percentile'; 96 | DEF tit_03 = '90th Percentile'; 97 | DEF tit_04 = '85th Percentile'; 98 | DEF tit_05 = '80th Percentile'; 99 | DEF tit_06 = '75th Percentile'; 100 | DEF tit_07 = 'Median'; 101 | DEF tit_08 = 'Avg'; 102 | DEF tit_09 = ''; 103 | DEF tit_10 = ''; 104 | DEF tit_11 = ''; 105 | DEF tit_12 = ''; 106 | DEF tit_13 = ''; 107 | DEF tit_14 = ''; 108 | DEF tit_15 = ''; 109 | 110 | DEF skip_lch = ''; 111 | DEF title = 'I/O Requests per Second'; 112 | DEF vaxis = 'Requests per Second'; 113 | DEF abstract = '"&&title." with unit of "&&vaxis.", based on 1-minute samples. Max/Perc/Med/Avg refer to statistics within each hour.
' 114 | DEF foot = 'Max values represent the peak of the metric within each hour and among the 60 samples on it. Each sample represents in turn an average within a 1-minute interval.' 115 | EXEC :sql_text := REPLACE(:sql_text_backup, '@metric_name@', '&&title.'); 116 | @@&&skip_all.&&skip_diagnostics.&&9a_pre_one. 117 | 118 | 119 | /*****************************************************************************************/ 120 | 121 | DEF skip_lch = 'Y'; 122 | DEF skip_bch = 'Y'; 123 | DEF skip_pch = 'Y'; 124 | DEF vaxis = ''; 125 | DEF haxis = ''; 126 | DEF skip_all = ''; 127 | DEF title_suffix = ''; 128 | EXEC :sql_text := ''; 129 | 130 | /*****************************************************************************************/ -------------------------------------------------------------------------------- /moat369/sh/csv-parser.awk: -------------------------------------------------------------------------------- 1 | ## 2 | # Copyright © 2013 Geoffroy Aubry 3 | # 4 | # This file is part of awk-csv-parser. 5 | # 6 | # awk-csv-parser is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU Lesser General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # awk-csv-parser is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU Lesser General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU Lesser General Public License 17 | # along with awk-csv-parser. If not, see 18 | # 19 | 20 | ## 21 | # Extract next field on specified CSV record. 22 | # 23 | # @param string record CSV record to parse. 24 | # @param int pos Position at which search start. 25 | # @param char separator Field separator. 26 | # @param char quote Field enclosure. 27 | # @param array csv Array of found fields in which store the next field (passed by reference). 28 | # @param int num_fields Number of fieds already found. 29 | # @return int Last index of parsed character in CSV record, 30 | # or negative error code (error message in csv_error). 31 | # 32 | function csv_parse_field (record, pos, separator, quote, csv, num_fields) { 33 | if (substr(record, pos, 1) == quote) { 34 | quoted=1 35 | pos++ 36 | } else { 37 | quoted=0 38 | } 39 | prev_char_is_quote=0 40 | field="" 41 | 42 | while (pos <= length(record)) { 43 | c = substr(record, pos, 1) 44 | if (c == separator && (! quoted || prev_char_is_quote)) { 45 | csv[num_fields] = field 46 | return ++pos 47 | } else if (c == quote) { 48 | if (! quoted) { 49 | csv_error="Missing opening quote before '" field "' in following record: '" record "'" 50 | return -1 51 | } else if (prev_char_is_quote) { 52 | prev_char_is_quote=0 53 | field = field quote 54 | } else { 55 | if (pos == length(record)) { 56 | quoted=0 57 | } else { 58 | prev_char_is_quote=1 59 | } 60 | } 61 | } else if (prev_char_is_quote) { 62 | csv_error="Missing separator after '" field "' in following record: '" record "'" 63 | return -2 64 | } else { 65 | field = field c 66 | } 67 | pos++ 68 | } 69 | 70 | if (quoted) { 71 | csv_error="Missing closing quote after '" field "' in following record: '" record "'" 72 | return -3 73 | } else { 74 | csv[num_fields] = field 75 | return pos 76 | } 77 | } 78 | 79 | ## 80 | # Parse CSV record. 81 | # 82 | # @param string record CSV record to parse. 83 | # @param char separator Field separator. 84 | # @param char quote Field enclosure. 85 | # @param array csv Empty array in which store all fields (passed by reference). 86 | # @return int Number of fields parsed in CSV record, 87 | # or negative error code (error message in csv_error). 88 | # 89 | function csv_parse_record (record, separator, quote, csv) { 90 | if (length(record) == 0) { 91 | return 92 | } 93 | 94 | pos=1 95 | num_fields=0 96 | while (pos <= length(record)) { 97 | pos = csv_parse_field(record, pos, separator, quote, csv, num_fields) 98 | if (pos < 0) { 99 | print "\033[0;31m[CSV ERROR: " (-pos) "] \033[1;31m" csv_error "\033[0m" 100 | return pos 101 | } 102 | num_fields++ 103 | } 104 | 105 | if (substr(record, length(record), 1) == separator) { 106 | csv[num_fields++]="" 107 | } 108 | 109 | return num_fields 110 | } 111 | 112 | ## 113 | # Parse CSV record, then display it without quote and replacing specified separator by output_fs. 114 | # 115 | # @param string record CSV record to parse. 116 | # @param char separator Field separator. 117 | # @param char quote Field enclosure. 118 | # @param string output_fs Output field enclosure. 119 | # @return int Return 0 if no error, else return positive error code. 120 | # 121 | function csv_parse_and_display (record, separator, quote, output_fs) { 122 | num_fields=csv_parse_record($0, separator, quote, csv) 123 | if (num_fields >= 0) { 124 | line="" 125 | for (i=0; i sysdate-30 104 | and a.user_id = u.user_id) 105 | union all 106 | SELECT u.user_id,u.username,u.account_status,'30 days or more innactive - AUDIT' days 107 | FROM dba_users u 108 | WHERE NOT EXISTS ( 109 | SELECT 'x' 110 | FROM dba_audit_trail a 111 | WHERE a.username = u.username 112 | AND a.logoff_time > sysdate-30) 113 | order by 1 114 | ]'; 115 | ELSE 116 | :sql_text := q'[ 117 | SELECT u.user_id,u.username,u.account_status,'30 days or more innactive - AUDIT' days 118 | FROM dba_users u 119 | WHERE NOT EXISTS ( 120 | SELECT 'x' 121 | FROM dba_audit_trail a 122 | WHERE a.username = u.username 123 | AND a.logoff_time > sysdate-30) 124 | order by 1 125 | ]'; 126 | END IF; 127 | END IF; 128 | END; 129 | / 130 | --@@&&9a_pre_one. 131 | --Diagnostic pack 132 | --Too slow 133 | 134 | /*****************************************************************************************/ 135 | 136 | DEF title = 'Expired or Locked Users'; 137 | @@&&fc_main_table_name. '&&is_cdb.' 'CDB_USERS' 'DBA_USERS' 138 | EXEC :sql_text := q'[SELECT * FROM DBA_USERS WHERE account_status != 'OPEN' ORDER BY account_status,username]'; 139 | EXEC :sql_text_cdb := q'[SELECT * FROM CDB_USERS WHERE account_status != 'OPEN' ORDER BY con_id, account_status,username]'; 140 | @@&&9a_pre_one. 141 | 142 | /*****************************************************************************************/ 143 | 144 | DEF title = 'Proxy Users'; 145 | DEF main_table = 'PROXY_USERS'; 146 | BEGIN 147 | :sql_text := q'[ 148 | SELECT /*+ &&top_level_hints. */ /* &§ion_id..&&report_sequence. */ * 149 | FROM proxy_users 150 | ORDER BY client 151 | ]'; 152 | END; 153 | / 154 | @@&&9a_pre_one. 155 | 156 | 157 | 158 | /*****************************************************************************************/ 159 | 160 | DEF skip_lch = 'Y'; 161 | DEF skip_pch = 'Y'; 162 | 163 | /*****************************************************************************************/ 164 | 165 | 166 | -------------------------------------------------------------------------------- /sql/mig360_8_30_rman_cross_platform_transportable_tablespace_bkupsets_template_noncdb.sql: -------------------------------------------------------------------------------- 1 | 2 | PRO URL: https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/mig-rman-cross-plat-transp-tablespace.htm 3 | PRO NON-CDB 4 | 5 | DEF table_tb1 = '' 6 | COL table_tb1 NEW_V table_tb1 nopri 7 | SELECT /*+ result_cache */ CASE WHEN '&&is_cdb.' IN ('T','Y') THEN 'CDB_TABLESPACES' ELSE 'DBA_TABLESPACES' end table_tb1 8 | FROM dual; 9 | 10 | DEF table_tb2 = '' 11 | COL table_tb2 NEW_V table_tb2 nopri 12 | SELECT /*+ result_cache */ CASE WHEN '&&is_cdb.' IN ('T','Y') THEN 'CDB_DATA_FILES' ELSE 'DBA_DATA_FILES' end table_tb2 13 | FROM dual; 14 | 15 | DEF table_tb3 = '' 16 | COL table_tb3 NEW_V table_tb3 nopri 17 | SELECT /*+ result_cache */ CASE WHEN '&&is_cdb.' IN ('T','Y') THEN 'CDB_USERS' ELSE 'DBA_USERS' end table_tb3 18 | FROM dual; 19 | 20 | PRO 21 | PRO On Premises: 22 | PRO 23 | PRO mkdir &&dpdump_for_cloud. -p 24 | PRO 25 | PRO mkdir &&path_data_onprem. -p 26 | PRO 27 | PRO 28 | PRO sqlplus / as sysdba 29 | PRO 30 | PRO CREATE OR REPLACE DIRECTORY dp_for_cloud AS '&&dpdump_for_cloud.';; 31 | PRO 32 | PRO 33 | select 34 | 'ALTER TABLESPACE '||tablespace_name||' READ ONLY;' 35 | from &&table_tb1. s 36 | where 1=1 37 | AND s.contents NOT IN ('UNDO','TEMPORARY') 38 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') 39 | order by tablespace_name 40 | ; 41 | PRO 42 | PRO 43 | PRO rman target / 44 | PRO 45 | PRO ****You can use RMAN PARALLEL parameters or allocate multiple channels in a run block to speed up the process**** 46 | PRO ****If you are going to another platform, you can change "FOR TRANSPORT" to "TO PLATFORM". For example:"'TO PLATFORM 'Linux x86 64-bit'"**** 47 | PRO ****If you are on 12c, you can use "BACKUP FOR TRANSPORT ALLOW INCONSISTENT INCREMENTAL LEVEL 0/1" for incremental migration**** 48 | PRO 49 | select 'BACKUP FOR TRANSPORT FORMAT '||'''&&path_data_onprem./'||'%N_%f'||'.dbf'''||''||' TABLESPACE '||tablesp||' DATAPUMP FORMAT '||'''&&dpdump_for_cloud./'||'01'||'.dmp'||''''||';' 50 | from( 51 | select LISTAGG(tablespace_name, ',') 52 | WITHIN GROUP (ORDER BY tablespace_name) 53 | AS tablesp 54 | from dba_tablespaces s 55 | where 1=1 56 | AND s.contents NOT IN ('UNDO','TEMPORARY') 57 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') 58 | ) 59 | ; 60 | PRO 61 | PRO 62 | PRO sqlplus / as sysdba 63 | PRO 64 | select 65 | 'ALTER TABLESPACE '||tablespace_name||' READ WRITE;' 66 | from &&table_tb1. s 67 | where 1=1 68 | AND s.contents NOT IN ('UNDO','TEMPORARY') 69 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') 70 | order by tablespace_name 71 | ; 72 | PRO 73 | PRO 74 | PRO Cloud: 75 | PRO 76 | PRO mkdir &&dpdump_for_onprem. -p 77 | PRO 78 | PRO mkdir &&path_data_cloud. -p 79 | PRO 80 | PRO 81 | PRO On Premises: 82 | PRO 83 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 84 | '&&dpdump_for_cloud./* \'||chr(10)|| 85 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&dpdump_for_onprem./' 86 | from dual 87 | ; 88 | PRO 89 | select 'scp -i &&path_ssh_key. \'||chr(10)|| 90 | '&&path_data_onprem./* \' ||chr(10)|| 91 | '&&user_ssh.@&&ip_address_dbaas_vm.:&&path_data_cloud./' 92 | from dual 93 | ; 94 | PRO 95 | PRO 96 | PRO Cloud: 97 | PRO 98 | PRO 99 | PRO Adjust file permission on &&dpdump_for_onprem./ and &&path_data_cloud. 100 | PRO 101 | PRO 102 | PRO sqlplus / as sysdba 103 | PRO 104 | PRO CREATE OR REPLACE DIRECTORY dp_from_onprem AS '&&dpdump_for_onprem.';; 105 | PRO 106 | select 107 | '--create user '||username||' identified by '||username||';' 108 | from &&table_tb3. u 109 | where 1=1 110 | &&skip_10g_column.&&skip_11g_column.AND oracle_maintained = 'N' 111 | &&skip_12c_column.&&skip_18c_column.AND (username not in &&default_user_list_1. and username not in &&default_user_list_2.) 112 | order by username 113 | ; 114 | PRO 115 | PRO 116 | PRO rman target / 117 | PRO 118 | PRO ****You can use RMAN PARALLEL parameters or allocate multiple channels in a run block to speed up the process**** 119 | PRO 120 | select 'restore all foreign datafiles to new from backupset '||dataf||' '||' DUMP FILE DATAPUMP DESTINATION '||'''&&dpdump_for_onprem./'''|| 121 | ' FROM BACKUPSET '||'''&&dpdump_for_onprem./'||'01'||'.dmp'||''''||';' 122 | from( 123 | select LISTAGG('''&&path_data_cloud./'||tablespace_name||'_'||file_id||'.dbf''' , ' backupset ') 124 | WITHIN GROUP (ORDER BY '''&&path_data_cloud./'||tablespace_name||'_'||file_id||'.dbf''') 125 | AS dataf 126 | from dba_data_files s where 1=1 127 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') 128 | AND s.tablespace_name NOT IN (SELECT tablespace_name 129 | FROM dba_tablespaces 130 | WHERE contents IN ('UNDO','TEMPORARY')) 131 | ) 132 | ; 133 | PRO 134 | PRO 135 | PRO sqlplus / as sysdba 136 | PRO 137 | select 138 | 'ALTER TABLESPACE '||tablespace_name||' READ WRITE;' 139 | from &&table_tb1. s 140 | where 1=1 141 | AND s.contents NOT IN ('UNDO','TEMPORARY') 142 | AND s.tablespace_name NOT IN ('SYSTEM','SYSAUX','TEMP','TEMPORARY','RBS','ROLLBACK','ROLLBACKS','RBSEGS','USERS') 143 | order by tablespace_name 144 | ; 145 | PRO 146 | --------------------------------------------------------------------------------