Here I present a simple query to use when we want to move the tables and indexes of several users at once.
To make it one by one:
ALTER TABLE xxxxxx MOVE TABLESPACE TEST;
ALTER INDEX xxxxxx REBUILD TABLESPACE TEST;
select ‘ALTER INDEX ‘ || OWNER || ‘.‘ || INDEX_NAME || ‘ REBUILD TABLESPACE ‘ || TABLESPACE_NAME || ‘;‘ from DBA_INDEXES WHERE OWNER IN (‘OWNER1‘,‘OWNER2‘);
select ‘ALTER TABLE ‘ || OWNER || ‘.‘ || TABLE_NAME || ‘ MOVE TABLESPACE ‘ || TABLESPACE_NAME || ‘;‘ from DBA_TABLES WHERE OWNER IN (‘OWNER1‘,‘OWNER2‘);
测试案例:
1.create test user,table,index
SQL> create user test identified by test; SQL> create table t(a int); SQL> create index my_index on t(A);
2.select object owned by user test
SQL> col object_name for a33 SQL> col owner for a33 SQL> col OBJECT_TYPE for a33 SQL> select owner,object_name,OBJECT_TYPE,status from dba_objects where owner=‘TEST‘; OWNER OBJECT_NAME OBJECT_TYPE STATUS ---------------------- ---------------------- --------------------------------- ------- TEST MY_INDEX INDEX VALID TEST T TABLE VALID
3.example for move table to another tablespace
SQL> select TABLE_NAME,TABLESPACE_NAME from dba_tables where owner=‘TEST‘; TABLE_NAME TABLESPACE_NAME -------------------------------------------------------------------------------------------------------------------------------- ------------------------------ T USERS SQL> alter table test.t move tablespace TEST; Table altered. SQL> select TABLE_NAME,TABLESPACE_NAME from dba_tables where owner=‘TEST‘; TABLE_NAME TABLESPACE_NAME -------------------------------------------------------------------------------------------------------------------------------- ------------------------------ T TEST
4.example for move index to another tablespace
SQL> set lines 222 SQL> col INDEX_NAME for a33 SQL> col TABLE_NAME for a33 SQL> select INDEX_NAME,TABLE_NAME,TABLESPACE_NAME from dba_indexes where OWNER=‘TEST‘; INDEX_NAME TABLE_NAME TABLESPACE_NAME --------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ------------------------------ MY_INDEX T USERS SQL> alter index test.MY_INDEX rebuild tablespace TEST; Index altered. SQL> select INDEX_NAME,TABLE_NAME,TABLESPACE_NAME from dba_indexes where OWNER=‘TEST‘; INDEX_NAME TABLE_NAME TABLESPACE_NAME --------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ------------------------------ MY_INDEX T TEST
5.transfer user default tablespace
SQL> set lines 222 SQL> col username for a33 SQL> col DEFAULT_TABLESPACE for a33 SQL> select username,DEFAULT_TABLESPACE from dba_users where USERNAME=‘TEST‘; SQL> select username,DEFAULT_TABLESPACE from dba_users where USERNAME=‘TEST‘; USERNAME DEFAULT_TABLESPACE -------------------------------------------------------------------------------------------------------------------------------- ------------------------------ TEST USERS SQL> alter user test default tablespace TEST; User altered. SQL> select username,DEFAULT_TABLESPACE from dba_users where USERNAME=‘TEST‘; USERNAME DEFAULT_TABLESPACE -------------------------------------------------------------------------------------------------------------------------------- ------------------------------ TEST TEST
change user default tablespace and move table,index to new tablespace
原文:https://www.cnblogs.com/43945616b/p/11579831.html