移动一张表实际上是动后一个重组过程,数据库会将原来的表移必须数据复制到新的地方。但是动后如果你发现这个表在移动后性能下降了,可能是表移必须你的索引没有重建。本文将指导您找到依赖索引并重建它们。动后
SQL> select tablespace_name from dba_tables where owner = 'HR' and table_name = 'EMPLOYEES';
TABLESPACE_NAME
------------------------------
EXAMPLE
SQL> alter table hr.employees move tablespace users;
Table altered.
SQL> select tablespace_name from dba_tables where owner = 'HR' and table_name = 'EMPLOYEES';
TABLESPACE_NAME
------------------------------
USERS
SQL> column index_name format a30;
SQL> column tablespace_name format a30;
SQL> column status format a10;
SQL> select index_name, tablespace_name, status from dba_indexes where owner = 'HR' and table_name = 'EMPLOYEES';
INDEX_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------
EMP_JOB_IX EXAMPLE UNUSABLE
EMP_DEPARTMENT_IX EXAMPLE UNUSABLE
EMP_MANAGER_IX EXAMPLE UNUSABLE
EMP_NAME_IX EXAMPLE UNUSABLE
EMP_EMAIL_UK EXAMPLE UNUSABLE
EMP_EMP_ID_PK EXAMPLE UNUSABLE
6 rows selected.
如您所见,所有依赖索引都是动后UNUSABLE。这意味着,表移必须数据库不会自动重建它们。动后你必须自己做。表移必须
SQL> select 'alter index ' || owner || '.' ||index_name || ' rebuild tablespace users;' as SQL_TO_BE_EXECUTED from dba_indexes where owner = 'HR' and table_name = 'EMPLOYEES';
SQL_TO_BE_EXECUTED
--------------------------------------------------------------------------------
alter index EMP_JOB_IX rebuild tablespace users;
alter index EMP_DEPARTMENT_IX rebuild tablespace users;
alter index EMP_MANAGER_IX rebuild tablespace users;
alter index EMP_NAME_IX rebuild tablespace users;
alter index EMP_EMAIL_UK rebuild tablespace users;
alter index EMP_EMP_ID_PK rebuild tablespace users;
6 rows selected.
或者您可以重建原始表空间的索引。
SQL> select 'alter index ' || owner || '.' ||index_name || ' rebuild tablespace ' || tablespace_name || ';' as SQL_TO_BE_EXECUTED from dba_indexes where owner = 'HR' and table_name = 'EMPLOYEES';
SQL_TO_BE_EXECUTED
--------------------------------------------------------------------------------
alter index HR.EMP_DEPARTMENT_IX rebuild tablespace EXAMPLE;
alter index HR.EMP_NAME_IX rebuild tablespace EXAMPLE;
alter index HR.EMP_MANAGER_IX rebuild tablespace EXAMPLE;
alter index HR.EMP_EMP_ID_PK rebuild tablespace EXAMPLE;
alter index HR.EMP_EMAIL_UK rebuild tablespace EXAMPLE;
alter index HR.EMP_JOB_IX rebuild tablespace EXAMPLE;
6 rows selected.
请注意,我们在新表空间USERS中重建索引。也就是说,对于索引,REBUILD相当于表中的MOVE
SQL> select index_name, tablespace_name, status from dba_indexes where owner = 'HR' and table_name = 'EMPLOYEES';
INDEX_NAME TABLESPACE_NAME STATUS
------------------------------ ------------------------------ ----------
EMP_JOB_IX USERS VALID
EMP_DEPARTMENT_IX USERS VALID
EMP_MANAGER_IX USERS VALID
EMP_NAME_IX USERS VALID
EMP_EMAIL_UK USERS VALID
EMP_EMP_ID_PK USERS VALID
6 rows selected.
所有索引都变为VALID,表明所重建的索引有效。
责任编辑:赵宁宁 来源: 今日头条 数据库索引(责任编辑:热点)
海外客商抢抓中国新春机遇 境外消费回流对进口消费产生一定带动作用
同济科技(600846.SH):终止2017年度配股公开发行证券方案 维护投资者利益
海关总署:前10个月煤、天然气进口量价齐升 进口铁矿砂9.33亿吨
贝达药业(300558.SZ)公布消息:凯铭投资解押239万股及质押的511万股延期购回
1月浙江新设外商投资企业287家 实际使用外资规模居全国第五
贝达药业(300558.SZ)公布消息:凯铭投资解押239万股及质押的511万股延期购回