对 Oracle Table 使用 SHRINK SPACE 有什么缺点?
What is the disadvantage of using SHRINK SPACE for an Oracle Table?
我打算通过使用存储过程查询一次生产数据库来开发一个报告数据库。
存储过程然后将结果写入它自己的输出 tables。
以下是输出的架构 table:
Create table Output (
Customer_ID NUMBER(15) not null,
STD_HASH RAW(1000 BYTE) ,
VALID_PERIOD_START NOT NULL TIMESTAMP(6),
VALID_PERIOD_END NOT NULL TIMESTAMP(6),
Address VARCHAR2(30 CHAR),
period for valid_period(valid_period_start,valid_period_end),
Constraint Output_PK Primary Key ( Customer_ID, valid_period_start, valid_period_end )
)
因为存储过程会在输出table上执行大量更新和删除语句,而那些输出table非常大。我现在最大的是8GB。我正在考虑在存储过程末尾使用“SHRINK SPACE”选项更改这些输出 tables 以回收一些空间。
以下是我要申请的声明:
Alter table OUTPUT1 ENABLE ROW MOVEMENT; -- Temporary enable row movement for the table
Alter TABLE output2 SHRINK SPACE;
Alter table OUTPUT1 DISABLE ROW MOVEMENT;-- Disable row movement.
那些输出 table 是临时的 table,它使用有效期和生产中的 ID 作为主键。
但是,由于我对收缩 Space 功能还很陌生。谁能告诉我使用这个函数的缺点是什么?
table,基本上不会从这个存储过程以外的任何地方更新。存储过程将按天安排 运行。
提前致谢!
是的,收缩有一些限制:
(1) 它在收缩操作期间锁定 table
(2) 它改变了 table 的 rowid。
(3) 需要tablespace启用自动分段-space管理。
我们还有其他方法来声明未使用的 space:
(1) export/import
(2) dbms_redefinition
我打算通过使用存储过程查询一次生产数据库来开发一个报告数据库。
存储过程然后将结果写入它自己的输出 tables。
以下是输出的架构 table:
Create table Output (
Customer_ID NUMBER(15) not null,
STD_HASH RAW(1000 BYTE) ,
VALID_PERIOD_START NOT NULL TIMESTAMP(6),
VALID_PERIOD_END NOT NULL TIMESTAMP(6),
Address VARCHAR2(30 CHAR),
period for valid_period(valid_period_start,valid_period_end),
Constraint Output_PK Primary Key ( Customer_ID, valid_period_start, valid_period_end )
)
因为存储过程会在输出table上执行大量更新和删除语句,而那些输出table非常大。我现在最大的是8GB。我正在考虑在存储过程末尾使用“SHRINK SPACE”选项更改这些输出 tables 以回收一些空间。
以下是我要申请的声明:
Alter table OUTPUT1 ENABLE ROW MOVEMENT; -- Temporary enable row movement for the table
Alter TABLE output2 SHRINK SPACE;
Alter table OUTPUT1 DISABLE ROW MOVEMENT;-- Disable row movement.
那些输出 table 是临时的 table,它使用有效期和生产中的 ID 作为主键。
但是,由于我对收缩 Space 功能还很陌生。谁能告诉我使用这个函数的缺点是什么?
table,基本上不会从这个存储过程以外的任何地方更新。存储过程将按天安排 运行。
提前致谢!
是的,收缩有一些限制: (1) 它在收缩操作期间锁定 table (2) 它改变了 table 的 rowid。 (3) 需要tablespace启用自动分段-space管理。
我们还有其他方法来声明未使用的 space: (1) export/import (2) dbms_redefinition