Скрипт - выгонялка пользователей + резервная копия базы.

26.02.13

База данных - Архивирование (backup)

В Клиент-серверном режиме работы базы часто возникает необходимость выгонять пользователей чтобы сделать обновление, резервные копии и т.п. Для ленивых, которым неудобно всех выгонять "руками" или ждать окончания рабочего дня, предлагается простой скрипт, который всё сделает за вас.

Скрипт работает очень просто. За вас автоматически авторизуется на кластере серверов и  отключает всех пользователей базы. После чего делается бэкап данных.

Для работы скрипта необходимо зарегистрировать библиотеку ComCntr.dll (Для инициализации объекта V82.Comconnector). Для Windows server 2008 необходимо зарегистрировать COM+ компоненту на основе этой библиотеки.

Скрипт рекомендуется повесить в рассписание сервера.

Ниже приводится пример скрипта (.VBS) для двух баз - зарплаты и бухгалтерии.

'Скопируйте этот скрипт в текстовый файл txt и поменяйте расширение на VBS

'Скрипт выгодняет принудительно пользователей из базы данных посредством подключения к кластеру серверов
'После того как будут выгнаны все пользователи, делается резервное копирование в папку "D:\1c_backup\"
'Сохраненные файлы датируются текущей датой, неактуальные копии НЕ УДАЛЯЮТСЯ

'Процедура закрытия соединений. Создастся служебные пользователи администратора COM.По завершении процедуры они убьются сами
Sub CloseConnection()
    Dim Connector, Agent, Cluster, WorkProcess, WorkProcessConnection, Base, Connections, i, CurrentConnection
    Dim BaseList

    'Идентификаторы баз в кластере серверов
    BaseName = "zarp"
    BaseNameAcc = "buhg"

    Set Connector = CreateObject("V82.COMConnector")

    'Селект текущего кластера серверов
    Set Agent = Connector.ConnectAgent("127.0.0.1")
    Set Cluster = Agent.GetClusters()(0)


    Agent.Authenticate Cluster, "aleksei", "7344"

    'Получение рабочего процесса кластера
    For Each WorkProcess In Agent.GetWorkingProcesses(Cluster)

            ConnectString = WorkProcess.HostName & ":" & WorkProcess.MainPort

            Set WorkProcessConnection = Connector.ConnectWorkingProcess(ConnectString)

            'Установка аутентификации в базах. В бухгалтерии и зарплате создан логин "Алексей"
            WorkProcessConnection.AddAuthentication "Алексей", "tystik1233"

           'Получение списков баз на сервере    
            BaseList = WorkProcessConnection.GetInfoBases()

            'Отключение пользователей из Зарплаты
            For i = LBound(BaseList) To UBound(BaseList)
                If BaseList(i).Name = BaseName Then
                        Set Base = BaseList(i)

                        'Получение соединений с базой, отрубаем всех ктоме COM-Администраторов, он вырубится когда закончится скрипт        
                        Connections = WorkProcessConnection.GetInfoBaseConnections(Base)

                        For j = LBound(Connections) To UBound(Connections)
                            Set CurrentConnection = Connections(j)
                            If CurrentConnection.AppID <> "COMConsole" Then
                         'MSGBOX "Пользователь зарплаты : " & CurrentConnection.UserName
                         WorkProcessConnection.Disconnect CurrentConnection
                            End If
                        Next

                   End If
 
                'Отключение пользователей из бухгалтерии
                If BaseList(i).Name = BaseNameAcc Then
                        Set Base = BaseList(i)

                    'Получение соединений с базой, отрубаем всех ктоме COM-Администраторов, он вырубится когда закончится скрипт
                        Connections = WorkProcessConnection.GetInfoBaseConnections(Base)

                        For l = LBound(Connections) To UBound(Connections)
                            Set CurrentConnection = Connections(l)
                            If CurrentConnection.AppID <> "COMConsole" Then
                         'MSGBOX "Пользователь бухгалтерии : " & CurrentConnection.UserName
                         WorkProcessConnection.Disconnect CurrentConnection
                            End If
                        Next
                End If
            Next    

    Next
End Sub

