ITPub博客

首页 > 数据库 > Oracle > Oracle表移动后应该做哪些事情?

Oracle表移动后应该做哪些事情?

Oracle 作者:wang1103392 时间:2022-09-29 15:49:45 0 删除 编辑

概述

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

Oracle表移动后应该做哪些事情?Oracle表移动后应该做哪些事情?


将表从示例移动到用户

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,表明所重建的索引有效。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15810651/viewspace-2916782/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2016-10-12

  • 博文量
    11
  • 访问量
    5067