暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将索引移动到另一个表空间

原创 小小亮 2022-10-27
2875

移动索引

移动索引是在原始表空间或另一个表空间中重建整个索引,并带有一些选项,如ONLINEPARALLEL事实上,Oracle 中重建索引在数据库管理方面有一些优势:

  • 对松弛索引进行碎片整理
  • 这可以减小索引的大小,并可以在查询期间加快索引扫描。

  • 离开拥挤的表空间
  • 这可能会从拥挤的表空间中释放一些空间,以防止表出现 ORA-01653或索引出现 ORA-01654。

假设我们想通过ALTER INDEX语法重建名为OE.ORDER_PK的索引,该索引当前位于EXAMPLE表空间中。

SQL> conn oe/oe@orcl
Connected.
SQL> select tablespace_name from user_indexes where index_name = 'ORDER_PK';

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

在这篇文章中,我介绍了 5 种移动索引的不同方法。

  1. 重建相同的表空间
  2. 重建另一个表空间
  3. 在线重建
  4. 并行重建
  5. 重建 NOLOGGING

1. 改变索引重建

如果要在同一个表空间中重建索引,则不必指定表空间子句。

SQL> alter index ORDER_PK rebuild;

Index altered.

SQL> select tablespace_name from user_indexes where index_name = 'ORDER_PK';

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

在原始表空间中重建索引的唯一目的是碎片整理。您最好确保有足够的可用空间,至少是当前表空间大小的两倍,然后再执行此操作。

2. ALTER INDEX 重建表空间

您需要指定表空间子句才能将索引移出原始位置。

SQL> alter index ORDER_PK rebuild tablespace USERS;

Index altered.

SQL> select tablespace_name from user_indexes where index_name = 'ORDER_PK';

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

3. 在线更改索引重建

从 Oracle 10g 开始,我们可以使用ONLINE选项移动索引,这意味着在重建索引期间允许执行数据操作语言 (DML) 。

SQL> alter index ORDER_PK rebuild tablespace USERS online;

Index altered.

ONLINE选项并不意味着重建索引不需要锁定任何对象,它只是锁定表,然后在最后阶段在很短的时间内释放它。

注意,ALTER INDEX中的REBUILD关键字不能在 tablespace 子句之后指定

4. ALTER INDEX REBUILD PARALLEL

我们可以并行重建索引。

SQL> alter index ORDER_PK rebuild tablespace USERS online parallel 16;

Index altered.

但这也改变了索引的并行度。

SQL> select degree from user_indexes where index_name = 'ORDER_PK';

DEGREE
----------------------------------------
16

如果与索引相关的任何 SQL 执行路径受到影响或更糟,您可以像这样将其还原。

SQL> alter index ORDER_PK noparallel;

Index altered.

SQL> select degree from user_indexes where index_name = 'ORDER_PK';

DEGREE
----------------------------------------
1

5.重建NOLOGGING

如果数据库没有理由保留索引的重做日志,或者它当前处于NOARCHIVELOG模式。如果索引真的很大,我们可以通过减少在线日志来加速重建。

顺便问一下,你知道如何检查归档日志模式吗?

SQL> alter index ORDER_PK rebuild tablespace USERS online nologging;

Index altered.

同样,NOLOGGING将索引的属性从LOGGING永久更改为NOLOGGING

SQL> select logging from user_indexes where index_name = 'ORDER_PK';

LOG
---
NO

要将其恢复正常,您可以这样做:

SQL> alter index ORDER_PK logging;

Index altered.

SQL> select logging from user_indexes where index_name = 'ORDER_PK';

LOG
---


原文标题:Alter Index Rebuild to Another Tablespace

原文作者:Ed Chen

原文链接:https://logic.edchen.org/how-oracle-move-index/

YES
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论