2009-07-13 4 views
2

Табличное пространство в Oracle 10g используется почти на 100%.Oracle 10 g - Невозможно освободить место в табличном пространстве

Размер (MB) = 571,768.0
Used (MB) = 571,534.0

Я просто удалил (и совершенные) тысячи записей в таблице, которая принадлежит к схеме, связанной с этим табличным пространством. Удивительно, но не было освобождено место на странице «Таблицы» в Enterprise Manager.

Вопрос: есть ли что-нибудь, что мне нужно сделать, чтобы заставить Oracle освободить пространство, соответствующее удаленным записям?

+0

Принадлежит на serverfault.com, я думаю – skaffman

ответ

5

Пространство, которое вы видите, предназначено для СЕГМЕНТОВ на табличном пространстве.

Табличное пространство содержит сегменты. Каждый сегмент связан с индексом или таблицей. Сегменты содержат extends, а extends содержит блоки. А для таблицы блок содержит строки.

Когда вы удаляете строки в таблице, вы освобождаете пространство, занимаемое строками, но пространство для новых сегментов остается равным.

Чтобы освободить это место, вы можете попробовать:

ALTER TABLESPACE xxx COALESCE; 

или

ALTER TABLE xxx MOVE; 

первый, будет "combine all contiguous free extents into larger contiguous extents". В зависимости от вашей конфигурации это может быть выполнено Oracle автоматически. Кроме того, может быть, он не свободен, потому что расположение данных относительно высокого водного ориентира на сегменте.

Второй "lets you relocate data of a nonpartitioned table or of a partition of a partitioned table into a new segment, optionally in a different tablespace, and optionally modify any of its storage attributes.". Будьте осторожны с этим, потому что вам нужно свободное пространство для достижения этого, выполнить его против другого табличного пространства или добавить больше файлов данных.

0

Восстановите свои индексы.

+1

Это будет только свободное пространство для индексов не столько по сравнению с пространством данных. – FerranB

+2

В Oracle очень мало вопросов, для которых правильным ответом является «Перестроить ваши индексы». – APC

1

Если вы используете Oracle 10g или больше, вы можете очистить корзины, используя команду

purge recylebin 

или даже очистить содержимое связанных с табличного использованием

purge tablespace 

Это должно освободить пространство, которое удаляется, но еще недоступно, обратите внимание, что это будет доступно автоматически при возникновении космического стресса для данного табличного пространства.

Кроме того, Вы можете использовать консультанта сегмента, чтобы найти все сегменты, которые вы можете «сжать», и легко восстановить свое пространство.
Подробнее на Segment Shrink

И последний вы можете использовать с локально управляемые табличные

Alter Tablespace tablespace_name shrink space 

Это освободило бы столько места, сколько возможно, сохраняя при этом другие атрибуты.

Смежные вопросы