背景:
公司要进行表的move,move完分区表以后查看user_part_tables里面的default_tablespace还是原来的表空间,重新做了实验还是如此,哪位大神能够解释一下
实验:
查看用户scott的默认表空间为scott1
SQL> select username,default_tablespace,temporary_tablespace from dba_users where username='SCOTT';
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
SCOTT SCOTT1 TEMP
创建分区表
SQL> create table table_partition(
2 col1 number,
3 col2 varchar2(10)
4 )
5 partition by range(col1)(
6 partition p01 values less than (10),
7 partition p02 values less than (20),
8 partition pdefault values less than (maxvalue)
9 );
Table created.
查看分区表,看到默认表空间是scott1
SQL> select TABLE_NAME,STATUS,DEF_TABLESPACE_NAME,STATUS from user_part_tables;
TABLE_NAME STATUS DEF_TABLESPACE_NAME STATUS
------------------------------ -------- ------------------------------ --------
TABLE_PARTITION VALID SCOTT1 VALID
插入数据
SQL> insert into table_partition values (1,'test');
1 row created.
SQL> insert into table_partition values (2,'test');
1 row created.
SQL> insert into table_partition values (15,'test');
1 row created.
创建local索引,并查看索引状态
SQL> create index idx_table_partition_col1_local on table_partition(col1) local;
Index created.
SQL> select INDEX_NAME,PARTITION_NAME,STATUS,TABLESPACE_NAME from user_ind_partitions;
INDEX_NAME PARTITION_NAME STATUS TABLESPACE_NAME
------------------------------ ------------------------------ -------- ------------------------------
IDX_TABLE_PARTITION_COL1_LOCAL P01 USABLE SCOTT1
IDX_TABLE_PARTITION_COL1_LOCAL P02 USABLE SCOTT1
IDX_TABLE_PARTITION_COL1_LOCAL PDEFAULT USABLE SCOTT1
move 分区表并查询local索引状态为unusable
SQL> alter table table_partition move partition p01 tablespace scott2;
Table altered.
SQL> select INDEX_NAME,PARTITION_NAME,STATUS,TABLESPACE_NAME from user_ind_partitions;
INDEX_NAME PARTITION_NAME STATUS TABLESPACE_NAME
------------------------------ ------------------------------ -------- ------------------------------
IDX_TABLE_PARTITION_COL1_LOCAL P02 USABLE SCOTT1
IDX_TABLE_PARTITION_COL1_LOCAL PDEFAULT USABLE SCOTT1
IDX_TABLE_PARTITION_COL1_LOCAL P01 UNUSABLE SCOTT1
加上update参数,索引的表空间还是scott1
SQL> alter table table_partition move partition p01 tablespace scott2 update indexes;
Table altered.
SQL> select INDEX_NAME,PARTITION_NAME,STATUS,TABLESPACE_NAME from user_ind_partitions;
INDEX_NAME PARTITION_NAME STATUS TABLESPACE_NAME
------------------------------ ------------------------------ -------- ------------------------------
IDX_TABLE_PARTITION_COL1_LOCAL P01 USABLE SCOTT1
IDX_TABLE_PARTITION_COL1_LOCAL P02 USABLE SCOTT1
IDX_TABLE_PARTITION_COL1_LOCAL PDEFAULT USABLE SCOTT1
依次进行move,并查询索引状态,分区的所在表空间
SQL> alter table table_partition move partition p02 tablespace scott2 update indexes;
Table altered.
SQL> alter table table_partition move partition PDEFAULT tablespace scott2 update indexes;
Table altered.
SQL> select INDEX_NAME,PARTITION_NAME,STATUS,TABLESPACE_NAME from user_ind_partitions;
INDEX_NAME PARTITION_NAME STATUS TABLESPACE_NAME
------------------------------ ------------------------------ -------- ------------------------------
IDX_TABLE_PARTITION_COL1_LOCAL P01 USABLE SCOTT1
IDX_TABLE_PARTITION_COL1_LOCAL P02 USABLE SCOTT1
IDX_TABLE_PARTITION_COL1_LOCAL PDEFAULT USABLE SCOTT1
SQL> select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions;
TABLE_NAME PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
TABLE_PARTITION P01 SCOTT2
TABLE_PARTITION P02 SCOTT2
TABLE_PARTITION PDEFAULT SCOTT2
再次查询分区表的默认表空间还是
SCOTT1
SQL> select TABLE_NAME,STATUS,DEF_TABLESPACE_NAME,STATUS from user_part_tables;
TABLE_NAME STATUS DEF_TABLESPACE_NAME STATUS
------------------------------ -------- ------------------------------ --------
TABLE_PARTITION VALID SCOTT1 VALID
对此表示很费解,哪位大神能解释下
后续操作,将索引也move到表空间scott2,删除表空间scott1,查看数据没有丢失
SQL> alter index IDX_TABLE_PARTITION_COL1_LOCAL rebuild partition p01 online tablespace scott2;
Index altered.
SQL> alter index IDX_TABLE_PARTITION_COL1_LOCAL rebuild partition p02 online tablespace scott2;
Index altered.
SQL> alter index IDX_TABLE_PARTITION_COL1_LOCAL rebuild partition PDEFAULT online tablespace scott2;
Index altered.
SQL> select INDEX_NAME,PARTITION_NAME,STATUS,TABLESPACE_NAME from user_ind_partitions;
INDEX_NAME PARTITION_NAME STATUS TABLESPACE_NAME
------------------------------ ------------------------------ -------- ------------------------------
IDX_TABLE_PARTITION_COL1_LOCAL P02 USABLE SCOTT2
IDX_TABLE_PARTITION_COL1_LOCAL P01 USABLE SCOTT2
IDX_TABLE_PARTITION_COL1_LOCAL PDEFAULT USABLE SCOTT2
SQL> select * from table_partition;
COL1 COL2
---------- ----------
1 test
2 test
15 test