批量移動表及索引到其他表空間

2021-10-23 07:41:30 字數 2611 閱讀 2602

通過一段動態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...