Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление строк в Interbase-таблицах [D5, IB5.x, IB6.x]


Электрочайник ©   (2003-01-18 10:44:00) 

Помогите пожалуйста с глупым вопросом: как физически удалить из Interbase-таблицы строки. Строки конечно удаляются, но размер GDB-хи не изменяется, из чего я делаю вывод, что они там еще остаются. А так как GDB-ха довольно толста, я был бы не против уменьшить ее размер. Заранее спасибо.


Troy   (2003-01-20 12:22:00) [1]

Да кстати... Удаленные записи находятся в базе так же как и старые версии записей подвергшиеся изменению. После сборки мусора они удаляются, но размер базы останется такой же. С чем это связано? Да с тем, что выделенные страници под базу не освобождаются физически, а так же являются частью файла базы. И когда серверу понадобится дополнительное место под данные, то он воспользуется уже имеющимися пустыми (нераспределенными) страницами. Это ускоряет работу.
Я вот только не пойму, а зачем нужно чтобы база уменьшалась?


filyandiya   (2003-01-20 11:01:00) [2]

Атака клонов !!!!!!!!!!!!!

Вспомнил-таки !!! Иду читать про сборку мусора.


filyandiya   (2003-01-20 10:49:00) [3]

да бох с ним ...с удалением...

просто бывают случаи, когда записи помеченные на удаление...так ими и остаются... пока над ними не проведутся gbak или gfix

они висят себе и весят.....и ждут пока их ктонибудь прочитает...

просто как это сделать правильно? ...ну нету у меня мультиков по Interbase, а в FAQ нету ничего. Так select count(*) и делать?


filyandiya   (2003-01-20 10:48:00) [4]

2 filyandiya (20.01.03 09:45)
...ты бы еще мультики предложил посмотреть

Тебе как раз именно мультики, а не доки !


Anatoly Podgoretsky   (2003-01-20 10:40:00) [5]

Практичесски ни в одной системе удаленные записи из таблицы сразу не удаляются, это или внешними утилитами, или программная упаковка, для некоторых это и вредно, так как некоторые могут посторно использовать удаленные записи.


filyandiya   (2003-01-20 09:45:00) [6]

:) ну не зло....

...ты бы еще мультики предложил посмотреть


Johnmen   (2003-01-20 09:26:00) [7]

>filyandiya

О каком зле базар ??? Ты хоть бы книжку какую по IB прочел !


filyandiya   (2003-01-20 08:48:00) [8]

....да ...я просто хотел сказать, что корень зла - это РЕАЛЬНО не удаленные записи:(


filyandiya   (2003-01-20 08:45:00) [9]

всё что тута сказали...всё фигня!!!

на днях боролся с массовой вставкой / удалением - эмулировал временные таблицы файл базы растет и растет (с 2 мб до 100 и до бесконечности) - дело в том, что то что помеченно на удаление - не удалится, пока ЭТО не захотят просмотреть - это точно верно для FireBird 1.0, 1.5!
Они реально удалятся, т.е. на их место можно будет чегонибудь писать, ТОЛЬКО ПОСЛЕ ТОГО, КАК МЫ ИХ ЗАХОТИМ ПРОЧИТАТЬ.

Проверьте сами:

пусть есть таблица:

create MYTABLE(R1, R2, R3...)
create tmp_MYTABLE(UID primary key, R1, R2, R3, ...)
...
uid = 1 - например из генератора
insert into tmp_MYTABLE select :uid, A.* from MYTABLE where ...
delete from tmp_MYTABLE where UID = :uid

uid = 2 - например из генератора
insert into tmp_MYTABLE select :uid, A.* from MYTABLE where ...
delete from tmp_MYTABLE where UID = :uid

uid = 3 - например из генератора
insert into tmp_MYTABLE select :uid, A.* from MYTABLE where ...
delete from tmp_MYTABLE where UID = :uid
... и тогдалее - файл может расти до .... долго...и долго....без ограничений

select count(*) from tmp_MYTABLE ... хотябы - и файл некоторое время не растет! (но это наверное спасет не всегда).


Troy   (2003-01-20 07:39:00) [10]

Вообще-то в Interbase данные хранятся на страницах и поэтому удаление одной или пары строк не повлечет за собой изменение размера базы. Не стоит волноваться по этому поводу, это нормальное состояние. Если же происходит массовое удаление данных, то размер базы тоже не будет уменьшаться. :) Просто страници данных, на которых были удалены записи, будут помечены как не используемые и в дальнейшем могут быть использованы вновь для других целей. Если же необходимо избавиться от неиспользуемых страниц, то, как говорилось раньше, необходимо сделать бакап с последующим рестором, база будет пересоздана заново, уже без лишних страниц.


Alexandr   (2003-01-19 07:43:00) [11]

кретинам место в другой конфе


Big_Rom   (2003-01-18 15:48:00) [12]

а лучьше не делать Backup Restore, а подождать когда база рухнет :))


kaif   (2003-01-18 14:56:00) [13]

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


Delirium^.Tremens   (2003-01-18 12:12:00) [14]

В дневнике у себя галочки поставь.
После Backup следут Restore


Электрочайник   (2003-01-18 12:08:00) [15]

Звиняйте, конечно, наверное я туплю, но я не могу сделать BackUp даже из Server Manager. Вернее он делается, бэкап появляется, но размер основного файла не меняется :( Спасите пожалуйста и скажите, какие надо проставить галочки, чтобы он наконец-таки удалил все к едрене-фене 8-0


Delirium^.Tremens   (2003-01-18 10:49:00) [16]

http://www.ibase.ru
искать темы про Backup -> Restore


Наверх

Титульная страница Поиск, карта сайта Написать письмо