Страница 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