Набор скриптов oscript для копирования баз данных 1C / MS SQL и развертывания на целевой системе.
1C Database copier (cpdb)
Типичный сценарий работы:
- Сформировать резервную копию базы
- Передать резервную копию на целевую систему
- Через общую папку / С использованием Yandex-Диск
- Возможно разбиение больших файлов на части (используется 7-zip)
- Восстановить резервную копию в новую или существующую базу
- Подключить базу к хранилищу конфигурации
Требуются следующие библиотеки и инструменты:
| Возможные команды |
|
| help |
- Вывод справки по параметрам |
| backup |
- Создание резервной копии базы MS SQL |
| restore |
- Восстановление базы MS SQL из резервной копии |
| compress |
- Выполнить компрессию страниц таблиц и индекстов в базе MS SQL |
| createib |
- Создать информационную базу на сервере 1С |
| dumpib |
- Выгрузить информационную базу в файл |
| restoreib |
- Загрузить информационную базу из файла |
| putyadisk |
- Помещение файла на Yandex-Диск |
| getyadisk |
- Получение файла из Yandex-Диска |
| mapdrive |
- подключить сетевой диск |
| umapdrive |
- отключить сетевой диск |
| copy |
- копировать/переместить файлы |
| split |
- Архивировать файл с разбиением на части указанного размера (используется 7-Zip) |
| merge |
- Разархивировать файл (используется 7-Zip) |
| uconstorage |
- Отключить информационную базу от хранилища конфигураций |
| constorage |
- Подключить информационную базу к хранилищу конфигураций |
| batch |
- Последовательное выполнение команд по сценариям, заданным в файлах (json) |
Для подсказки по конкретной команде наберите help <команда>
backup - Создание резервной копии базы MS SQL
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -sql-srvr |
- Адрес сервера MS SQL |
| -sql-db |
- Имя базы для восстановления |
| -sql-user |
- Пользователь сервера |
| -sql-pwd |
- Пароль пользователя сервера |
| -bak-path |
- Путь к резервной копии |
Пример:
cpdb backup -sql-srvr MySQLName MyDatabase -sql-user sa -sql-pwd 12345 -bak-path "d:\MSSQL\Backup\MyDatabase_copy.bak"
restore - Восстановление базы MS SQL из резервной копии
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -sql-srvr |
- Адрес сервера MS SQL |
| -sql-db |
- Имя базы для восстановления |
| -sql-user |
- Пользователь сервера |
| -sql-pwd |
- Пароль пользователя сервера |
| -bak-path |
- Путь к резервной копии |
| -create-db |
- Создать базу в случае отсутствия |
| -db-owner |
- Имя владельца базы после восстановления |
| -compress-db |
- Включить компрессию страниц таблиц и индексов после восстановления |
| -shrink-db |
- Сжать базу после восстановления |
| -db-path |
- Путь к каталогу файлов данных базы после восстановления |
| -db-logpath |
- Путь к каталогу файлов журнала после восстановления |
| -db-recovery |
- Установить модель восстановления (RECOVERY MODEL), возможные значения "FULL", "SIMPLE", "BULK_LOGGED" |
| -db-changelfn |
- Изменить логические имена файлов (LFN) базы, в соответствии с именем базы |
| -delsrc |
- Удалить файл резервной копии после восстановления |
Пример:
cpdb restore -sql-srvr MyNewSQLServer -sql-db MyDatabase_copy -sql-user SQLUser -sql-pwd 123456 -bak-path "d:\data\MyBackUpfile.bak" -create-db -shrink-db -db-owner SQLdbo -db-path "d:\MSSQL\data" -db-logpath "e:\MSSQL\logs" -db-recovery SIMPLE -delsrc
compress - Выполнить компрессию страниц таблиц и индекстов в базе MS SQL
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -sql-srvr |
- Адрес сервера MS SQL |
| -sql-db |
- Имя базы для восстановления |
| -sql-user |
- Пользователь сервера |
| -sql-pwd |
- Пароль пользователя сервера |
| -shrink-db |
- Сжать базу после выполнения компрессии |
Пример:
cpdb compress -sql-srvr MyNewSQLServer -sql-db MyDatabase_copy -sql-user SQLUser -sql-pwd 123456 -shrink-db
createib - Создать информационную базу на сервере 1С
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -ib-srvr |
- Адрес кластера серверов 1С ([<протокол>://]<адрес>[:<порт>]) |
| -ib-ref |
- Имя базы в кластере 1С |
| -errifexist |
- Сообщить об ошибке если ИБ в кластере 1С существует |
| -dbms |
- Тип сервера СУБД (MSSQLServer <по умолчанию>; PostgreSQL; IBMDB2; OracleDatabase) |
| -db-srvr |
- Адрес/имя сервера СУБД |
| -db-user |
- Пользователь сервера СУБД" |
| -db-pwd |
- Пароль пользователя сервера СУБД" |
| -db-name |
- Имя базы на сервере СУБД (если не указано, используется имя базы 1С)" |
| -sql-offs |
- Смещение дат на сервере MS SQL (0; 2000 <по умолчанию>) |
| -createdb |
- Создавать базу данных в случае отсутствия |
| -allowschjob |
- Разрешить регламентные задания |
| -errifexist |
- Сообщить об ошибке если ИБ в кластере 1С существует |
| -cadm-user |
- Имя администратора кластера |
| -cadm-pwd |
- Пароль администратора кластера |
| -nameinlist |
- Имя в списке баз пользователя (если не задано, то ИБ в список не добавляется) |
| -tmplt-path |
- Путь к шаблону для создания информационной базы (*.cf; *.dt). Если шаблон не указан, то будет создана пустая ИБ |
| -v8version |
- Версия платформы 1С |
Пример:
cpdb createib -ib-srvr My1CServer -ib-ref TST_DB_MyDomain -db-srvr MySQLServer -db-user _1CSrvUsr1 -db-pwd p@ssw0rd -db-name TST_DB_MyDomain -createdb -nameinlist "My test base" -errifexist
dumpib - Выгрузить информационную базу в файл
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -ib-path |
- Строка подключения к ИБ |
| -ib-user |
- Пользователь ИБ |
| -ib-pwd |
- Пароль пользователя ИБ |
| -dt-path |
- Путь к файлу для выгрузки ИБ |
| -uccode |
- Ключ разрешения запуска ИБ |
| -v8version |
- Версия платформы 1С |
Пример:
cpdb dumpib -ib-path "/FD:/data/MyDatabase" -dt-path "d:\data\1Cv8.dt" -ib-user Администратор -ib-pwd 123456 -v8version 8.3.8 -uccode 1234
restoreib - Загрузить информационную базу из файла
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -ib-path |
- Строка подключения к ИБ |
| -ib-user |
- Пользователь ИБ |
| -ib-pwd |
- Пароль пользователя ИБ |
| -dt-path |
- Путь к файлу для загрузки в ИБ |
| -delsrc |
- Удалить файл после загрузки |
| -uccode |
- Ключ разрешения запуска ИБ |
| -v8version |
- Версия платформы 1С |
Пример:
cpdb restoreib -ib-path "/FD:/data/MyDatabase" -dt-path "d:\data\1Cv8.dt" -ib-user Администратор -ib-pwd 123456 -v8version 8.3.8 -uccode 1234 -delsrc
putyadisk - Помещение файла на Yandex-Диск
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -file |
- Путь к локальному файлу для помещения на Yandex-Диск |
| -list |
- Путь к локальному файлу со списком файлов, которые будут помещены на Yandex-Диск (параметр -file игнорируется) |
| -ya-token |
- Token авторизации |
| -ya-path |
- Путь к каталогу на Yandex-Диск, куда помещать загружаемые файлы |
| -check-hash |
- (TBE) Проверять соответствие хешей скопированных файлов. Работает только в том случае, когда имеется файл <имяархива>.hash с MD5-хешами частей файлов (формируется командой split) |
| -delsrc |
- Удалить исходные файлы после отправки |
Пример:
cpdb putyadisk -file "d:\MSSQL\Backup\MyDatabase_copy.bak" -ya-token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX -ya-path "/transfer" -delsrc
cpdb putyadisk -list "d:\MSSQL\Backup\MyDatabase_copy.split" -ya-token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX -ya-path "/transfer" -delsrc
getyadisk - Получение файла из Yandex-Диска
Параметры:
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -path |
- Путь к локальному каталогу для сохранения загруженных файлов |
| -ya-token |
- Token авторизации |
| -ya-file |
- Путь к файлу на Yandex-Диск для загрузки |
| -ya-list |
- Путь к файлу на Yandex-Диск со списком файлов, которые будут загружены (параметр -ya-file игнорируется) |
| -delsrc |
- Удалить файлы из Yandex-Диск после получения |
Пример:
cpdb getyadisk -path "d:\MSSQL\Backup\MyDatabase_copy.bak" -ya-token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX -ya-file "/transfer/MyDatabase_copy.bak" -delsrc
cpdb getyadisk -path "d:\MSSQL\Backup\MyDatabase_copy.bak" -ya-token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX -ya-list "/transfer/MyDatabase_copy.split" -delsrc
Для получения токена авторизации Яндекс-диска:
- Зарегистрировать приложение: https://oauth.yandex.ru/client/new
- Дать нужные права для приложения
- Сервис Яндекс.Диск REST API
- Запись в любом месте на Диске
- Чтение всего Диска
- Доступ к информации о Диске
- Нажать "Создать приложение" внизу формы: после этого будет показан ID пароль, прочие параметры созданного приложения
- Получить токен для приложения: перейти по ссылке https://oauth.yandex.ru/authorize?response_type=token&client_id=<ВАШ ID (ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)>
- На вопрос "Приложение OScript.YaDisk запрашивает доступ к вашим данным на Яндексе" ответить "Разрешить": после этого на экране появится сформированный токен
mapdrive - Подключить сетевой диск
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -map-drive |
- Имя устройства (буква диска) |
| -map-res |
- Путь к подключаемому ресурсу |
| -map-user |
- Пользователь для подключения |
| -map-pwd |
- Пароль для подключения |
Пример:
cpdb mapdrive -map-drive N -map-res "\\MyServer\MyFolder" -map-user superuser -map-pwd P@$$w0rd
umapdrive - Отключить сетевой диск
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -map-drive |
- Имя устройства (буква диска) |
Пример:
cpdb umapdrive -map-drive N
copy - скопировать/переместить файлы
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -src |
- Файл источник |
| -dst |
- Файл/каталог приемник (если оканчивается на "", то каталог) |
| -replace |
- Перезаписывать существующие файлы |
| -delsrc |
- Выполнить перемещение файлов (удалить источник после копирования) |
| -lastonly |
- Копирование файлов, измененных не ранее текущей даты |
Простой пример. Копирование файла в каталог:
cpdb copy -src "d:\MSSQL\Backup\MyDatabase_copy.bak" -dst "N:\NewDestination\" -replace -delsrc
Сложный пример. В каталоге-источнике имеется несколько резервных копий с датой в имени файла. Необходимо скопировать только свежий файл (созданный сегодня). Новое имя файла не должно содержать дату:
cpdb copy -src "d:\MSSQL\Backup\MyDatabase_copy*.bak" -dst "N:\NewDestination\MyDatabase_copy.bak*" -replace -delsrc -lastonly
split - Архивировать файл с разбиением на части указанного размера
Используется 7-zip
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -src |
- Путь к исходному локальному файлу для разбиения |
| -arc |
- Имя файла архива (не обязательный, по умолчанию <имя исходного файла>.7z) |
| -list |
- Имя файла, списка томов архива (не обязательный, по умолчанию <имя исходного файла>.split) |
| -vol |
- Размер части {<g>, <m>, <b>} (по умолчанию 50m) |
| -hash |
- Рассчитывать MD5-хеши файлов частей |
| -hash-file |
- Имя файла, списка хэшей томов архива (не обязательный, по умолчанию <имя исходного файла>.hash) |
| -delsrc |
- Удалить исходный файл после выполнения операции |
Пример:
cpdb split "d:\MSSQL\Backup\MyDatabase_copy.bak" -list "d:\MSSQL\Backup\MyDatabase_copy.split" -vol 40m -delsrc
merge - Разархивировать файл
Используется 7-zip
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -file |
- Имя первого файла архива |
| -list |
- Имя файла, списка файлов архива (параметр -file игнорируется) |
| -delsrc |
- Удалить исходные файлы после выполнения операции |
Пример:
cpdb merge -file "d:\MSSQL\Backup\MyDatabase_copy.7z.001" -delsrc
cpdb merge -list "d:\MSSQL\Backup\MyDatabase_copy.split" -delsrc
uconstorage - Отключить информационную базу от хранилища конфигурации
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -ib-path |
- Строка подключения к ИБ"); |
| -ib-user |
- Пользователь ИБ"); |
| -ib-pwd |
- Пароль пользователя ИБ"); |
| -v8version |
- Маска версии платформы 1С"); |
| -uccode |
- Ключ разрешения запуска ИБ"); |
cpdb uconstorage -ib-path "/FD:/data/MyDatabase" -ib-user Администратор -ib-pwd 123456 -v8version 8.3.8 -uccode 1234
constorage - Подключить информационую базу к хранилищу конфигурации
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -ib-path |
- Строка подключения к ИБ |
| -ib-user |
- Пользователь ИБ |
| -ib-pwd |
- Пароль пользователя ИБ |
| -storage-path |
- Адрес хранилища конфигурации |
| -storage-user |
- Пользователь хранилища конфигурации |
| -storage-pwd |
- Пароль пользователя хранилища конфигурации |
| -v8version |
- Маска версии платформы 1С |
| -uccode |
- Ключ разрешения запуска ИБ |
| -update-ib |
- Выполнить обновление ИБ (применить полученную из хранилища конфигурацию к ИБ) |
cpdb constorage -ib-path "/FD:/data/MyDatabase" -ib-user Администратор -ib-pwd 123456 -storage-path "tcp://MyServer/MyRepository" -storage-user MyDatabase_usr1 -storage-pwd 123456 -v8version 8.3.8 -uccode 1234
batch - Выполнить сценарий
Последовательно выполняет команды указнные в файле JSON
| Параметры: |
|
| <Сценарии> |
- Файлы JSON содержащие команды и значения параметров, могут быть указаны несколько файлов разделенные "";"" (обработка файлов выполняется в порядке следования) |
Пример:
cpdb batch "./rest_TST_DB_MyDomain.json"
Пример сценария:
{
"params": {},
"stages": {
"Восстановление": {
"description": "Восстановление из резервной копии",
"tool": "cpdb",
"command": "restore",
"params": {
"-sql-srvr": "MySQLServer",
"-sql-user": "_1CSrvUsr1",
"-sql-pwd": "p@ssw0rd",
"-bak-path": "d:\\tmp\\PRD_DB_MyDomain.bak",
"-sql-db": "TST_DB_MyDomain",
"-db-owner": "_1CSrvUsr1",
"-db-path": "D:\\sqldata",
"-db-logpath": "D:\\sqldata",
"-db-recovery": "SIMPLE",
"-db-changelfn": true
}
},
"Отключение": {
"description": "Отключение от хранилища",
"tool": "cpdb",
"command": "uconstorage",
"params": {
"-ib-path": "/SSport1\\TST_DB_MyDomain",
"-ib-user": "\"1C User\"",
"-ib-pwd": "p@ssw0rd"
}
},
"Сжатие": {
"description": "Сжатие базы данных",
"tool": "cpdb",
"command": "compress",
"params": {
"-sql-srvr": "Sport1",
"-sql-user": "_1CSrvUsr1",
"-sql-pwd": "p@ssw0rd",
"-sql-db": "TST_DB_MyDomain",
"-shrink-db": true
}
}
}
}
scripts - Выполнить скрипты из файла(ов)
| Параметры: |
|
| -params |
- Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
| -sql-srvr |
- Адрес сервера MS SQL |
| -sql-user |
- Пользователь сервера |
| -sql-pwd |
- Пароль пользователя сервера |
| -sql-files |
- Файлы SQL, содержащие текст скрипта, могут быть указаны несколько файлов, разделённые ";" |
| -sql-vars |
- Строка переменных (без пробелов) для скриптов SQL, имя переменной и значение разделены "=", переменные разделены ";" |
Пример:
cpdb scripts -params "./JSON/cpdb_env.json" -sql-files "./tools/config_error.sql;./tools/print_message.sql" -sql-vars "varBase=MyDB;message=\"Hello world\""
Пример config_error.sql:
use $(varBase)
go
truncate table [dbo].[ConfigSave]
go
UPDATE SchemaStorage SET Status = 100
Пример print_message.sql:
PRINT N'$(message)'
Использование c Jenkins
В jenkinsfile описан конвейер, выполняющий следующий сценарий:
- Создание резервной копии указанной базы на системе-источнике
- Разбиение резервной копии на части (используется 7-Zip)
- Копирование частей файла на Yandex-Диск (в указанный каталог)
- Получение файла резервной копии из Yandex-Диск на системе-приемнике
- Восстановление указанной базы из резервной копии
- Подключает базу к хранилищу конфигурации
| Переменные окружения конвейера |
|
| src_db_cred |
- Идентификатор credentials для доступа к MS SQL в системе, где расположена база-источник |
| src_agent_label |
- Метка агента Jenkins в системе, где расположена база-источник |
| src_server_name |
- Имя сервера MS SQL в системе-источнике |
| src_db_name |
- Имя базы-источника |
| src_bak_path |
- Путь к каталогу резервной копии в системе-источнике |
|
|
| bak_file_name |
- Имя файла резервной копии |
| list_file_name |
- Имя файла списка томов архива |
|
|
| storage_token |
- Token для доступа к Yandex-Диску |
| storage_path |
- Путь к каталогу на Yandex-Диск для передачи файлов в систему-приемник |
|
|
| dst_db_cred |
- Идентификатор credentials для доступа к MS SQL в системе-приемнике |
| dst_agent_label |
- Метка агента Jenkins в системе, где расположена база-приемник |
| dst_bak_path |
- Путь к каталогу резервной копии в системе-приемнике, в который будут загружены файлы из Yandex-Диска |
| dst_server_name |
- Имя сервера MS SQL в системе-приемнике |
| dst_db_name |
- Имя базы-приемника |
| dst_dbo |
- Имя пользователя-владельца базы в системе-приемнике (dbowner) |
| dst_db_path |
- Путь к каталогу размещения файлов данных базы-приемника |
| dst_log_path |
- Путь к каталогу размещения файлов журнала базы-приемника |
| dst_ib_agent_label |
- Метка агента Jenkins в системе, где выполняется подключение к хранилищу конфигурации |
| dst_ib_con_string |
- Строка подключения к информационной базе, подключаемой к хранилищу |
| dst_ib_cred |
- Идентификатор credentials для доступа к информационной базе |
| dst_ib_storage_adr |
- Адрес хранилища конфигурации |
| dst_ib_storage_cred |
- Идентификатор credentials для подключения к хранилищу конфигурации |