change user default tablespace and move table,index to new tablespace

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

猜你喜欢

转载自www.cnblogs.com/43945616b/p/11579831.html