Очистка журнала ????
Модераторы: m0p3e, edward_K, Модераторы
Re: Очистка журнала ????
Stored Procedure высылаю. Если кто-либо не получит - пишите на kleandrov@gmail.com. Я оствляю в журнале последние 10 дней. На корпо это, естественно, не влияет т.к. данные по корпо переношу ежедневно.
Re: Очистка журнала ????
Хотелось бы пообщаться с кем нибудь, кто чистит журнал вручную. Дайте телефон
-
- Новичок
- Сообщения: 20
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Иркутская область, г. Иркутск Аэропорт Иркутск
- Контактная информация:
Re: Очистка журнала ????
Если Вас не затруднит вышлите пожалуста Вашу процедурку...очень охото посмотреть...
-
- Постоянный обитатель
- Сообщения: 165
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Н.Новгород ОАО "Сибур-Нефтехим"
- Контактная информация:
Re: Очистка журнала ????
Зачем все это? Держите журнал за 1 день, на утро копируйте в тестовею базу, оттуда в ДБФ из дбф в архивную за месяц. Сжатие журнала будет выполняться само, каждое утро без проблем. Если заест- значит в журнале появилась кривая запись. Она будет первой при просмотре журнала.
Для 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