Страница 1 из 1
x$journal чистка
Добавлено: 30 июл 2009, 15:11
bat_only
Был сбой в галактике, за несколько секунд сформировалось около 5 млн записей, сейчас журнал на 6,5 млн записей.
Стандартной очисткой, думаю буду долго чистить,
плюс тормоза для всех пользователей.
Хочу чистить через БД, здесь появляется вопрос:
Достаточно ли почистить таблицу x$journal?
или нужно еще по каким то таблицам пробежаться,
например по J$100..-вым по таблицам.
Добавлено: 30 июл 2009, 15:41
edward_K
последний абзац правильный.
Добавлено: 30 июл 2009, 15:45
bat_only
То есть делаю truncate основной таблицы x$journal и конкретной таблицы j$
и всем счастье так?
Добавлено: 30 июл 2009, 16:32
bat_only
А еще вопрос, размер Journal.dat
из чего складывается?
Добавлено: 12 авг 2009, 20:29
Sniper
если база первазив - то проще удалить файл журнала
если нет - то лучше скриптом
какая субд?
Добавлено: 13 авг 2009, 23:28
Ged
Код: Выделить всё
Select 'Truncante Table '+ Name+' ;'
From SysObjects
Where xType='U'
And Name Like 'J$%'
В результате получите чудный скрипт, который отранкейтит все таблицы журнализации если его запустить. Не забудте в конец скрипта
добавить trucate table gal.x$journal
см. неофициальный саит ОТП в ссылках
вроде Sniper писал
Добавлено: 14 авг 2009, 10:59
Polimer
Не помню, публиковал этот скрипт или нет для MSSQL:
Код: Выделить всё
DECLARE curTables CURSOR
FOR
SELECT
so.Name,
src.Name,
xf.XF$Title
FROM
SysObjects so
INNER JOIN X$FILES xf ON xf.XF$Code = CONVERT(INT, SUBSTRING(so.Name, 3, 16))
INNER JOIN SysObjects src ON src.type='U' AND src.name = 'T$' + xf.XF$Name
WHERE
so.Type = 'U' AND so.Name LIKE 'J$%'
ORDER BY so.Name
DECLARE @Name VARCHAR(200), @SrcName VARCHAR(200), @Title VARCHAR(200), @SQL VARCHAR(8000)
DECLARE @I INTEGER
SELECT @I = 0
SET NOCOUNT ON
OPEN curTables
FETCH NEXT FROM curTables INTO @Name, @SrcName, @Title
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'TRUNCATE TABLE [' + RTRIM(@Name) + ']'
PRINT 'Очищаю таблицу ' + @Name + ' (журнал таблицы ' + @SrcName + ' - ' + @Title + ')'
EXEC(@SQL)
SELECT @I = @I + 1
FETCH NEXT FROM curTables INTO @Name, @SrcName, @Title
END
PRINT 'Всего очищено таблиц: ' + LTRIM(@I)
CLOSE curTables
DEALLOCATE curTables
SET NOCOUNT OFF
Добавлено: 14 авг 2009, 12:40
Sniper
очистка журнала простым транкейтом всех таблиц - не правильное решение, потому что есть еще таблицы с мемо полями и такие таблицы надо удалять а не транкейтить.
Добавлено: 14 авг 2009, 13:09
Sniper
вот для примера нашел старый скрипт для зачистки журнала на оркале
Код: Выделить всё
SELECT
'TRUNCATE TABLE GAL."X$JOURNAL";'
FROM DUAL
UNION
SELECT
'TRUNCATE TABLE GAL."J$' ||XF$CODE|| '";'
FROM GAL.X$FILES
WHERE
(MOD(TRUNC(XF$FLAGS/1024),2) = 1 OR MOD(TRUNC(XF$FLAGS/2048),2) = 1) AND
MOD(TRUNC(XF$FLAGS/16384),2) = 0 AND XF$CODE != 0 AND
245 > (SELECT COUNT(DISTINCT XE$FILECODE) FROM GAL.X$FIELDS WHERE XE$FILECODE = XF$CODE)
AND MOD(TRUNC(XF$FLAGS/4),2) = 0
UNION
SELECT
'DELETE FROM GAL."J$' ||XF$CODE|| '";'
FROM GAL.X$FILES
WHERE
(MOD(TRUNC(XF$FLAGS/1024),2) = 1 OR MOD(TRUNC(XF$FLAGS/2048),2) = 1) AND
MOD(TRUNC(XF$FLAGS/16384),2) = 0 AND XF$CODE != 0 AND
245 > (SELECT COUNT(DISTINCT XE$FILECODE) FROM GAL.X$FIELDS WHERE XE$FILECODE = XF$CODE)
AND MOD(TRUNC(XF$FLAGS/4),2) = 1
--XF$FLAGS/1024 и XF$FLAGS/2048 журналируется ли таблица (журнал и корпо)
--XF$FLAGS/16384 не должен стоять - это пользовательская таблица (не журналируется)
-- 245 - непонятно зачем
-- XF$FLAGS/4 - проверяется есть ли мемо поле - 0 или 1
Добавлено: 20 авг 2009, 17:38
bat_only
СУБД SQL.
Спасибо, приятные скрипты.