scripts/collector/oracle/sql/extracts/lobsizing.sql (181 lines of code) (raw):
--
-- Copyright 2024 Google LLC
--
-- Licensed under the Apache License, Version 2.0 (the "License").
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- https://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
column c_con_id new_value v_c_con_id noprint
column t_con_id new_value v_t_con_id noprint
column l_con_id new_value v_l_con_id noprint
column tp_con_id new_value v_tp_con_id noprint
column tsp_con_id new_value v_tsp_con_id noprint
column lp_con_id new_value v_lp_con_id noprint
column lsp_con_id new_value v_lsp_con_id noprint
column s_con_id new_value v_s_con_id noprint
column t_segment_created new_value v_t_segment_created
column tp_segment_created new_value v_tp_segment_created
column lp_segment_created new_value v_lp_segment_created
column tsp_segment_created new_value v_tsp_segment_created
column lsp_segment_created new_value v_lsp_segment_created
SELECT CASE WHEN &v_is_container != 0 THEN 'c.con_id' ELSE '''N/A''' END as c_con_id,
CASE WHEN &v_is_container != 0 THEN 't.con_id' ELSE '''N/A''' END as t_con_id,
CASE WHEN &v_is_container != 0 THEN 'l.con_id' ELSE '''N/A''' END as l_con_id,
CASE WHEN &v_is_container != 0 THEN 'tp.con_id' ELSE '''N/A''' END as tp_con_id,
CASE WHEN &v_is_container != 0 THEN 'tsp.con_id' ELSE '''N/A''' END as tsp_con_id,
CASE WHEN &v_is_container != 0 THEN 'lp.con_id' ELSE '''N/A''' END as lp_con_id,
CASE WHEN &v_is_container != 0 THEN 'lsp.con_id' ELSE '''N/A''' END as lsp_con_id,
CASE WHEN &v_is_container != 0 THEN 's.con_id' ELSE '''N/A''' END as s_con_id
FROM DUAL;
SELECT CASE WHEN '&v_dbversion' LIKE '9%' OR '&v_dbversion' LIKE '10%' OR '&v_dbversion' = '111' THEN '''N/A''' ELSE 't.segment_created' END as t_segment_created,
CASE WHEN '&v_dbversion' LIKE '9%' OR '&v_dbversion' LIKE '10%' OR '&v_dbversion' = '111' THEN '''N/A''' ELSE 'tp.segment_created' END as tp_segment_created,
CASE WHEN '&v_dbversion' LIKE '9%' OR '&v_dbversion' LIKE '10%' OR '&v_dbversion' = '111' THEN '''N/A''' ELSE 'lp.segment_created' END as lp_segment_created,
CASE WHEN '&v_dbversion' LIKE '9%' OR '&v_dbversion' LIKE '10%' OR '&v_dbversion' = '111' THEN '''N/A''' ELSE 'tsp.segment_created' END as tsp_segment_created,
CASE WHEN '&v_dbversion' LIKE '9%' OR '&v_dbversion' LIKE '10%' OR '&v_dbversion' = '111' THEN '''N/A''' ELSE 'lsp.segment_created' END as lsp_segment_created
FROM DUAL;
COLUMN PARTITIONED FORMAT A40
COLUMN COLUMN_NAME FORMAT A40
COLUMN DATA_TYPE FORMAT A40
COLUMN TABLE_PARTITION_NAME FORMAT A40
COLUMN TABLE_PARTITION_SEG_CREATED FORMAT A40
COLUMN LOB_PARTITION_NAME FORMAT A40
COLUMN LOB_PARTITION_SEG_CREATED FORMAT A40
COLUMN TABLE_SUBPARTITION_NAME FORMAT A40
COLUMN TABLE_SUBPARTITION_CREATED FORMAT A40
COLUMN LOB_SUBPARTITION_NAME FORMAT A40
COLUMN LOB_SUBPARTITION_SEG_CREATED FORMAT A40
COLUMN LOB_SEG_NAME FORMAT A40
COLUMN SEG_NAME FORMAT A40
COLUMN SEG_PARTITION_NAME FORMAT A40
COLUMN LOB_COMPRESSION FORMAT A40
COLUMN LOB_PARTITION_COMPRESSION FORMAT A40
COLUMN LOB_SUBPARTITION_COMPRESSION FORMAT A40
COLUMN LOB_DEDUPLICATION FORMAT A40
COLUMN LOB_PARTITION_DEDUPLICATION FORMAT A40
COLUMN LOB_SUBPARTITION_DEDUPLICATION FORMAT A40
spool &outputdir/opdb__lobsizing__&v_tag
prompt PKEY|CON_ID|OWNER|TABLE_NAME|TABLE_NUM_ROWS|TAB|PARTITIONED|COLUMN_NAME|DATA_TYPE|TABLE_PARTITION_NAME|TABLE_PARTITION_SEG_CREATED|PARTITION_NUM_ROWS|LOB_PARTITION_NAME|LOB_PARTITION_SEG_CREATED|SUBPARTITION_COUNT|TABLE_SUBPARTITION_NAME|TABLE_SUBPARTITION_CREATED|SUBPARTITION_NUM_ROWS|LOB_SUBPARTITION_NAME|LOB_SUBPARTITION_SEG_CREATED|LOB_SEG_NAME|SEG_NAME|SEG_PARTITION_NAME|LOB_COMPRESSION|LOB_PARTITION_COMPRESSION|LOB_SUBPARTITION_COMPRESSION|LOB_DEDUPLICATION|LOB_PARTITION_DEDUPLICATION|LOB_SUBPARTITION_DEDUPLICATION|SEG_BYTES|TABLE_AVG_LOB_BYTES|PARTITION_AVG_LOB_BYTES|SUBPARTITION_AVG_LOB_BYTES|DMA_SOURCE_ID|DMA_MANUAL_ID
WITH lobdata AS (
SELECT
&v_c_con_id AS CON_ID,
c.owner,
c.table_name,
t.num_rows AS table_num_rows,
&v_t_segment_created AS table_seg_created,
t.partitioned,
c.column_name,
c.data_type,
tp.partition_name AS table_partition_name,
&v_tp_segment_created AS table_partition_seg_created,
tp.num_rows AS partition_num_rows,
lp.lob_partition_name AS lob_partition_name,
&v_lp_segment_created AS lob_partition_seg_created,
tp.subpartition_count,
tsp.subpartition_name AS table_subpartition_name,
&v_tsp_segment_created AS table_subpartition_created,
tsp.num_rows AS subpartition_num_rows,
lsp.lob_subpartition_name AS lob_subpartition_name,
&v_lsp_segment_created AS lob_subpartition_seg_created,
l.segment_name AS lob_seg_name,
s.segment_name AS seg_name,
s.partition_name AS seg_partition_name,
s.bytes AS seg_bytes,
&v_lob_compression_col AS lob_compression,
&v_lob_part_compression_col AS lob_partition_compression,
&v_lob_subpart_compression_col AS lob_subpartition_compression,
&v_lob_dedup_col AS lob_deduplication,
&v_lob_part_dedup_col AS lob_partition_deduplication,
&v_lob_subpart_dedup_col AS lob_subpartition_deduplication,
CASE WHEN nvl(t.num_rows, 0) > 0 THEN round(s.bytes / t.num_rows) ELSE 0 END AS table_avg_lob_bytes,
CASE WHEN nvl(tp.num_rows, 0) > 0 THEN round(s.bytes / tp.num_rows) ELSE 0 END AS partition_avg_lob_bytes,
CASE WHEN nvl(tsp.num_rows, 0) > 0 THEN round(s.bytes / tsp.num_rows) ELSE 0 END AS subpartition_avg_lob_bytes
FROM
&v_tblprefix._tab_cols c
JOIN &v_tblprefix._tables t ON &v_t_con_id = &v_c_con_id
AND t.owner = c.owner
AND t.table_name = c.table_name
JOIN &v_tblprefix._lobs l ON &v_l_con_id = &v_c_con_id
AND l.owner = c.owner
AND l.table_name = c.table_name
AND l.column_name = c.column_name
LEFT JOIN &v_tblprefix._tab_partitions tp ON &v_tp_con_id = &v_t_con_id
AND tp.table_owner = t.owner
AND tp.table_name = t.table_name
LEFT JOIN &v_tblprefix._tab_subpartitions tsp ON &v_tsp_con_id = &v_tp_con_id
AND tsp.table_owner = tp.table_owner
AND tsp.table_name = tp.table_name
AND tsp.partition_name = tp.partition_name
LEFT JOIN &v_tblprefix._lob_partitions lp ON &v_lp_con_id = &v_tp_con_id
AND lp.table_owner = tp.table_owner
AND lp.table_name = tp.table_name
AND lp.lob_name = l.segment_name
AND lp.partition_name = tp.partition_name
LEFT JOIN &v_tblprefix._lob_subpartitions lsp ON &v_lsp_con_id = &v_lp_con_id
AND lsp.table_owner = lp.table_owner
AND lsp.lob_name = lp.lob_name
AND lsp.lob_partition_name = lp.lob_partition_name
AND lsp.subpartition_name = tsp.subpartition_name
LEFT JOIN &v_tblprefix._segments s ON &v_s_con_id = &v_l_con_id
AND s.owner = l.owner
AND s.segment_name = l.segment_name
AND ( nvl(s.partition_name, '-') = (
CASE WHEN lsp.subpartition_name IS NOT NULL THEN lsp.lob_subpartition_name
WHEN lp.partition_name IS NOT NULL THEN lp.lob_partition_name
ELSE '-'
END)
)
WHERE
c.data_type LIKE '%LOB%'
AND c.owner NOT IN (
@&EXTRACTSDIR/exclude_schemas.sql
)
)
SELECT :v_pkey AS pkey,
con_id,
owner,
table_name,
table_num_rows,
table_seg_created,
partitioned,
column_name,
data_type,
table_partition_name,
table_partition_seg_created,
partition_num_rows,
lob_partition_name,
lob_partition_seg_created,
subpartition_count,
table_subpartition_name,
table_subpartition_created,
subpartition_num_rows,
lob_subpartition_name,
lob_subpartition_seg_created,
lob_seg_name,
seg_name,
seg_partition_name,
LOB_COMPRESSION,
LOB_PARTITION_COMPRESSION,
LOB_SUBPARTITION_COMPRESSION,
LOB_DEDUPLICATION,
LOB_PARTITION_DEDUPLICATION,
LOB_SUBPARTITION_DEDUPLICATION,
seg_bytes,
table_avg_lob_bytes,
partition_avg_lob_bytes,
subpartition_avg_lob_bytes,
:v_dma_source_id AS DMA_SOURCE_ID, :v_manual_unique_id AS DMA_MANUAL_ID
FROM lobdata;
spool off
COLUMN PARTITIONED
COLUMN COLUMN_NAME
COLUMN DATA_TYPE
COLUMN TABLE_PARTITION_NAME
COLUMN TABLE_PARTITION_SEG_CREATED
COLUMN LOB_PARTITION_NAME
COLUMN LOB_PARTITION_SEG_CREATED
COLUMN TABLE_SUBPARTITION_NAME
COLUMN TABLE_SUBPARTITION_CREATED
COLUMN LOB_SUBPARTITION_NAME
COLUMN LOB_SUBPARTITION_SEG_CREATED
COLUMN LOB_SEG_NAME
COLUMN SEG_NAME
COLUMN SEG_PARTITION_NAME
COLUMN LOB_COMPRESSION
COLUMN LOB_PARTITION_COMPRESSION
COLUMN LOB_SUBPARTITION_COMPRESSION
COLUMN LOB_DEDUPLICATION
COLUMN LOB_PARTITION_DEDUPLICATION
COLUMN LOB_SUBPARTITION_DEDUPLICATION