I
It is a common thing to store indexes in different tablespace. In the past it was mainly for performance reasons, because you put this tablespace to faster drives. But there are more reasons and you can find them elsewhere.
Overview of indexes and tablespaces.
SELECT
i.table_name,
t.tablespace_name AS table_tablespace,
i.index_name,
i.index_type,
i.tablespace_name AS index_tablespace,
i.status
FROM user_indexes i
JOIN user_tables t
ON t.table_name = i.table_name
WHERE i.index_type != 'LOB'
ORDER BY i.table_name, i.index_name;
Move indexes to new tablespace:
DECLARE
in_target_tablespace CONSTANT VARCHAR2(30) := 'INDEXES';
BEGIN
FOR c IN (
SELECT i.table_name, i.index_name
FROM user_indexes i
WHERE i.index_type LIKE '%NORMAL%'
AND i.tablespace_name != in_target_tablespace
) LOOP
DBMS_OUTPUT.PUT_LINE(RPAD(c.table_name, 30) || ' -> ' || c.index_name);
EXECUTE IMMEDIATE
'ALTER INDEX ' || c.index_name ||
' REBUILD TABLESPACE ' || in_target_tablespace;
END LOOP;
END;
/
Comments
Post a Comment