1.為什么出現這樣的需求?
無論什么情況,現在我們一個用戶的數據存在于多個表空間里,現在想把數據統一放在一個表空間里
2.如何統一數據表同一個表空間,并保證以后同一個用戶的數據保存在一個表空間?
2.1索引遷移
命令:ALTER INDEX BMI_ACCOUNTS REBUILD TABLESPACE DEMO;
生成用戶中對所有索引遷移的命令:
SELECT 'ALTER INDEX '||INDEX_NAME||' REBUILD TABLESPACE DEMO;' FROM USER_INDEXES WHERE TABLESPACE_NAME='EXAMPLE';
2.2表遷移
命令:ALTER TABLE ACCOUNTS MOVE TABLESPACE DEMO
生成用戶中對所有表遷移的命令:
SELECT 'ALTER TABLE '||TABLE_NAME||' MOVE TABLESPACE DEMO;' FROM USER_TABLES WHERE TABLESPACE_NAME='EXAMPLE';
連同LOB字段一起遷移命令:
ALTER TABLE test MOVE TABLESPACE test LOB (DATAPOLLIOR) STORE AS (TABLESPACE test);
3.索引移動后可能出現索引無效的情況,這時需要重新建立索引
-- 請以 DBA 權限登錄,并執行
-- 將所有 UNUSABLE 狀態的 index 修復, rebuild 一下即可
declare
-- 指向所有 UNUSABLE 狀態的 index 的游標
cursor c is
select index_name, owner
from dba_indexes
where status='UNUSABLE';
owner dba_indexes.owner%type;
index_name dba_indexes.index_name%type;
begin
open c;
loop
fetch c into index_name, owner;
exit when c%notfound;
execute immediate 'alter index ' || owner || '.' || index_name || ' rebuild';
end loop;
close c;
end;