очистка журнальных таблиц

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Slavik
Постоянный гость
Сообщения: 69
Зарегистрирован: 21 авг 2005, 19:37
Откуда: Ukraine, Kharkov
Контактная информация:

очистка журнальных таблиц

Сообщение Slavik »

Удалил старые данные средствами галактики
support-журнализация-сервис-чистка журнала
, но в табличных пространствах oracle место не освободиось
если удалять через sql - truncate, то место освобождается.


Подскажите в чем различия этих способов.
если удалять всю информацию из журнальных таблиц, то оба способа должны привести к одному и тому же результату, а на практике наоборот? или я не прав?
email: slavik@ib.com.ua
oiko
Местный житель
Сообщения: 418
Зарегистрирован: 29 мар 2005, 17:49

Сообщение oiko »

truncate сжимает оракловую таблицу удаляя из нее физически не используемое место Галактика об этом не знает.
Slavik
Постоянный гость
Сообщения: 69
Зарегистрирован: 21 авг 2005, 19:37
Откуда: Ukraine, Kharkov
Контактная информация:

Сообщение Slavik »

oiko писал(а):truncate сжимает оракловую таблицу удаляя из нее физически не используемое место Галактика об этом не знает.
тогда куда же удаляются записи из журнальных таблиц галактикой?
использование coalesce для табличных пространств не помогает.
или галактика переписывает данные при удалении из одних таблиц в другие, поэтому место и не освобождается?
email: slavik@ib.com.ua
oiko
Местный житель
Сообщения: 418
Зарегистрирован: 29 мар 2005, 17:49

Сообщение oiko »

Вообщето я чушь спорол truncate удаляет записи без роллбэка в отличии от delete. А как галактика поступает с журналом надо посмотреть. Вообще-то должен проходить запрос на delete/
oiko
Местный житель
Сообщения: 418
Зарегистрирован: 29 мар 2005, 17:49

Сообщение oiko »

Difference between DELETE and TRUNCATE

TRUNCATE will remove all rows of data from a table. DELETE can be used to remove all rows of data from a table or to remove selected rows of data from a table. 
 
TRUNCATE doesn't use any rollback or undo segments. The TRUNCATE operation cannot be reversed, but the DELETE operation can be rolled back. 
 
TRUNCATE will usually execute much quicker than DELETE.
 
No ON DELETE triggers are fired by the TRUNCATE actions.
 
TRUNCATE can be used to reclaim all extents except for the INITIAL extent. You can keep all extents with the REUSE STORAGE clause. These operations are not available with the DELETE statement.
Gameus_
Местный житель
Сообщения: 209
Зарегистрирован: 18 окт 2006, 17:03
Откуда: Ростов на Дону Новочеркасск Новороссийск
Контактная информация:

Сообщение Gameus_ »

Поделитесь плиз опытом, кто как очищает журнал, а то место тает на глазах.....
yuri_z
Постоянный обитатель
Сообщения: 165
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Н.Новгород ОАО "Сибур-Нефтехим"
Контактная информация:

Сообщение yuri_z »

Ограничение на кол-во дней хранения в настройке журнализации укажите поменьше и не будет он больше распухать. А ежели хорошо поработаете можно иногда его ужимать вручную после работы.
Radik
Сообщения: 19
Зарегистрирован: 27 мар 2006, 19:11
Контактная информация:

Сообщение Radik »

пишу из дому, по ентому синтаксис может иметь кучу ошибок, но суть постараюсь донести
truncate это принципиально другой механизим в отличии от delete
при truncate просто блоки данных помечаются как свободные (почти как форматирование, но без возможности восстановления)

с журналами боролись долго и всякими спосабами

способ 1 (делитом)
ночью запускается процедура
которая в цикле делает
declare
j_nrec char(16);
i integer;
cursor c1 as
select nrec (или еще что нить) from gal.x$journal
where "поле с датой" < (sysdate-"количество дней хранения журнала")
begin
open c1;
i:=0;
loop
c1 fetch into j_nrec
exit when c1 notfound;
delete from gal.x$journal t1
where t1.nrec=j_nrec
i:=i+1;
if i=50 then
coommit;
i:=0;
end if ;
end loop;
commit;
end;

способ 2 (транкейтом)
select 'TRUNCATE TABLE GAL.'||tablename||' ;'
from all_tables
where owner='GAL'
and tablename like 'J$%'
в результате получите чудный скрипт, который оттранкейтит все таблицы журнализации если его запустить. Не забудте в конец скрипта добавить trucate table gal.x$journal

второй способ более быстрый, первый более корректный (ИМХО)
но первый начнет задыхаться когда записи в журналах начнут измеряться несколькими миллионами
VAt
Постоянный обитатель
Сообщения: 130
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ухта, Республика Коми
Контактная информация:

Сообщение VAt »

А чем не устраивает стандартное галактическое сжатие журнала? да долго идет, часа полтора-два, но мы запускаем в 4 утра когда вбазе никого нет. Сейчас держим журнал 45 дней, что в полне приеслимо с учетом того, что бэкапы храним помесячно. На моей практике были случаи, когда для расследований приходилось поднимать базы двух летней давности, причем нужны были и журналы.
GAL 9.1, Oracle 11.2
gritv
Посетитель
Сообщения: 34
Зарегистрирован: 09 авг 2005, 18:42
Откуда: Воронеж

Сообщение gritv »

У нас настроена система архивирования журнала. Один раз в неделю ночью журнал архивируется, а затем удаляется. Архивным журналом можно воспользоваться в любой момент.
Ответить