Oracle 表移动后必须做的事

树叶云

概述

移动一张表实际上是一个重组过程,数据库会将原来的数据复制到新的地方。但是如果你发现这个表在移动后性能下降了,可能是你的索引没有重建。本文将指导您找到依赖索引并重建它们。

将表从示例移动到用户

SQL>selecttablespace_namefromdba_tableswhereowner='HR'andtable_name='EMPLOYEES';

TABLESPACE_NAME
------------------------------
EXAMPLE

SQL>altertablehr.employeesmovetablespaceusers;

Tablealtered.

SQL>selecttablespace_namefromdba_tableswhereowner='HR'andtable_name='EMPLOYEES';

TABLESPACE_NAME
------------------------------
USERS

查看哪些索引取决于此表

SQL>columnindex_nameformata30;
SQL>columntablespace_nameformata30;
SQL>columnstatusformata10;
SQL>selectindex_name, tablespace_name, statusfromdba_indexeswhereowner='HR'andtable_name='EMPLOYEES';

INDEX_NAMETABLESPACE_NAMESTATUS
----------------------------------------------------------------------
EMP_JOB_IXEXAMPLEUNUSABLE
EMP_DEPARTMENT_IXEXAMPLEUNUSABLE
EMP_MANAGER_IXEXAMPLEUNUSABLE
EMP_NAME_IXEXAMPLEUNUSABLE
EMP_EMAIL_UKEXAMPLEUNUSABLE
EMP_EMP_ID_PKEXAMPLEUNUSABLE

6rowsselected.

如您所见,所有依赖索引都是UNUSABLE。这意味着,数据库不会自动重建它们。你必须自己做。

编写所有重建语句,然后执行它们

SQL>select'alter index '||owner||'.'||index_name||' rebuild tablespace users;'asSQL_TO_BE_EXECUTEDfromdba_indexeswhereowner='HR'andtable_name='EMPLOYEES';

SQL_TO_BE_EXECUTED
--------------------------------------------------------------------------------
alterindexEMP_JOB_IXrebuildtablespaceusers;
alterindexEMP_DEPARTMENT_IXrebuildtablespaceusers;
alterindexEMP_MANAGER_IXrebuildtablespaceusers;
alterindexEMP_NAME_IXrebuildtablespaceusers;
alterindexEMP_EMAIL_UKrebuildtablespaceusers;
alterindexEMP_EMP_ID_PKrebuildtablespaceusers;

6rowsselected.

或者您可以重建原始表空间的索引。

SQL>select'alter index '||owner||'.'||index_name||' rebuild tablespace '||tablespace_name||';'asSQL_TO_BE_EXECUTEDfromdba_indexeswhereowner='HR'andtable_name='EMPLOYEES';

SQL_TO_BE_EXECUTED
--------------------------------------------------------------------------------
alterindexHR.EMP_DEPARTMENT_IXrebuildtablespaceEXAMPLE;
alterindexHR.EMP_NAME_IXrebuildtablespaceEXAMPLE;
alterindexHR.EMP_MANAGER_IXrebuildtablespaceEXAMPLE;
alterindexHR.EMP_EMP_ID_PKrebuildtablespaceEXAMPLE;
alterindexHR.EMP_EMAIL_UKrebuildtablespaceEXAMPLE;
alterindexHR.EMP_JOB_IXrebuildtablespaceEXAMPLE;

6rowsselected.

请注意,我们在新表空间USERS中重建索引。也就是说,对于索引,REBUILD相当于表中的MOVE

重建后检查状态

SQL>selectindex_name, tablespace_name, statusfromdba_indexeswhereowner='HR'andtable_name='EMPLOYEES';

INDEX_NAMETABLESPACE_NAMESTATUS
----------------------------------------------------------------------
EMP_JOB_IXUSERSVALID
EMP_DEPARTMENT_IXUSERSVALID
EMP_MANAGER_IXUSERSVALID
EMP_NAME_IXUSERSVALID
EMP_EMAIL_UKUSERSVALID
EMP_EMP_ID_PKUSERSVALID

6rowsselected.

所有索引都变为VALID,表明所重建的索引有效。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/248412.html<

(0)
运维的头像运维
上一篇2025-04-27 13:58
下一篇 2025-04-27 14:00

相关推荐

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注