Страница 2 из 2

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

Добавлено: 25 ноя 2004, 21:15
AlexKl
Stored Procedure высылаю. Если кто-либо не получит - пишите на kleandrov@gmail.com. Я оствляю в журнале последние 10 дней. На корпо это, естественно, не влияет т.к. данные по корпо переношу ежедневно.

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

Добавлено: 07 дек 2004, 19:54
maikl
Хотелось бы пообщаться с кем нибудь, кто чистит журнал вручную. Дайте телефон

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

Добавлено: 08 дек 2004, 09:21
funk_gall
Если Вас не затруднит вышлите пожалуста Вашу процедурку...очень охото посмотреть...

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

Добавлено: 10 дек 2004, 16:06
yuri_z
Зачем все это? Держите журнал за 1 день, на утро копируйте в тестовею базу, оттуда в ДБФ из дбф в архивную за месяц. Сжатие журнала будет выполняться само, каждое утро без проблем. Если заест- значит в журнале появилась кривая запись. Она будет первой при просмотре журнала.

Добавлено: 13 май 2005, 19:18
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