Quantcast
Channel: Doyensys Allappsdba Blog..
Viewing all articles
Browse latest Browse all 1640

Moving objects from one tablespace to another

$
0
0
set serveroutput on
set lines 300
DECLARE
 V_CURRENT_TABLESPACE VARCHAR2(50);
 V_DEST_TABLESPACE VARCHAR2(50);
 V_SQL VARCHAR2(1000);
 V_OVERFLOW NUMBER := 0;
BEGIN
 V_CURRENT_TABLESPACE := '&current_tablespace';
 V_DEST_TABLESPACE := '&destination_tablespace';

 FOR LIST_OWNER IN (SELECT DISTINCT OWNER FROM DBA_SEGMENTS WHERE TABLESPACE_NAME=V_CURRENT_TABLESPACE)
 LOOP

 DBMS_OUTPUT.PUT_LINE('MOVING TABLES:');
 DBMS_OUTPUT.PUT_LINE('------------------');
 FOR LIST_TABLES IN (SELECT TABLE_NAME, IOT_NAME FROM DBA_TABLES WHERE OWNER=LIST_OWNER.OWNER AND TABLESPACE_NAME=V_CURRENT_TABLESPACE)
 LOOP
 IF  LIST_TABLES.IOT_NAME IS NOT NULL THEN
 DBMS_OUTPUT.PUT_LINE('MOVING INDEX ORGANIZED TABLE ' || LIST_TABLES.IOT_NAME || '...');
 V_SQL := 'ALTER TABLE "' || LIST_OWNER.OWNER  || '"."' || LIST_TABLES.IOT_NAME || '" MOVE TABLESPACE ' || V_DEST_TABLESPACE;
 EXECUTE IMMEDIATE V_SQL;
 -- check if an overflow exists
 DBMS_OUTPUT.PUT_LINE('MOVING INDEX ORGANIZED TABLE OVERFLOW ' || LIST_TABLES.IOT_NAME || '...');
 V_SQL := 'ALTER TABLE "' || LIST_OWNER.OWNER  || '"."' || LIST_TABLES.IOT_NAME || '" MOVE OVERFLOW TABLESPACE ' || V_DEST_TABLESPACE;
 EXECUTE IMMEDIATE V_SQL;
 ELSE
 DBMS_OUTPUT.PUT_LINE('MOVING TABLE ' || LIST_TABLES.TABLE_NAME || '...');
 V_SQL := 'ALTER TABLE "' || LIST_OWNER.OWNER  || '"."' || LIST_TABLES.TABLE_NAME || '" MOVE TABLESPACE ' || V_DEST_TABLESPACE;
 EXECUTE IMMEDIATE V_SQL;
 END IF;
 END LOOP;

 DBMS_OUTPUT.PUT_LINE('');
 DBMS_OUTPUT.PUT_LINE('MOVING LOBS:');
 DBMS_OUTPUT.PUT_LINE('------------------');

 FOR LIST_LOBS IN (SELECT TABLE_NAME, COLUMN_NAME FROM DBA_LOBS WHERE OWNER=LIST_OWNER.OWNER AND TABLESPACE_NAME=V_CURRENT_TABLESPACE)
 LOOP
 DBMS_OUTPUT.PUT_LINE('MOVING LOB FROM TABLE ' || LIST_LOBS.TABLE_NAME || ' TO TABLESPACE ' || V_DEST_TABLESPACE || '...');
 V_SQL := 'ALTER TABLE ' || LIST_OWNER.OWNER || '.' ||  LIST_LOBS.TABLE_NAME || ' MOVE LOB(' || LIST_LOBS.COLUMN_NAME || ') STORE AS (TABLESPACE ' ||  V_DEST_TABLESPACE || ')';
 EXECUTE IMMEDIATE V_SQL;
 END LOOP;

 DBMS_OUTPUT.PUT_LINE('');
 DBMS_OUTPUT.PUT_LINE('MOVING INDEXES:');
 DBMS_OUTPUT.PUT_LINE('------------------');

 FOR LIST_INDEXES IN (SELECT SEGMENT_NAME, SEGMENT_TYPE FROM DBA_SEGMENTS WHERE OWNER=LIST_OWNER.OWNER AND TABLESPACE_NAME=V_CURRENT_TABLESPACE AND SEGMENT_TYPE='INDEX')
 LOOP
 DBMS_OUTPUT.PUT_LINE('MOVING ' || LIST_INDEXES.SEGMENT_TYPE || '' || LIST_INDEXES.SEGMENT_NAME || '...');
 V_SQL := 'ALTER INDEX ' || LIST_OWNER.OWNER  || '."' || LIST_INDEXES.SEGMENT_NAME || '" REBUILD TABLESPACE ' || V_DEST_TABLESPACE;
 EXECUTE IMMEDIATE V_SQL;
 END LOOP;

 DBMS_OUTPUT.PUT_LINE('');

 END LOOP;
END;
/

Viewing all articles
Browse latest Browse all 1640

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>