通過一段動態sql來完成,考慮表及索引,以及大物件和大物件索引的表空間移動
set serveroutput on size 10000000
declare
strtabsql varchar2(200);
stridxsql varchar2(200);
strlobsegsql varchar2(200);
strlobidxsql varchar2(200);
begin
for c_tabresult in (select owner,segment_name,bytes/1024/1024,segment_type
from dba_segments
where tablespace_name='&tsname'
and segment_type ='table'
and bytes/1024/1024<700
order by 3 desc) loop
strtabsql:= 'alter table ' || c_tabresult.owner || '.' || c_tabresult.segment_name || ' move tablespace &totsname';
dbms_output.put_line(strtabsql);
execute immediate strtabsql;
for c_idxresult in (
select owner,index_name
from dba_indexes
where table_name =c_tabresult.segment_name) loop
stridxsql:='alter index ' || c_idxresult.owner || '.' || c_idxresult.index_name || ' rebuild online tablespace &totsidx';
dbms_output.put_line(stridxsql);
execute immediate stridxsql;
end loop;
for c_lobsegresult in (
select a.owner,b.table_name,b.column_name,b.segment_name
from dba_segments a,dba_lobs b
where a.segment_name=b.segment_name
and a.tablespace_name='&tsname'
and b.table_name=c_tabresult.segment_name
and a.segment_type='lobsegment') loop
strlobsegsql:='alter table ' || c_lobsegresult.owner || '.' || c_lobsegresult.table_name || ' move tablespace &totsname lob(' || c_lobsegresult.column_name || ') store as ' || c_lobsegresult.segment_name || ' (tablespace &totsname)';
dbms_output.put_line(strlobsegsql);
execute immediate strlobsegsql;
end loop;
for c_lobidxresult in (
select a.owner,b.table_name,b.column_name,b.segment_name
from dba_segments a,dba_lobs b
where a.segment_name=b.segment_name
and a.tablespace_name='&tsname'
and b.table_name=c_tabresult.segment_name
and a.segment_type='lobindex') loop
strlobidxsql:='alter table ' || c_lobidxresult.owner || '.' || c_lobidxresult.table_name || ' move tablespace &totsname lob(' || c_lobidxresult.column_name || ') store as ' || c_lobidxresult.segment_name || ' (tablespace &totsidx)';
dbms_output.put_line(strlobidxsql);
execute immediate strlobidxsql;
end loop;
end loop;
end;
undefine tsname
undefine totsname
undefine totsidx
set serveroutput on size 10000000
注意,這裡需要設定 size 10000000,預設為1000,如果dbms_output輸出超過1000,就會報錯,所以,我增加了這個限制,避免了執行一段報錯。
Oracle表和索引移動表空間
來自 http blog.csdn.net m changgong 作者 張燕廣 關鍵字 oracle 表空間 移動表空間 對錶進行表空間移動操作 如果有一張表 accounts 存放在表空間 example 下現在要把表 accounts 移動到表空間 demo 下,該怎麼操作?操作語句如下 al...
Oracle表和索引移動表空間
關鍵字 oracle 表空間 移動表空間 對錶進行表空間移動操作 如果有一張表accounts存放在表空間example下 現在要把表accounts移動到表空間demo下,該怎麼操作?操作語句如下 alter table accounts move tablespace demo commit a...
表空間表使用者索引表空間
轉 案例一 建立表空間及使用者 第1步 建立臨時表空間 create temporary tablespace ivms86x0 temp 測試成功!註記 表空間名字不能重複,即便儲存的位置不一致,但是dbf檔案可以一致 tempfile i oracle oradata oracle11g ivm...