Когда невозможно ужать файл данных ?

OraDB
Дата: 01.08.2005 11:17:09
Добрый день.

Когда-то на форуме встретил высказывание, а поиском найти его не могу. :( Но ничего, оно у меня в блокнотик скопировано :) :


А, забыл сказать...
Если же всё-таки стоит делом принципа увеличить размер файла то пожалуйста:

ALTER DATABASE DATAFILE "/u02/oracle/rbdb1/stuff01.dbf"
RESIZE 100M;

Где указывайте любую величину...но по-моему этого не стоит делать....поскольку потом ужать этот файл не всегда представляется возможным


Собственно вопрос: а в каком случае, этот файл после нельзя будет ужать ?
Borland
Дата: 01.08.2005 11:21:45
1. Когда у тебя данные в этом файле будут занимать столько же места, сколько и сам файл
2. Когда у тебя будет фрагментация в файле, и между предпоследним и последним блоком данных будет много свободного места. В таком случае файл ужмётся до миммально допустимого размера

-----
Все великие дела совершаются в командной строке
OraDB
Дата: 01.08.2005 11:26:43
Первый вариант - понятно. :)

Второй - а как нибудь можно дефрагментировать этот файл? Один вариант рискну предположить - экспорт, удаление файла, создание нового, импорт. Что-нибудь менее трудоемкое есть ?
Borland
Дата: 01.08.2005 11:30:47
Удалять файл не советую.

alter table t1 move tablespace ts1;
alter table t1 move tablespace old_tablespace;

-----
Все великие дела совершаются в командной строке
OraDB
Дата: 01.08.2005 11:37:27
Удалять файл не советую.


Почему ?
Oleg Afanasiev
Дата: 01.08.2005 12:01:41
OraDB
Удалять файл не советую.


Почему ?

Потому что дело не в файле в в выделенных в этом файле под
определённую таблицу экстентах.
В нём могут быть данные других таблиц.
Осирис
Дата: 01.08.2005 12:14:16
Так речь шла о том, что я экспортирую данные всего tablespace, а только потом его удалю. Или я где-то заблуждаюсь ? Где ?
Vadim_Maximov
Дата: 01.08.2005 12:17:03
Не путайте файл и табличное пространство. В табличном пространстве может быть несколько файлов данных.
В вашем случае надо экспортировать данные, удалить табличное пространство, создать его заново и импортировать данные.
Partos
Дата: 01.08.2005 12:38:36
А ещё можешь использовать alter table move по всем таблицам в новое табличное пространство....а потом старое грохать...только надо проверить чтоб в табличном пространстве больше никаких объектов не было...хотя если они будут то наверное не даст удалить (не пробывал но может быть доступен и такой сервис как и в команде drop table когда пока не удалишь все строки таблицы - не даёт удалить таблицу)...

Если что, оставшиеся объекты тоже перенести (для индексов например - alter index rebuild)
MinistrBob
Дата: 01.08.2005 12:58:47
alter table ... move хорошоя штука, но не всегда возможна, т.к. (выдержка из документации)

- You cannot move a table containing a LONG or LONG RAW column.