Страница 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.
Спасибо, приятные скрипты.