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

Oracle缩容表的几种方法及优缺点(文档 ID 151588.1)

原创 小小星月明 2023-09-20
584

如何重新组织表(文档 ID 151588.1)
原文: How to Reorganize a Table (Doc ID 151588.1)

  • 适用于:

Oracle 数据库云架构服务 - 版本 N/A 及更高版本
客户中的第 1 代 Exadata 云(Oracle Exadata 数据库云计算机) - 版本 N/A 及更高版本
Oracle 云基础设施 - 数据库服务 - 版本 N/A 及更高版本
Oracle 数据库云 Exadata 服务 - 版本 N/A 及更高版本
Oracle Database Exadata Express Cloud Service - 版本 N/A 及更高版本
本文档中的信息适用于任何平台。

  • 目标

本文档的目标是提供不同的方法来重新创建/重组数据库中的表,每种方法都有优缺点。

  • 方案

此处讨论了重新组织表的可能性。

  • A. 通过select方式创建新表(CTAS)

1. 导出表结构

exp username/password file=test.dmp tables=test rows=n
(Or) expdp username/password directory=<dirname> dumpfile=test.dmp tables=test


2. 通过拷贝方式创建一个新表

create table new_test as select * from test;


3. 删除原始表和所有索引/约束

drop table test cascade constraints;
Caution: This statement drops all constraints and indexes


4. 重命名新表

alter table new_test rename to test;


5. 重新创建所有索引和约束

imp username/password file=test.dmp ignore=y
Caution: This import gets a warning, that the table test already exists. Ignore this error message


优势:
1.易于使用。
2. 表可用于 CTAS 期间的 DML 操作(但这些 DML 不会复制到目标表)。

缺点:
1. CTAS速度慢。
2. 需要额外的空间。
3. 在 CTAS 操作期间对表执行的任何 DML 都不会记录在目标表中。
4. 索引和约束需要在目标表上手动创建。

  • B. Export/Expdp-Import/Impdp

1. 导出应重新创建的表

exp username/password file=test.dmp tables=test (Or)
expdp username/password directory=<dirname> dumpfile=test.dmp tables=test


2. 删除包含所有索引的表

drop table test cascade constraints;
Caution: This statement drops all constraints and indexes


3. 再次导入表

imp username/password file=test.dmp


优势:
1. 与其他重组表选项相比更快。
2. 如果在导入之前删除源表,则不需要额外的空间。
3. 如果需要整个表空间重组,是推荐的方法。
4.当需要重组的对象太多时,更易于使用。

缺点:
1. 表可用性受到影响。因此,应计划应用程序停机时间。
2. 在导出完成和导入开始时间之间对表执行的任何 DML 都不会被记录。

  • C. Move the Table
语法: ALTER TABLE MOVE

优势:
1.此操作速度快,尤其是与shrink相比。
2.可以使用简单的命令来执行。

缺点:
1. 在move操作期间,表不可执行DML操作。
2. 需要额外的空间。
3. move操作后需要手动重建索引。

注意:更改表移动ONLINE只能用于:
->索引组织的表和索引组织的嵌套表存储表。使用 ONLINE 子句,允许在重建表的主键索引期间对 IOT 执行 DML 操作。
-> 用于在线移动分区和子分区。


  • D. 收缩段
区段收缩在线完成,但只能在 ASSM 区段上执行。传统的DML操作可以与段收缩共存,而并行DML不能。
在收缩的压缩阶段,对象的可用性不会受到显著影响。但是,在段收缩的某些阶段(调整 HWM 时),段必须锁定在独占模式下。
此阶段的持续时间很短,应该不会太明显影响对象。

语法:
1. 为表启用行移动。

SQL> ALTER TABLE <table name> ENABLE ROW MOVEMENT;


2. 收缩表,但不想收缩 HWM(高水位线)。

SQL> ALTER TABLE <table name> SHRINK SPACE COMPACT;


3. 收缩表和 HWM

SQL> ALTER TABLE <table name> SHRINK SPACE;


4. 收缩表和所有依赖索引

SQL> ALTER TABLE <table name> SHRINK SPACE CASCADE;


5. 收缩MView 下的表

SQL> ALTER TABLE <table name> SHRINK SPACE;


6. 只收缩索引

SQL> ALTER INDEX <index name> SHRINK SPACE;


优势:
1. 当收缩操作正在运行时,表可用于 DML。
2.使用简单。
3. 由于数据是使用插入/删除对压缩的,因此不需要额外的空间。
4. 可以使用CASCADE选项自动重新组织索引。

缺点:
1.生成大量redo。
2. 缩小大段需要很长时间。
3. 在同一表空间中重新组织表。不能用于将对象移动到另一个表空间。


  • E. 在线重新定义表
上述所有方法都至少在短时间内涉及对象的不可用。
Oracle 数据库提供了一种机制,可以在不显著影响表可用性的情况下修改表结构。该机制称为联机表重定义。与重新定义表的传统方法相比,联机重新定义表可显著提高可用性。
在线重新定义表时,查询和 DML 在大部分重定义过程中都可以访问它。通常,表仅在非常小的窗口内锁定,该窗口与表的大小和重定义的复杂性无关。
可以使用“企业管理器重新组织对象”向导或DBMS_REDEFINITION包执行联机表重定义。

优势:
1. 表可用性不受影响。
2. 索引和约束可以自动复制。
3.可以实现其他功能,例如对表进行分区,LOB到安全文件的转换,表列类型的转换等。
4.强烈推荐用于LOB和大表。

缺点:
1. 与其他重组选项相比,这有点复杂,DBA 需要创建脚本来序列化步骤。
2. 默认情况下,dbms_redefintion串行模式下创建索引。若要对索引使用并行性,需要手动创建索引并在以后注册。
3. 即使表可用于 DML,也建议在非高峰时段执行此操作(尤其是 finish_redefinition),因为高事务速率会影响同步过程。

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

评论