К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Полоностью автоматическое создание копии базы

0 - 25.06.2014 - 05:39
Может, кому надо...

Поставили мне задачу - сделать копию базы SQL с автоматическим обновлением по ночам.
Просто загрузить базу - в принципе достаточно, но придётся вносить обновления конфигурации вручную, что не очень приятно.
Тогда я решил разобраться, как полностью скопировать каталог рабочей базы и настроить его на копию.
Выяснилось, что для этого надо подменить файл 1Cv7.DBA, т.к. в нём хранятся сервер, логин и пароль к базе. Но, там-же хранится и чексумма файла users.usr(нашёл где-то в инете, но как оказалось - не важно). При подмене файла, чексумма расходится и строка теряется. Тогда я решил сделать следующее - подменить чексумму в файле базы копии на чексумму из базы рабочей. Нашёл, как расшифровать этот файл и сделал скрипт vbs.
Скопировал файл из копии в отдельный каталог. Создал батник, который копирует рабочую базу. Запустил скрипт. Он расшифровывает 2 файл - отдельный из копии и из рабочей базы, подменяет чексумму и сохраняет файл в копию. Всё работает.

Вот скрипт, вдруг пригодится кому либо..

Dim SQLKeyCode(36)
Dim ConnectCode(200)
SET FSO = CreateObject("Scripting.FileSystemObject")
SET F = FSO.OpenTextFile("\--\---1Cv7.DBA", 1) - скопированный в отдельный каталог файл из копии
ConnectLen = 0
Do While F.AtEndOfStream = 0
ConnectLen = ConnectLen + 1
ConnectCode(ConnectLen) = asc(F.Read(1))
Loop
F.Close
SQLKey = "19465912879oiuxc ensdfaiuo3i73798kjl"
For k=1 To 36
SQLKeyCode(k) = asc(Mid(SQLKey, k, 1))
Next
Connect = ""

For k=1 to ConnectLen
Connect = Connect + chr(ConnectCode(k) xor SQLKeyCode(((k - 1) mod 36)+1))
next

SET F = FSO.OpenTextFile("---\--\1Cv7.DBA", 1) файл из рабочей базы, но можно брать из копии, т.к. туда скопирован файл из рабочей
ConnectLen = 0
Do While F.AtEndOfStream = 0
ConnectLen = ConnectLen + 1
ConnectCode(ConnectLen) = asc(F.Read(1))
Loop
F.Close

Connect1 = ""
For k=1 to ConnectLen
Connect1 = Connect1 + chr(ConnectCode(k) xor SQLKeyCode(((k - 1) mod 36)+1))
next

Connect=Left(Connect,InStr(Connect,"Chec")-1)+Mid(Connect1,InStr(Connect1,"Chec")) - вот тут надо быть осторожнее, чтоб имя сервера или пользователя или парля не содержало эти символы, можно написать полное слово
ConnectLen=Len(Connect)

set F=FSO.OpenTextFile("путь к копии\1Cv7.DBA",2,1)
For k=1 to ConnectLen
A = chr(asc(Mid(Connect, k, 1)) xor SQLKeyCode(((k - 1) mod 36)+1))
F.Write(A)
next
F.Close



Гость
1 - 25.06.2014 - 08:11
Если вопрос идёт о v7, может использовать штатные средства? пакетный режим конфигуратора
2 - 25.06.2014 - 09:54
Да, 7.7
Как в пакетном режиме можно в базе прописать новый сервер, логин и пароль? Выгрузка-загрузка базы не рассматривается, она сейчас примерно 97 гиг.


К списку вопросов






Copyright ©, Все права защищены