在 TEMP 空间不足的情况下重建大型 Oracle 10g 索引?

Mik*_*use 6 oracle oracle-10g

我的一个(Oracle 10g)表随着时间的推移增长到大约 8.4 亿行。其上的一个索引 (DATE, NUMBER(38)) 目前占用 38GB。我想更改索引(例如,我认为它可以很好地利用 COMPRESS)但它因与 TEMP 已满相关的错误而失败 - 目前为 4GB。

有没有办法建立一个大于 TEMP 的索引?我意识到我可以导出表,截断它,创建新的和有趣的索引,然后重新加载,但这超出了我的承受能力......

Gai*_*ius 10

Oracle 中的 TEMP 用于什么?作为进行不适合主内存的排序的临时区域。所以问题是你需要做一个大的排序来创建你的索引,而你没有足够大的 PGA 来做它。所以你的选择是:更大的 PGA 或“临时临时”表空间;只需创建一个足够大的表空间,使其成为您用户的临时表空间 ( ALTER USER xxx TEMPORARY TABLESPACE temptemp;) 来构建索引,然后将您的用户设置回去并删除它。


小智 1

你当然可以。为您的会话和大量 PQ 显式设置 sort_area_size。添加一些临时文件可能会更容易。