Имя: Пароль:
1C
 
Автоматический запуск архивирования/тестирования/исправления БД 1С 8.0
0 Evrepid
 
06.11.07
12:49
Давно собирался написать не большой пост для тех кто занимается администрированием 1С или для тех кому по какой либо причине может понадобиться такая вешица.
Здесь не не буду обсуждать всех возможных способов выполнения автоматического архивирования/тестирования и т.д.
А обратимся к тем возможностям которые предоставляет нам ОС Windows/DOS и сама 1С.

Итак, задача автоматически выполнить архивирование, тестирование и исправление ИБ.

Зачем?
Для того что бы всегда иметь подрукой в нужном месте архив, что бы можно было откатиться без проблем или восстановиться при разрушении БД.
(Считаем что БД работает с сервером 1С предприятия, файл серверный режим рассмотрим немного позднее)

Первое что надо сделать это каким то образом отключить всех пользователей от БД, в случае если они к ней подключены.

Для этого воспользуемся файлом написанным на VBS с примерно таким текстом (ConnectionOff.vbs):
Dim Connector
Set Connector = CreateObject("v8.ComConnector")
DIM Server
Set Server = Connector.ConnectServer("ServerName")
Server.AddAuthentication "Robot", "robotpassword"
Dim IBDESC
Set IBDESC = Server.CreateInfoBaseInfo()
IBDESC.Name = "DataBaseName"
DIM Connections
Connections = Server.GetIBConnections(IBDESC)
rem Disconnect all users from data base
Dim i
Dim Connection
For i = LBOUND(Connections) To UBound(Connections)
Set Connection = Connections(i)
If Connections(i).userName <> "Robot" then
Server.Disconnect Connection
end if
Next
rem Disconnect Robot
Dim i
Dim Connection
For i = LBOUND(Connections) To UBound(Connections)
Set Connection = Connections(i)
Server.Disconnect Connection
Next


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

Ну еще парочка комментариев к тексту вместо Robot и Robotpassword указываем имя имя пользователя ИБ с администраторскими правами и его пароль, В место ServerName и DataBaseName указываем наименования Сервера 1С и имя базы данных 1С.

Итак проверили убедились, что  пользователи отключаются, а мы отключаемся от БД последними, приступаем к следующему шагу.

Второе, что надо сделать это написать "bat" файл для запуска операций.
Выглядеть это будет примерно так:
(StartReserve.bat)

@echo off

rem
rem File was created for automation reglametation operations with Data Base 1C
rem
rem Change current directory to C:\temp
@Echo Change current dir to c:\temp
cd c:\temp
rem
rem Disconnect All users from DataBase
rem
@echo Disconnect all user from DataBase
@echo %Date% %Time%
ConnectionOff.vbs
rem
rem Create variable for get string with date into
rem
set CurrentDate=%DATE%
set CurrentTime=%TIME%
rem
rem Output text about reserve copy Data base
rem
set FileNameReserve=c:\temp\1C80_UPP_%CurrentDate:~8,2%%currentDate:~3,2%%currentDate:~0,2%_%CurrentTime:~0,2%%CurrentTime:~3,2%%CurrentTime:~6,2%.zip%
if "%CurrentTime:~0,1%" == " " (
set FileNameReserve=c:\temp\1C80_UPP_%CurrentDate:~8,2%%currentDate:~3,2%%currentDate:~0,2%_0%CurrentTime:~1,1%%CurrentTime:~3,2%%CurrentTime:~6,2%.zip%
@echo Variant 2
) else (@echo Variant 1)