'Резервная копия, создается файл *.dt по формату ПрефиксБазы_+ТекущаяДата.dt
Sub BackUp()

    'Папка архив
    Dim Folder
    Dim FileNameSalary
    Dim FileNameAcc
    Dim WSShell
    
    Folder = """D:\1c_backup\"

    'Создание шела для выполнения команд windows
    Set WshShell = Wscript.CreateObject("Wscript.Shell")

    'Копирование зарплаты
    FileNAmeSalary = Folder & "salary\Salary_" & Date() & ".dt"""
    CmdLine = """C:\Program Files (x86)\1cv82\8.2.17.143\bin\1cv8.exe"" DESIGNER /S ""127.0.0.1\zarp"" /N ""Алексей"" /P ""tystik1233"" /DUMPIB " & FileNameSalary
    WshShell.Run CmdLine, 1, True    
    'MSgBox CmdLine
    
    'копирование бухгалтерии
    FileNameAcc = Folder & "acc\Acc_" & Date() & ".dt"""
    
    CmdLine = """C:\Program Files (x86)\1cv82\8.2.17.143\bin\1cv8.exe"" DESIGNER /S ""127.0.0.1\buhg"" /N ""Алексей"" /P ""tystik1233"" /DuMPIB " & FileNameAcc
    WshShell.Run CmdLine, 1, True    
    'MsgBox CmdLine

End Sub

'# Основной модуль работы программы, сначала выгоняются юзеры, потом делаются бэкапы
CloseConnection
BackUp

 

 

См. также

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    74820    631    45    

90

Архивирование (backup) Системный администратор Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Программа позволяет выполнять автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    16324    25    6    

31

Архивирование (backup) Системный администратор Платформа 1С v8.3 Бесплатно (free)

Предлагаю Вашему вниманию 3 скрипта на bash (sh) для архивирования (backup) типовых конфигураций на Linux средствами 1С и Postgres. Перед запуском корректно заполните раздел "Параметры" в соответствии с Вашими настройками.

20.01.2025    892    Prelude    5    

9

Архивирование (backup) Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Платные (руб)

Расширение поможет настроить резервное копирование баз SQL в стандартный файл выгрузки баз 1С (*.dt).

2400 руб.

27.08.2024    1807    1    6    

2

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    4252    1CUnlimited    9    

6

Инструменты администратора БД Архивирование (backup) Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Обработка для "обновления" своей тестовой базы из резервной копии рабочей базы без помощи админов.

1 стартмани

21.05.2024    2547    13    baidinden    4    

8

Архивирование (backup) Администрирование СУБД Системный администратор Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    11976    n_mezentsev    15    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bforce 483 26.02.13 11:33 Сейчас в теме
Предлагаю разукрасить код, а то грустно смотрится 8-)
http://s-c.me/scme.aspx
2. Borometr 11 27.02.13 06:05 Сейчас в теме
Много раз слышал фразу, что "выгружать клиент-серверную базу нужно средствами СУБД". Честно говоря не понимал почему. Недавно выгрузил клиент-серверную ЗБУ через конфигуратор, загрузил её во вновь созданную базу уже файловую. Смотрю, а объекты то не все в базе и есть некие отличия от оригинала базы. Почему так получилось, ума не приложу.
3. ITEkb 27.02.13 08:22 Сейчас в теме
Еще бы готовый комплект с инструкцией.. а то в теории не сразу все понятно. Пришлось еще описания искать.
Но все равно спасибо.
4. rus128 2 27.02.13 13:09 Сейчас в теме
огромное количество ошибок.
читается с трудом.
5. Al-X 27.02.13 14:12 Сейчас в теме
Да, хотелось бы готовый скрипт. А то простое копирование, как-то не совсем работает.
6. gala2009 31 28.02.13 19:48 Сейчас в теме
не проверяла, но скрипт нужный
7. 1cmax 153 03.03.13 20:41 Сейчас в теме
куча всякого добра на эту тему давно написано
8. DERL 25.03.13 14:54 Сейчас в теме
Спасибо! Выгонялка очень понадобилась. До этого всегда пользовался Egida Backup, но она очень часто говорит что не нашла бэкап файл во временной директории, а другие архиваторщики не умеют выгонять пользователей или делают это не за бесплатно )).
Подкорректировал ваш скрипт и все работает.
9. 1_C 25.04.13 11:53 Сейчас в теме
Не выгоняет пользователей под тонким клиентом ,как решить эту проблему??
10. DERL 11.09.13 11:42 Сейчас в теме
(9) я для этого использую метод TerminateSession агента
вот пример:

Dim objFSO
Dim objFile
Dim LogFileName
Dim Result

Sub CloseConnection()
Dim Connector, Agent, Cluster, WorkProcess, WorkProcessConnection, Base, Connections, i, CurrentConnection
Dim BaseList


'Идентификаторы баз в кластере серверов
BaseName = "Base8"

Set Connector = CreateObject("V82.COMConnector")

'Селект текущего кластера серверов
Set Agent = Connector.ConnectAgent("MyServer")
Set Cluster = Agent.GetClusters()(0)


Agent.Authenticate Cluster, "Admin", "pass1"

MassBase = Agent.GetInfoBases(Cluster)

For i = LBound(MassBase) To UBound(MassBase)
Set Base = MassBase(i)
'MsgBox Base.Name
If Base.Name = "Base1CV8" Then

Sessions = Agent.GetInfoBaseSessions(Cluster, Base)
For k = LBound(Sessions) To UBound(Sessions)

Set ThisSession = Sessions(k)

If ThisSession.AppID <> "COMConsole" Then
Agent.TerminateSession Cluster, ThisSession
'MsgBox "User: " & ThisSession.UserName & " App ID: " + ThisSession.AppID

End If
Next

Exit For
End If
Next

End Sub
adapter; smirnovserg.s@gmail.com; +2 Ответить
Оставьте свое сообщение