x$journal чистка
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный гость
- Сообщения: 92
- Зарегистрирован: 06 апр 2007, 18:21
- Откуда: Казань
- Контактная информация:
x$journal чистка
Был сбой в галактике, за несколько секунд сформировалось около 5 млн записей, сейчас журнал на 6,5 млн записей.
Стандартной очисткой, думаю буду долго чистить,
плюс тормоза для всех пользователей.
Хочу чистить через БД, здесь появляется вопрос:
Достаточно ли почистить таблицу x$journal?
или нужно еще по каким то таблицам пробежаться,
например по J$100..-вым по таблицам.
Стандартной очисткой, думаю буду долго чистить,
плюс тормоза для всех пользователей.
Хочу чистить через БД, здесь появляется вопрос:
Достаточно ли почистить таблицу x$journal?
или нужно еще по каким то таблицам пробежаться,
например по J$100..-вым по таблицам.
Код: Выделить всё
Select 'Truncante Table '+ Name+' ;'
From SysObjects
Where xType='U'
And Name Like 'J$%'
добавить trucate table gal.x$journal
см. неофициальный саит ОТП в ссылках
вроде Sniper писал
Не помню, публиковал этот скрипт или нет для 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
-
- Постоянный обитатель
- Сообщения: 114
- Зарегистрирован: 26 июн 2009, 18:29
- Контактная информация:
вот для примера нашел старый скрипт для зачистки журнала на оркале
Код: Выделить всё
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