Очистка журнала ????

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

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

AlexKl
Сообщения: 1
Зарегистрирован: 29 мар 2005, 17:49

Re: Очистка журнала ????

Сообщение AlexKl »

Stored Procedure высылаю. Если кто-либо не получит - пишите на kleandrov@gmail.com. Я оствляю в журнале последние 10 дней. На корпо это, естественно, не влияет т.к. данные по корпо переношу ежедневно.
maikl
Местный житель
Сообщения: 1503
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь

Re: Очистка журнала ????

Сообщение maikl »

Хотелось бы пообщаться с кем нибудь, кто чистит журнал вручную. Дайте телефон
funk_gall
Новичок
Сообщения: 20
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Иркутская область, г. Иркутск Аэропорт Иркутск
Контактная информация:

Re: Очистка журнала ????

Сообщение funk_gall »

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

Re: Очистка журнала ????

Сообщение yuri_z »

Зачем все это? Держите журнал за 1 день, на утро копируйте в тестовею базу, оттуда в ДБФ из дбф в архивную за месяц. Сжатие журнала будет выполняться само, каждое утро без проблем. Если заест- значит в журнале появилась кривая запись. Она будет первой при просмотре журнала.
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

Для MSSQL платформы

Код: Выделить всё

-- Процедура для быстрой очистки журнала
CREATE  PROCEDURE p_integrity_clear_journal
	@LastDate datetime = NULL	-- граничная дата, по которую производиться удаление из журнала
AS
DECLARE  @TableCode int,
	@TableName sysname,
	@execsql nvarchar(1000)

SET NOCOUNT ON
SET XACT_ABORT ON

SET @LastDate=ISNULL(@LastDate, CAST('99991231' as datetime))  -- очищаем весь журнал, если передан NULL

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN

-- Блокируем удаляемые записи
SELECT @TableCode=MAX(TableCode) FROM X$JOURNAL WHERE STATUS IN (0,1,2,3) AND LASTDATE<=@LastDate

IF @TableCode IS NULL  -- нет записей в журнале
  RETURN 

DECLARE JNRecCursor CURSOR LOCAL FAST_FORWARD
FOR SELECT DISTINCT TableCode FROM X$JOURNAL WHERE STATUS IN (0,1,2,3) AND LASTDATE<=@LastDate

OPEN JNRecCursor

WHILE 1=1
BEGIN
  FETCH NEXT FROM JNRecCursor INTO @TableCode
  
  IF @@FETCH_STATUS<>0
    BREAK

  SET @TableName = 'J$'+CONVERT(VARCHAR(32),@TableCode)
  SET @execsql = 'DELETE FROM '+@tablename+' WHERE J#NRec IN (SELECT NREC FROM X$JOURNAL WHERE STATUS IN (0,1,2,3) AND LASTDATE<=@LastDate AND TableCode=@TableCode)'
  EXEC sp_executesql @execsql, '@LastDate datetime, @TableCode int', @LastDate, @TableCode
END

CLOSE JNRecCursor
DEALLOCATE JNRecCursor

ALTER TABLE X$JOURNAL DISABLE TRIGGER X$JOURNAL_D
DELETE FROM X$JOURNAL WHERE STATUS IN (0,1,2,3) AND LASTDATE<=@LastDate
ALTER TABLE X$JOURNAL ENABLE TRIGGER X$JOURNAL_D
COMMIT TRAN
Ответить