2026-03-12 20:23:15
This commit is contained in:
62
vg/sp_merge_split_partitions.sql
Normal file
62
vg/sp_merge_split_partitions.sql
Normal file
@@ -0,0 +1,62 @@
|
||||
@@header
|
||||
|
||||
set term off
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : To split default parition of statspack tables based on DBID
|
||||
* hold consolidated data from multiple databases.
|
||||
* Version : 9.2.x, 10.2.x
|
||||
* Usage : Login as schema holding the consolidated statspack repository
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 05-Aug-07 Vishal Gupta First Draft
|
||||
*/
|
||||
set term on
|
||||
|
||||
set verify off
|
||||
set serveroutput on
|
||||
DECLARE
|
||||
lv_sql VARCHAR2(4000) := null;
|
||||
BEGIN
|
||||
-- Identify tables LIST paritioned on DBID
|
||||
FOR t in (SELECT pt.table_name
|
||||
FROM user_part_key_columns pc, user_part_tables pt
|
||||
WHERE object_type = 'TABLE'
|
||||
AND column_name = 'DBID'
|
||||
AND pt.table_name = pc.name
|
||||
AND pt.PARTITIONING_TYPE = 'LIST')
|
||||
LOOP
|
||||
-- For each DBID value, create partition.
|
||||
FOR dbid in (SELECT DISTINCT dbid
|
||||
FROM stats$database_instance d
|
||||
WHERE NOT exists (SELECT 1
|
||||
FROM user_tab_partitions p
|
||||
WHERE p.table_name = t.table_name
|
||||
AND p.partition_name = 'P'||d.dbid
|
||||
)
|
||||
)
|
||||
LOOP
|
||||
lv_sql := 'alter table ' || t.table_name || ' split partition others values (' || dbid.dbid || ') '
|
||||
|| ' into (partition p'|| dbid.dbid || ' , partition others )';
|
||||
-- DBMS_OUTPUT.put_LINE(lv_sql);
|
||||
-- add partitions
|
||||
DBMS_OUTPUT.put_LINE('Adding parition P' || dbid.dbid || ' FOR ' || t.table_name );
|
||||
execute immediate lv_sql;
|
||||
null;
|
||||
END LOOP;
|
||||
END LOOP;
|
||||
|
||||
FOR i in ( SELECT 'alter index ' || index_name || ' rebuild partition ' || PARTITION_NAME lv_sql
|
||||
FROM user_ind_partitions
|
||||
WHERE status = 'UNUSABLE')
|
||||
LOOP
|
||||
execute immediate i.lv_sql;
|
||||
END LOOP;
|
||||
|
||||
END;
|
||||
/
|
||||
Reference in New Issue
Block a user