2026-03-12 20:23:15
This commit is contained in:
212
csierra/gc_status_setup.sql
Normal file
212
csierra/gc_status_setup.sql
Normal file
@@ -0,0 +1,212 @@
|
||||
-- gc_status_setup.sql - Create gc_status Table and merge_gc_status Procedure
|
||||
DECLARE
|
||||
l_exists NUMBER;
|
||||
l_sql_statement VARCHAR2(32767) := q'[
|
||||
CREATE TABLE c##iod.gc_status (
|
||||
-- /* key: version, db_domain, db_name, pdb_name, gc_status */
|
||||
version DATE NOT NULL
|
||||
, db_domain VARCHAR2(64) NOT NULL
|
||||
, db_name VARCHAR2(9) NOT NULL
|
||||
, pdb_name VARCHAR2(30) NOT NULL
|
||||
, gc_status VARCHAR2(16) NOT NULL
|
||||
-- oci domains
|
||||
, host_name VARCHAR2(64) NOT NULL
|
||||
, realm_type VARCHAR2(1) NOT NULL
|
||||
, realm_type_order_by NUMBER NOT NULL
|
||||
, realm VARCHAR2(4) NOT NULL
|
||||
, realm_order_by NUMBER NOT NULL
|
||||
, region VARCHAR2(64) NOT NULL
|
||||
, region_acronym VARCHAR2(4) NOT NULL
|
||||
, region_order_by NUMBER NOT NULL
|
||||
, locale VARCHAR2(4) NOT NULL
|
||||
, locale_order_by NUMBER NOT NULL
|
||||
-- data attributes
|
||||
, tables NUMBER NOT NULL
|
||||
, num_rows NUMBER NOT NULL
|
||||
, blocks NUMBER NOT NULL
|
||||
)
|
||||
PARTITION BY RANGE (version)
|
||||
INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
|
||||
(
|
||||
PARTITION before_2016_01_01 VALUES LESS THAN (TO_DATE('2016-01-01', 'YYYY-MM-DD'))
|
||||
)
|
||||
ROW STORE COMPRESS ADVANCED
|
||||
TABLESPACE IOD
|
||||
]';
|
||||
l_sql_statement2 VARCHAR2(32767) := q'[
|
||||
CREATE UNIQUE INDEX c##iod.gc_status_pk
|
||||
ON c##iod.gc_status
|
||||
(version, db_domain, db_name, pdb_name, gc_status)
|
||||
LOCAL
|
||||
COMPRESS ADVANCED LOW
|
||||
TABLESPACE IOD
|
||||
]';
|
||||
l_sql_statement3 VARCHAR2(32767) := q'[
|
||||
ALTER TABLE c##iod.gc_status ADD PRIMARY KEY
|
||||
(version, db_domain, db_name, pdb_name, gc_status)
|
||||
USING INDEX c##iod.gc_status_pk
|
||||
]';
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER(TRIM('c##iod')) AND table_name = UPPER('gc_status');
|
||||
IF l_exists = 0 THEN
|
||||
EXECUTE IMMEDIATE l_sql_statement;
|
||||
END IF;
|
||||
SELECT COUNT(*) INTO l_exists FROM dba_indexes WHERE owner = UPPER(TRIM('c##iod')) AND index_name = UPPER('gc_status_pk');
|
||||
IF l_exists = 0 THEN
|
||||
EXECUTE IMMEDIATE l_sql_statement2;
|
||||
EXECUTE IMMEDIATE l_sql_statement3;
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE
|
||||
PROCEDURE c##iod.merge_gc_status (
|
||||
p_version IN VARCHAR2
|
||||
, p_db_domain IN VARCHAR2
|
||||
, p_db_name IN VARCHAR2
|
||||
, p_pdb_name IN VARCHAR2
|
||||
, p_host_name IN VARCHAR2
|
||||
, p_gc_status IN VARCHAR2
|
||||
, p_tables IN VARCHAR2
|
||||
, p_num_rows IN VARCHAR2
|
||||
, p_blocks IN VARCHAR2
|
||||
)
|
||||
IS
|
||||
r c##iod.gc_status%ROWTYPE;
|
||||
BEGIN
|
||||
IF p_num_rows IS NOT NULL AND p_blocks IS NOT NULL THEN
|
||||
r.version := TO_DATE(p_version, 'YYYY-MM-DD');
|
||||
r.db_domain := LOWER(p_db_domain);
|
||||
r.db_name := UPPER(p_db_name);
|
||||
r.pdb_name := p_pdb_name;
|
||||
r.host_name := p_host_name;
|
||||
r.realm_type := c##iod.IOD_META_AUX.get_realm_type(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.realm_type_order_by := c##iod.IOD_META_AUX.get_realm_type_order_by(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.realm := c##iod.IOD_META_AUX.get_realm(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.realm_order_by := c##iod.IOD_META_AUX.get_realm_order_by(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.region := c##iod.IOD_META_AUX.get_region(p_host_name);
|
||||
r.region_acronym := c##iod.IOD_META_AUX.get_region_acronym(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.region_order_by := c##iod.IOD_META_AUX.get_region_order_by(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.locale := c##iod.IOD_META_AUX.get_locale(LOWER(p_db_domain));
|
||||
r.locale_order_by := c##iod.IOD_META_AUX.get_locale_order_by(LOWER(p_db_domain));
|
||||
r.gc_status := p_gc_status;
|
||||
r.tables := p_tables;
|
||||
r.num_rows := p_num_rows;
|
||||
r.blocks := p_blocks;
|
||||
--
|
||||
DELETE c##iod.gc_status WHERE version = r.version AND db_domain = r.db_domain AND db_name = r.db_name AND pdb_name = r.pdb_name AND gc_status = r.gc_status;
|
||||
INSERT INTO c##iod.gc_status VALUES r;
|
||||
COMMIT;
|
||||
END IF;
|
||||
END merge_gc_status;
|
||||
/
|
||||
SHOW ERRORS;
|
||||
|
||||
/************************************************************************************************/
|
||||
|
||||
-- gc_status_setup.sql - Create gc_status Table and merge_gc_status Procedure
|
||||
DECLARE
|
||||
l_exists NUMBER;
|
||||
l_sql_statement VARCHAR2(32767) := q'[
|
||||
CREATE TABLE c##iod.gc_gt_20k (
|
||||
-- /* key: version, db_domain, db_name, pdb_name, owner, table_name */
|
||||
version DATE NOT NULL
|
||||
, db_domain VARCHAR2(64) NOT NULL
|
||||
, db_name VARCHAR2(9) NOT NULL
|
||||
, pdb_name VARCHAR2(30) NOT NULL
|
||||
, owner VARCHAR2(128) NOT NULL
|
||||
, table_name VARCHAR2(128) NOT NULL
|
||||
-- oci domains
|
||||
, host_name VARCHAR2(64) NOT NULL
|
||||
, realm_type VARCHAR2(1) NOT NULL
|
||||
, realm_type_order_by NUMBER NOT NULL
|
||||
, realm VARCHAR2(4) NOT NULL
|
||||
, realm_order_by NUMBER NOT NULL
|
||||
, region VARCHAR2(64) NOT NULL
|
||||
, region_acronym VARCHAR2(4) NOT NULL
|
||||
, region_order_by NUMBER NOT NULL
|
||||
, locale VARCHAR2(4) NOT NULL
|
||||
, locale_order_by NUMBER NOT NULL
|
||||
-- data attributes
|
||||
, gc_status VARCHAR2(16) NOT NULL
|
||||
, num_rows NUMBER NOT NULL
|
||||
, blocks NUMBER NOT NULL
|
||||
)
|
||||
PARTITION BY RANGE (version)
|
||||
INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
|
||||
(
|
||||
PARTITION before_2016_01_01 VALUES LESS THAN (TO_DATE('2016-01-01', 'YYYY-MM-DD'))
|
||||
)
|
||||
ROW STORE COMPRESS ADVANCED
|
||||
TABLESPACE IOD
|
||||
]';
|
||||
l_sql_statement2 VARCHAR2(32767) := q'[
|
||||
CREATE UNIQUE INDEX c##iod.gc_gt_20k_pk
|
||||
ON c##iod.gc_gt_20k
|
||||
(version, db_domain, db_name, pdb_name, owner, table_name)
|
||||
LOCAL
|
||||
COMPRESS ADVANCED LOW
|
||||
TABLESPACE IOD
|
||||
]';
|
||||
l_sql_statement3 VARCHAR2(32767) := q'[
|
||||
ALTER TABLE c##iod.gc_gt_20k ADD PRIMARY KEY
|
||||
(version, db_domain, db_name, pdb_name, owner, table_name)
|
||||
USING INDEX c##iod.gc_gt_20k_pk
|
||||
]';
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER(TRIM('c##iod')) AND table_name = UPPER('gc_gt_20k');
|
||||
IF l_exists = 0 THEN
|
||||
EXECUTE IMMEDIATE l_sql_statement;
|
||||
END IF;
|
||||
SELECT COUNT(*) INTO l_exists FROM dba_indexes WHERE owner = UPPER(TRIM('c##iod')) AND index_name = UPPER('gc_gt_20k_pk');
|
||||
IF l_exists = 0 THEN
|
||||
EXECUTE IMMEDIATE l_sql_statement2;
|
||||
EXECUTE IMMEDIATE l_sql_statement3;
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE
|
||||
PROCEDURE c##iod.merge_gt_20k (
|
||||
p_version IN VARCHAR2
|
||||
, p_db_domain IN VARCHAR2
|
||||
, p_db_name IN VARCHAR2
|
||||
, p_pdb_name IN VARCHAR2
|
||||
, p_host_name IN VARCHAR2
|
||||
, p_gc_status IN VARCHAR2
|
||||
, p_owner IN VARCHAR2
|
||||
, p_table_name IN VARCHAR2
|
||||
, p_num_rows IN VARCHAR2
|
||||
, p_blocks IN VARCHAR2
|
||||
)
|
||||
IS
|
||||
r c##iod.gc_gt_20k%ROWTYPE;
|
||||
BEGIN
|
||||
IF p_num_rows IS NOT NULL AND p_blocks IS NOT NULL THEN
|
||||
r.version := TO_DATE(p_version, 'YYYY-MM-DD');
|
||||
r.db_domain := LOWER(p_db_domain);
|
||||
r.db_name := UPPER(p_db_name);
|
||||
r.pdb_name := p_pdb_name;
|
||||
r.host_name := p_host_name;
|
||||
r.realm_type := c##iod.IOD_META_AUX.get_realm_type(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.realm_type_order_by := c##iod.IOD_META_AUX.get_realm_type_order_by(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.realm := c##iod.IOD_META_AUX.get_realm(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.realm_order_by := c##iod.IOD_META_AUX.get_realm_order_by(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.region := c##iod.IOD_META_AUX.get_region(p_host_name);
|
||||
r.region_acronym := c##iod.IOD_META_AUX.get_region_acronym(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.region_order_by := c##iod.IOD_META_AUX.get_region_order_by(c##iod.IOD_META_AUX.get_region(p_host_name));
|
||||
r.locale := c##iod.IOD_META_AUX.get_locale(LOWER(p_db_domain));
|
||||
r.locale_order_by := c##iod.IOD_META_AUX.get_locale_order_by(LOWER(p_db_domain));
|
||||
r.gc_status := p_gc_status;
|
||||
r.owner := p_owner;
|
||||
r.table_name := p_table_name;
|
||||
r.num_rows := p_num_rows;
|
||||
r.blocks := p_blocks;
|
||||
--
|
||||
DELETE c##iod.gc_gt_20k WHERE version = r.version AND db_domain = r.db_domain AND db_name = r.db_name AND pdb_name = r.pdb_name AND owner = r.owner AND table_name = r.table_name;
|
||||
INSERT INTO c##iod.gc_gt_20k VALUES r;
|
||||
COMMIT;
|
||||
END IF;
|
||||
END merge_gt_20k;
|
||||
/
|
||||
SHOW ERRORS;
|
||||
Reference in New Issue
Block a user