Oracle 表移动后必须做的事

发布时间:2025-05-11 13:18:12 作者:益华网络 来源:147小编 浏览量(2) 点赞(2)
摘要:概述移动一张表实际上是一个重组过程,数据库会将原来的数据复制到新的地方。但是如果你发现这个表在移动后性能下降了,可能是你的索引没有重建。本文将指导您找到依赖索引并重建它们。 将表从示例移动到用户SQL> select tablespace_name from dba_tables where owner = HR and table_na

概述

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

将表从示例移动到用户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,表明所重建的索引有效。

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!