如何在Oracle 9i中更改索引的表空间?

3

我是Oracle DBMS的新手,我的任务是更改索引表空间,例如从MYDB_DATA_SPACE更改为MYDB_INDX_SPACE

我已经在Google上搜索了可能的解决方案,并找到了以下SQL代码:

ALTER INDEX idx_city_state
REBUILD TABLESPACE sales_us;

我可以确认这是否符合要求吗?

1个回答

6

是的,那将重建在sales_us表空间中的idx_city_state索引。 您可以编写一些动态SQL来重建所有索引。

DECLARE
  l_sql_stmt VARCHAR2(1000);
BEGIN
  FOR i IN (SELECT owner,
                   index_name
              FROM all_indexes
             WHERE tablespace_name = 'MYDB_DATA_SPACE')
  LOOP
    l_sql_stmt := 'ALTER INDEX ' || i.owner || '.' || i.index_name ||
                  '  REBUILD TABLESPACE MYDB_INDX_SPACE';
    EXECUTE IMMEDIATE l_sql_stmt;
  END LOOP;
END;

又有一个问题,因为我没有修改索引表空间的经验,只是想知道一个占用2-3GB表空间的索引执行需要多长时间? - OCB
@ChinBoon - 它必须完全构建索引。它必须扫描表格,构建索引等等。这可能需要的时间与在您的硬件上首次创建索引所需的时间大致相同--可能至少需要几分钟。 - Justin Cave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接