gifts2017

Сокращение журнала регистрации 1С: 8.3

Опубликовал Илья Шу (solary) в раздел Администрирование - Журнал регистрации

Работа с журналом регистрации в 1С: 8.3 изменилась по сравнению с 8.2. Рассмотрим варианты автоматического и ручного обрезания журнала регистрации.

Проблема:  На сервере растут логи баз на платформе 8.3.

Необходимо: Часть логов, например, за месяц, оставить доступными напрямую из базы, остальные обрезать и хранить на других дисках. Делать это необходимо автоматически.

Как было раньше(8.1 и 8.2): В конфигураторе можно было указать настройку: «Разделять хранение журнала по периодам» и указать период, например, Неделя. Таким образом, каждая неделя логов хранилась в отдельном файле. Батником копировались и архивировались старые логии на отдельный диск, чтобы они не занимали место на сервере. При необходимости посмотреть «древний» лог, мы возвращали файл за требуемый период на место и просматривали его стандартными средствами 1С.

Как нынче в 8.3: Журнал регистрации хранится в файле 1Cv8.lgd – это файл базы данных sqlite. Настройка «Разделять хранение журнала по периодам» в конфигураторе отсутствует. Осталась кнопка «Сократить», с помощью которой обрезается часть журнала и переносится в указанный файл. Однако после этого размер логов не уменьшается. Что нужно сделать, чтобы размер файла уменьшился, напишу чуть ниже.

Напомню, что все должно работать автоматически. Конфигурация типовая, поэтому трогать ее не будем.

Что было сделано: В планировщике заданий добавил задание, которое выполняет cmd-файл, который запускает 1С с параметрами. В параметре "/Execute", указан путь до обработки, которая копирует часть журнала регистрации в файл, затем эту часть обрезает. 

В обработке воспользовался процедурами по работе с журналом регистрации:

    Фильтр = Новый Структура("ДатаОкончания");
    Фильтр.ДатаОкончания = НачалоГода(ТекущаяДата());
    СкопироватьЖурналРегистрации(,ИмяФайлаКопииЖурнала, Фильтр);
    ОчиститьЖурналРегистрации(Фильтр);

Обработку запускаю cmd-файлом:

"C:\Program Files\1cv82\common\1cestart.exe" ENTERPRISE /S "ServerName:PortNumber\NameBD" /N "ИмяПользователя" /P "Пароль" /Execute "D:\Сократить журнал регистрации\СократитьЖурналРегистрацииПериод.epf" /C "Период=Неделя; СохранитьЖР=D:\Сократить журнал регистрации\НашиЛоги"

 В параметре «/С» передается период деления журнала регистрации (День / Неделя / Месяц / Год) и путь до места, где будут храниться обрезанные логи.

После сокращения журнала регистрации размер файла журнала регистрации не изменяется. Чтобы он изменился, необходимо остановить агент сервера и выполнить команду vacuum. Затем запустить службу агента сервера. В планировщике заданий добавил задание, которое выполняет следующий cmd-файл:

net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
sleep 5
D:\scripts\sqlite3.exe D:\ДиректорияХраненияЛоговНаСервере\1Cv8Log\1Cv8.lgd vacuum
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Утилиту  sqlite3.exe можно скачать с официального сайта http://www.sqlite.org/

Для того чтобы в cmd-файле можно было использовать кириллицу, сохраняю его через «Notepad++» в кодировке ОЕМ866.

Что получили: Логи хранятся за каждую неделю в отдельных файлах. Размер файла 1Cv8.lgd не увеличивается.

Обрезанную часть логов, перенесенную в отдельный файл, можно просмотреть штатными средствами 1С: Все функции->Стандартные->Журнал регистрации->Еще->Просмотреть из файла.

Для того чтобы, при необходимости была возможность восстановить обрезанные данные написал небольшую внешнюю обработку, в которую так же добавил весь функционал описанный выше.

 

Есть идея более простого обрезания и сохранения логов без запуска 1С на сервере с обработкой: можно останавливать агент сервера, переименовывать файл 1Cv8.lgd и запускать сервер. При первом запуске 1С будет создан новый пустой файл журнала регистрации. Главный минус этого варианта: если после переименования файла потребуется посмотреть журнал регистрации, то придется открывать журнал из внешнего файла, который может лежать на недоступном для пользователя диске сервера. В варианте же приведенном выше, в журнале будет храниться история не меньше, чем за указанный период (День / Неделя / Месяц / Год).

В общем-то и все. Если есть замечания и дополнения, добро пожаловать в комментарии. Все важные нюансы обязательно добавлю в статью. Спасибо.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Работа с журналом регистрации 1С83
.epf 7,48Kb
06.04.16
64
.epf 7,48Kb 64 Скачать
Сократить журнал регистрации
.epf 7,17Kb
06.04.16
57
.epf 7,17Kb 57 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Михаил Петухов (oldfornit) 06.04.16 11:56
в принципе не обязательно выполнять vacuum - новые записи будут добавляться в освободившееся внутри файла базы место
2. борян петров (TODD22) 06.04.16 12:13
(1) oldfornit,
в принципе не обязательно выполнять vacuum

Это когда базу не раздуло. А то у меня например она занимает 90Гб. Из 240 Гб дискового места.... мне она такая большая за год не нужна....
3. Михаил Петухов (oldfornit) 06.04.16 13:37
(2) TODD22, настройте очистку по регламенту, один раз сожмите и в будущем будет занимать ровно столько места, сколько надо. по аналогии с журналом транзакции в MS SQL
4. Сергей (Che) Коцюра (CheBurator) 06.04.16 20:38
5. Илья Шу (solary) 07.04.16 07:40
(2) TODD22, обработка как раз писалась в то время, когда 1С выпустили проблемное обновление платформы и логи баз росли по 300МБ в день...
6. Илья Шу (solary) 07.04.16 07:41
(1) oldfornit, хороший вариант, особенно для тех, кто не перезапускает агент сервера каждый день.
7. Павел Жданов (heavymetal) 13.04.16 08:40
Полезная штука. Тем более заметил, что иногда начинаются непонятные глюки с сервером 1с и зависанием сеансов. Но каким-то странным образом после удаления логов эти глюки уходят, а через некоторое время возвращаются. И каждый раз чистка логов помогает на время.
Не знаю от чего это, мистика просто. Релизы платформ причем могут быть разные. Но на некоторых серверах такого нет. То ли еще и ОС замешали что ли
8. Кирилл Бондаренко (karapuzzzz) 13.04.16 12:40
Вот я не пойму. Раз уж сделала 1С хранение журнала в SQLite, почему не хранить журнал в отдельной СУБД вообще на другом сервере?
9. Илья Шу (solary) 14.04.16 08:00
(8) karapuzzzz,
почему не хранить журнал в отдельной СУБД вообще на другом сервере

предполагаю, что это сделано для универсальности работы с журналом регистрации для серверных и файловых баз.
10. Михаил Петухов (oldfornit) 14.04.16 08:52
(9) solary, а как насчет скорости? Все-таки писать в локальную sqlite/текстовые файлы быстрее, чем на удаленный сервер.
11. Илья Шу (solary) 18.04.16 14:18
(10) oldfornit, возможно. Скорость действительно тут очень важна.
Но когда у вас файловый вариант базы, больше некуда писать, кроме как в локальную sqlite.
12. борян петров (TODD22) 26.04.16 09:57
Если я удалю(перемещу) файл журнала регистрации который на sqlite. У меня при перезапуске сервер новый файл создаст?
А то старый не сжимается. Вываливается при сжатии платформой с ошибкой.
13. Михаил Петухов (oldfornit) 26.04.16 10:37
(12) TODD22, да, сервер создаст новый файл. При желании можно сделать так, чтобы новый журнал был в старом (текстовом формате). Для этого достаточно положить в каталог журналов файл с именем "1с.LGP" (если не напутал)
14. борян петров (TODD22) 26.04.16 10:40
(13) oldfornit, Да создал новый файл.
Мне старый формат не нужен. Лог стал 100Гб и никак не хотел урезаться. При сжатии падал с ошибкой.
15. Александр Петров (danya1606) 20.07.16 15:06
Я так понял обработка при операции копирования журнала регистрации просто заменяет данные в старом журнале регистрации т.е удаляет старые и добавляет новые записи, сделанной аналогичным образом, а не дополняет?
16. Илья Шу (solary) 21.07.16 15:28
(15) danya1606, верно, копирует часть журнала регистрации текущей базы в файл. Если файл уже существует, то он будет заменен. Если установлена галка "Скопировать и сократить", то ЖР будет скопирован в файл и затем удален из базы до указанной даты.
17. Александр Петров (danya1606) 26.07.16 10:44
(16) solary, А можно ли как то добиться того что - архивный файл ЖР будет дополняться записями допустим делать такой перенос каждый квартал?
18. Илья Шу (solary) 27.07.16 12:31
(17) danya1606, стандартная процедура СкопироватьЖурналРегистрации(<ИмяВходногоФайла>, <ИмяВыходногоФайла>, <Фильтр>) заменяет файл, если он существует. Можно восстанавливать ЖР из файла в базу, а потом снова обрезать но большим периодом))) Но в чем смысл?
19. Александр Петров (danya1606) 29.07.16 16:51
(18) solary, Смысл в том чтобы держать копить один файл журнала регистрации допустим за год, ну а с функцией скопировать получается что он делает копию ЖР а не дополняет тот архивный. Объясню по простому например учет в программе 1С начнем с 01-01-2016, т.е. от это даты и начинается ЖР:
1)01-04-2016 делаем первый - срезку ЖР
2)01-07-2016 делаем вторую срезку ЖР получается второй отдельный файл
3)01-10-2016 делаем третью срезку ЖР получается третий отдельный файл
В итоге если вдруг нам понадобиться проанализировать за целый год разом ЖР по определенному объекту нам придется три раз файлы подменять для данной операции.
20. Сан Саныч (herfis) 29.07.16 17:59
Чтобы не иметь гемора с настройкой ротации логов, я просто веду ЖР в старом формате (можно стопорнуть сервак и подложить пустой файлик со старым названием, после старта ЖР будет вести в него запись в старом формате). И вообще считаю перевод логов на SQLite ошибкой.
21. Алексей Константинов (enzain) 11.08.16 11:28
Никто не реализовывал службу переноса всех данных из файла в, например, MS-SQL?
А то логи, за пару месяцев в 90 гиг немножко утомили, если честно уже ....
22. Михаил Петухов (oldfornit) 11.08.16 12:42
(21) enzain, реализовывал. Не стоит оно того. Запись в базу данных происходит достаточно медленно - практически день в день. Итоговые размеры базы - по размеру больше чем в SQLITE.

Есть решение по переносу ЖР в elasticsearch - посмотрите тут вебинар по big data
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа