SET SERVEROUTPUT ON;
DECLARE
v_i_have_backups BOOLEAN := FALSE;
v_fallback_ts VARCHAR2(30);
BEGIN
DBMS_OUTPUT.PUT_LINE('=== STEP 1: PARALLEL INIT & SAFETY ===');
IF NOT v_i_have_backups THEN
RAISE_APPLICATION_ERROR(-20000, 'STOP! You must edit Script 01 and set v_i_have_backups := TRUE.');
END IF;
BEGIN
SELECT property_value INTO v_fallback_ts
FROM database_properties WHERE property_name = 'DEFAULT_PERMANENT_TABLESPACE';
EXCEPTION WHEN OTHERS THEN v_fallback_ts := 'USERS'; END;
BEGIN EXECUTE IMMEDIATE 'DROP TABLE tablespace_control PURGE'; EXCEPTION WHEN OTHERS THEN NULL; END;
BEGIN EXECUTE IMMEDIATE 'DROP TABLE tablespace_log PURGE'; EXCEPTION WHEN OTHERS THEN NULL; END;
BEGIN EXECUTE IMMEDIATE 'DROP TABLE tablespace_config PURGE'; EXCEPTION WHEN OTHERS THEN NULL; END;
EXECUTE IMMEDIATE 'CREATE TABLE tablespace_config (config_key VARCHAR2(50) PRIMARY KEY, config_value VARCHAR2(500))';
EXECUTE IMMEDIATE 'INSERT INTO tablespace_config VALUES (''FALLBACK_TS'', :1)' USING v_fallback_ts;
EXECUTE IMMEDIATE q'[
CREATE TABLE tablespace_control (
item_name VARCHAR2(50) PRIMARY KEY,
item_type VARCHAR2(20),
batch_id NUMBER,
status VARCHAR2(20) DEFAULT 'PENDING',
error_msg VARCHAR2(4000),
CONSTRAINT chk_safe_items CHECK (
UPPER(item_name) NOT IN ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','USERS')
)
)
]';
EXECUTE IMMEDIATE q'[
CREATE TABLE tablespace_log (
log_id NUMBER GENERATED ALWAYS AS IDENTITY,
log_time TIMESTAMP DEFAULT SYSTIMESTAMP,
item_name VARCHAR2(50),
action VARCHAR2(30),
status VARCHAR2(20),
message VARCHAR2(4000)
)
]';
INSERT ALL
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('TS_REVANTH_CORE', 'TABLESPACE', 1)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('TS_REVANTH_INDEX', 'TABLESPACE', 2)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('TS_REVANTH_AUDIT', 'TABLESPACE', 3)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('TS_REVANTH_HISTORY', 'TABLESPACE', 4)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('TS_REVANTH_REPORTING', 'TABLESPACE', 5)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('TS_REVANTH_ARCHIVE', 'TABLESPACE', 6)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('TS_REVANTH_LARGE', 'TABLESPACE', 7)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('TS_REVANTH_RESERVE', 'TABLESPACE', 8)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('SCHEMA_APP1', 'SCHEMA', 101)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('SCHEMA_APP2', 'SCHEMA', 102)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('SCHEMA_DATA', 'SCHEMA', 103)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('SCHEMA_REPORT', 'SCHEMA', 104)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('SCHEMA_AUDIT', 'SCHEMA', 105)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('SCHEMA_INTEGRATION', 'SCHEMA', 106)
INTO tablespace_control (item_name, item_type, batch_id) VALUES ('SCHEMA_ARCHIVE', 'SCHEMA', 107)
SELECT * FROM dual;
COMMIT;
FOR r IN (SELECT item_name FROM tablespace_control WHERE item_type = 'SCHEMA') LOOP
BEGIN
EXECUTE IMMEDIATE 'ALTER USER ' || r.item_name || ' ACCOUNT LOCK';
FOR s IN (SELECT sid, serial# FROM v$session WHERE username = r.item_name) LOOP
EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || s.sid || ',' || s.serial# || ''' IMMEDIATE';
END LOOP;
EXCEPTION WHEN OTHERS THEN NULL; END;
END LOOP;
DBMS_OUTPUT.PUT_LINE('>> Parallel Batches Configured. Ready to Drop.');
END;
/