@echo Create file reserve copy: %FileNameReserve%
@echo Start:%DATE% %TIME%
rem
rem Make start up 1C with command reserve copy
rem
"C:\Program Files\1cv8\bin\1cv8.exe" config "/ServerName\DataBaseName /NRobot /Probotpassword /DisableStartupMessages /DumpIB%FileNameReserve%" || exit 1
rem
rem Was Ok!
rem
@echo End :%DATE% %TIME%
@echo Reserve copy was make. Ok!
rem
rem Output text about check and repair Data Base
rem
@echo Make Check and Repair Data Base.
@echo Start:%DATE% %TIME%
rem
rem Make start up 1C with command check and repair
rem
"C:\Program Files\1cv8\bin\1cv8.exe" config "/SServerName\DataBaseName /NRobot /Probotpassword /DisableStartupMessages /IBCheckAndRepair -ReIndex -RecalcTotals -IBCompression -BadRefCreate -BadDateCreate" || exit 1
rem
rem Was Ok!
rem
@echo End:%DATE% %TIME%
@echo Check and Repair was make. Ok!
rem
rem
rem Create variable for get ctring with date into
rem
set CurrentDate=%DATE%
set CurrentTime=%TIME%
rem
rem Output text about reserve copy Data base
rem
set FileNameReserve=c:\temp\1C80_UPP_%CurrentDate:~8,2%%currentDate:~3,2%%currentDate:~0,2%_%CurrentTime:~0,2%%CurrentTime:~3,2%%CurrentTime:~6,2%.zip%
if "%CurrentTime:~0,1%" == " " (
set FileNameReserve=c:\temp\1C80_UPP_%CurrentDate:~8,2%%currentDate:~3,2%%currentDate:~0,2%_0%CurrentTime:~1,1%%CurrentTime:~3,2%%CurrentTime:~6,2%.zip%
@echo Variant 2
) else (@echo Variant 1)
@echo Create reserve copy after check and repair: %FileNameReserve%
@Echo Start:%DATE% %TIME%
rem
rem Make start up 1C with command reserve copy
rem
"C:\Program Files\1cv8\bin\1cv8.exe" config "/SServerName\DataBaseName /NRobot /Probotpassword /DisableStartupMessages /DumpIB%FileNameReserve%" || exit 1
rem
rem Was Ok!
rem
@echo End:%DATE% %TIME%
@echo Reserve copy after check and repair was make. Ok!

set CurrentDate=
set CurrentTime=
@echo ALL OPERATION WAS "OK".
@echo on

Собственно, что делает этот батник?
Запускает файл с алгоритмом отключения пользователей, запускает 1С с праметрами резервного копирования, затем запускает 1С в режиме конфигуратор для выполнения тестирования/исправления БД, а затем еще раз делается резервная копия БД.
Приэтом что бы небыло путаницы в файлах именя создаются с учетом даты и времении начала работы bat-файла.

Теперь осталось сдлеать шаг третий, это создать на компьютере назначенное в планировщике задание и все.
Команда для планировщика будет: StartReserve.bat>Result.txt
для чего? для того что бы можно было в случае чего понять на выполнении какой операции произошел сбой выполнения bat файла.

Желаю удачи в пользовании.
1 ТелепатБот
 
гуру
06.11.07
12:49
2 Agidel
 
14.12.07
11:23
А где же обещанный файл серверный режим ?
Очень надо ;)
3 MaxS
 
14.12.07
13:32
есть ещё один вариант - использование регламентных заданий 1С 8.1.
я сделал отдельную конфигурацию на сервере, которая занимается обслуживанием баз 1С 8.0. (1С81робот)
Несколько месяцев работает, всё это время что-то дорабатывается, что-то лишнее в конфигурации отмирает и удаляется... скоро будет супер продвинутый робот...
...
сейчас он умет:
- запускать произвольные обработки 1С 8.0 в базе 1С 8.0
(например перепроведение всех документов с минимальной даты последовательности, если она не раньше даты запрета редактирования, устойчив к ошибкам проведения...ну это отдельная тема...)
- запускать обработки в составе 1С81робот для обслуживания
(например загружает в себя курсы валют, а потом через Comconnector раздаёт всем базам)
- делать бэкап
- обновлять конфигурацию (так же как F7)
- перезагружать сервер 1С (идёт доработка анализа "а можно ли перезагрузить если работает такой-то пользователь...")
- в планах научить его брать из хранилища конфигурацию, делать файл поставки и обновлять рабочую базу (предварительно делая все нужные бэкапы).

в 1С81робот есть справочник баз, там все параметры - серверная или файловая, каталог бэкапов и т.д. в табличной части - расписания заданий...

хотел бы увидеть подобные разработки, может кто слышал есть такие? ;)
если доведу до ума свою, выложу куда-нибудь. ;)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн