Более того, работа с таким журналом может вызывать блокировку работы всех пользователей.
Для предотвращения разрастания журнала необходимо устранять настройками запись ненужных событий и перемещать в архивы события с неактуальными датами.
Избавиться от уже записанной ненужной информации можно с помощью программы DB Browser for SQLite указанным в этой статье способом.
Порядок действий:
- Открыть файл со списками баз сервера 1С, найти в файле нужную запись поиском по имени базы. По найденной записи определить каталог хранения журнала нужной базы.
Пример:
Текст в файле:
{2ae78977-e8b2-4f7f-b31f-1f10edf9ae05,»Test_Base_001″,»»,»MSSQLServer»,»MyServerFive»,»Test_Base_001″,»sa»,»nCOQ5/A0Nn/x3dLF/qZTwX+Ro0XYwOmsUMIgnklDHBs=»,»CrSQLDB=Y;DB=Test_Base_001;DBMS=MSSQLServer;DBSrvr=MyServer
Каталог журнала:
C:Program Files1cv8srvinfo
eg_15412ae78977-e8b2-4f7f-b31f-1f10edf9ae051Cv8Log)
- Остановить 1С Сервер.
- Сделать резервную копию каталога с журналом 1CV8Log.
- Скачать и установить программу «DB Browser for SQLite» с официального сайта:
- Открыть базу журнала в программе (обязательно выбрать тип файла All Files)
- Определить признаки для поиска ненужной информации журнала и вставить в указанный ниже пример кода ( можно использовать приведенный код без изменений-если это конфигурации на основе Бухгалтерия 3.0).
Пример для конфигураций на основе Бухгалтерия 3.0
6.1 Удаление записей с отбором по кодам событий:
Drop table Filter;
Create table Filter(Code int, name TEXT);
INSERT INTO Filter (Code,name) SELECT code,name from EventCodes where name Like ‘%СПАРК%’;
INSERT INTO Filter (Code,name) SELECT code,name from EventCodes where name Like ‘%Новости%;’
delete from EventLog where EventCode in (Select code from Filter);
- 2 Удаление записей с отбором по видам метаданных:
Drop table Filter;
Create table Filter(Code int, name TEXT);
INSERT INTO Filter (Code,name) SELECT code,name from MetadataCodes where name Like ‘%ДанныеМонитораРуководителя%’;
INSERT INTO Filter (Code,name) SELECT code,name from MetadataCodes where name Like ‘%бит_фн_Оповещения%’;
INSERT INTO Filter (Code,name) SELECT code,name from MetadataCodes where name Like ‘%бит_фн_РегистрацияСобытийОповещений%’;
delete from EventLog where MetadataCodes in (Select code from Filter);
- 3 Удаление всех записей с пустым полем Метаданные
Delete from EventLog where metadataCodes=»»;
7.
Копируем код группами в браузер и выполняем (выделить нужные строки блоком или выбрать одну строку и нажать «F5»).
Примечание
(Для проверки кода можно сначала заменить оператор “delete ” на “ select *”
Можно использовать более сложную команду с присоединением вспомогательных таблиц, вставляя в нее необходимые условия отбора, например:
Select EL.Date, EL.UserCode, AC.Name,AC.Code , CC.Name,CC.Code from EventLog As EL LEFT OUTER JOIN AppCodes As AC On EL.AppCode=AC.Code LEFT OUTER JOIN ComputerCodes As CC On EL.ComputerCode=CC.Code where AC.Code=3 And EL.computerCode=1 And EL.rowID <10000
Или
Select EL.Date, EL.UserCode, AC.Name,AC.Code , CC.Name,CC.Code from EventLog As EL LEFT OUTER JOIN AppCodes As AC On EL.AppCode=AC.Code LEFT OUTER JOIN ComputerCodes As CC On EL.ComputerCode=CC.Code where where metadataCodes=»» And EL.rowID <10000)
8.После выполнения команд сохранить результат:
9. Сжать базу журнала
10. Обязательно закрыть DB Browser for SQLite.
11. Запустить службу 1С Сервера.
12. Проверить результат, если удалили лишнее – тогда снов остановить службу Сервер 1С и возвратить из копии каталог 1Cv8Log.
Примечание:
— До выполнения указанных операций обязательно сделайте копию журнала. Копия рабочей базы тоже не помешает.
— Можно проверить удаление на копии журнала и увидеть результат, привязав журнал к копии рабочей базы. Если все хорошо – делайте свежую копию журнала и сжимайте рабочий.
— Сначала лучше выполнить операцию с максимальным количеством удаляемых записей (в примере 6.3)
— При указанных настройках у меня журнал сжался с 24 Гб до 1.8 Гб. Время удаления составило 2 часа.
— Полезные ссылки:
http://forum.infostart.ru/forum9/topic118049/ — обсуждение темы о тонкой настройке событий регистрации
https://1c-programmer-blog.ru/programmirovanie/zhurnal-registracii-v-1s-8.html — описание журнала регистрации, подключение журнала как внешнего источника данных 1С.
http://forum.infostart.ru/forum83/topic144282/ — в обсуждении (ответ 3 — Виталий Чайкин (Vitaly1C8) ) приведен способ сжатия с помощью SQLite 3.
В линуксе если нужно просто дефрагментировать файл журнала (после сокращения, например), достаточно команды:
find /home/usr1cv8/ -iname «*.lgd» -exec sqlite3 {} VACUUM ;
В Windows тоже примерно так — если установить SQLite3:
(http://www.w3ii.com/ru/sqlite/sqlite_vacuum.html)
Руководство VACUUM
Ниже приводится простой синтаксис для выдачи команды VACUUM для всей базы данных из командной строки:
$sqlite3 database_name «VACUUM;»
Вы можете запустить VACUUM из SQLite запроса, а также следующим образом:
sqlite> VACUUM;
Вы также можете запустить VACUUM на конкретной таблице следующим образом:
sqlite> VACUUM table_name;
Но мне понравилось работать с DB Browser for SQLite — все удобно, наглядно.
Скопировал журнал для обработки на более мощный сервер. База журнала 25 Гб — по указанным в статье настройкам время выполнения:
Запрос успешно выполнен: delete from EventLog where metadataCodes=»» (заняло 2151460мс, 141438660 строк изменено)
Запрос успешно выполнен: delete from EventLog where EventCode in (Select code from Filter); (заняло 321319мс, 2807 строк изменено)
Запрос успешно выполнен: delete from EventLog where MetadataCodes in (Select code from Filter); (заняло 292202мс, 2067792 строк изменено)
И примерно 10-20 минут на сжатие.
Странное «сжатие»… Сжатие — путем удаления?
Лог и подразумевает, что в него попадают все сообщения, там нет понятия «ненужная информация».
Есть «полная информация», и «отбор».
По каким вообще критериям здесь определяется «ненужная информация»?
Нормальная обрезка лога — это сохранение данных с даты до даты, усечение лога, и сжатие пустого пространства.
А тут — ну давайте, все сообщения вообще очистим, совсем хороший лог будет, в ноль, чистый и маленький.
Этот метод, кстати, и у Гилева описан, так что — неудивительно, что рабочий, но безграмотный в плане обработки БД. Там у него сообщения о фоновых заданиях удаляются — которые, например, вообще являются основными в базах, где все завязано на обмен.
Я показал методику с конкретными примерами. Каждый может удалить только то, что ему не нужно. Думаю, что каждый разберется, что ему оставить в логе.
Нас больше всего интересует история изменения объектов — кто, когда и каким способом, причем за достаточно длительный период — поэтому обрезать период неудобно.