Coder Social home page Coder Social logo

arkuznetsov / cpdb Goto Github PK

View Code? Open in Web Editor NEW
88.0 9.0 31.0 758 KB

Приложение oscript для копирования баз данных 1C / MS SQL и развертывания на целевой системе.

License: Mozilla Public License 2.0

1C Enterprise 99.70% Shell 0.10% Batchfile 0.10% Dockerfile 0.10%
oscript mssql 1c-enterprise onescript 1c bsl sql hacktoberfest

cpdb's Introduction

Артем Кузнецов

Github stats Top Langs

cpdb's People

Contributors

abirambul avatar arkuznetsov avatar artkor83 avatar asakra avatar borisskin avatar gladilovdmitry avatar glumnihil avatar komarovps avatar kostya6969 avatar vadim-ver avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cpdb's Issues

команда putyadisk

При загрузке ответ от сервиса

Яндекс.Диск ответил кодом ошибки 409: Specified path "/tests/testfolder" points to existent directory.

cpdb putyadisk -file "C:/tests/testfolder/testfile.txt" -ya-token XXX -ya-path "C:/tests/testfolder/"

после чего файл был загружен

Ошибки выгрузки / загрузки yandex disk

Есть ошибки в работе класса РаботаСЯндексДиск.os и соотв. команд. Исправил ошибки и написал приемочный тест, направил пулл реквест.

После установки через opm не хватает библиотеки v8storage

После установки через opm не хватает библиотеки v8storage

C:\Temp>opm install cpdb
ИНФОРМАЦИЯ - Скачиваю файл: cpdb.ospx
ИНФОРМАЦИЯ - Устанавливаю пакет cpdb
ИНФОРМАЦИЯ - Регистрация приложения: cpdb
ИНФОРМАЦИЯ - Установка завершена
ИНФОРМАЦИЯ - Устанавливаю зависимость: logos
ИНФОРМАЦИЯ - logos уже установлен. Пропускаем.
ИНФОРМАЦИЯ - Устанавливаю зависимость: 1commands
ИНФОРМАЦИЯ - 1commands уже установлен. Пропускаем.
ИНФОРМАЦИЯ - Устанавливаю зависимость: cmdline
ИНФОРМАЦИЯ - cmdline уже установлен. Пропускаем.
ИНФОРМАЦИЯ - Устанавливаю зависимость: readparams
ИНФОРМАЦИЯ - Скачиваю файл: ReadParams.ospx
ИНФОРМАЦИЯ - Устанавливаю пакет ReadParams
ИНФОРМАЦИЯ - Установка завершена
ИНФОРМАЦИЯ - Устанавливаю зависимость: json
ИНФОРМАЦИЯ - json уже установлен. Пропускаем.
ИНФОРМАЦИЯ - Устанавливаю зависимость: v8runner
ИНФОРМАЦИЯ - v8runner уже установлен. Пропускаем.
ИНФОРМАЦИЯ - Устанавливаю зависимость: yadisk
ИНФОРМАЦИЯ - Скачиваю файл: yadisk.ospx
ИНФОРМАЦИЯ - Устанавливаю пакет yadisk
ИНФОРМАЦИЯ - Установка завершена
ИНФОРМАЦИЯ - Устанавливаю зависимость: 1testrunner
ИНФОРМАЦИЯ - 1testrunner уже установлен. Пропускаем.
ИНФОРМАЦИЯ - Устанавливаю зависимость: 1bdd
ИНФОРМАЦИЯ - <1bdd> отмечена как зависимость для разработчика, но установка зависимостей для разработчика не активирована. Пропускаем.
ИНФОРМАЦИЯ - Устанавливаю зависимость: asserts
ИНФОРМАЦИЯ - asserts уже установлен. Пропускаем.
ИНФОРМАЦИЯ - Устанавливаю зависимость: moskito
ИНФОРМАЦИЯ - отмечена как зависимость для разработчика, но установка зависимостей для разработчика не активирована. Пропускаем.

C:\Temp>cpdb
{Модуль C:\Program Files\OneScript\lib\cpdb\src\cpdb.os / Ошибка в строке: 5,0 / Библиотека не найдена: 'v8storage'}

C:\Temp>opm -v
1.0.2

C:\Temp>oscript.exe -version
1.6.0.213

Ошибка подключения библиотек

Пытаюсь использовать cpdb в своем скрипте, получаю ошибку

{Модуль D:\Programs\OneScript\lib\cpdb\src\Модули\ЗапускПриложений.os / Ошибка в строке: 85 / Неизвестный символ: ЧтениеПараметров}
Процесс терминала завершен с кодом выхода: 1

Это модуль из readparams. В cpdb.os он подключается, но почему-то не находится в зоне видимости ЗапускПриложений.os.
Если в ЗапускПриложений.os добавить
#Использовать readparams
то скрипт отрабатывает нормально.

Ситуация воспроизводится на 2-х машинах. Устанавливал oscript через инсталлер и из архива - разницы нет.
Некоторые листинги консоли

d:\Programs\OneScript\lib\cpdb\src>opm list
Пакеты в системном каталоге библиотек <D:\Programs\OneScript\lib>:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

d:\Programs\OneScript\lib\cpdb\src>oscript cpdb.os
ОШИБКА - Некорректные аргументы командной строки
Возможные команды:
help - Вывод справки по параметрам
...вырезано.....
merge - Восстановить файл из частей (требуется установленный 7-zip)
Для подсказки по конкретной команде наберите help <команда>

d:\Programs\OneScript\lib\cpdb\src>oscript
1Script Execution Engine. Version 1.0.18.101

Сам скрипт
test.txt

ЗЫ: я не до конца уверен, что это ошибка в библиотеке, возможно проблема в самом oscript.

Ошибка создания базы SQL с именем содержащим -

Если выполнить команду cpdb restore и указать имя базы с - (TEST-BASE-123-fix), тогда получим ошибку.

ОТЛАДКА - [oscript.lib.commands] - Строка запуска <sqlcmd -S shqdc-1c-dev01.ilp.loc -U svchq_1CDbAccess -P UBZRhMsn5F -Q "USE [master]; CREATE DATABASE TEST-BASE-123-fix; ALTER DATABASE TEST-BASE-123-fix SET RECOVERY SIMPLE" -b>
ОТЛАДКА - [oscript.lib.commands] - Полная строка запуска <sqlcmd -S shqdc-1c-dev01.ilp.loc -U svchq_1CDbAccess -P UBZRhMsn5F -Q "USE [master]; CREATE DATABASE TEST-BASE-123-fix; ALTER DATABASE TEST-BASE-123-fix SET RECOVERY SIMPLE" -b>
ОТЛАДКА - [oscript.lib.commands] - Строка запуска <sqlcmd -S shqdc-1c-dev01.ilp.loc -U svchq_1CDbAccess -P UBZRhMsn5F -Q "USE [master]; CREATE DATABASE TEST-BASE-123-fix; ALTER DATABASE TEST-BASE-123-fix SET RECOVERY SIMPLE" -b>
ОТЛАДКА - [oscript.lib.commands] - Полная строка запуска <sqlcmd -S shqdc-1c-dev01.ilp.loc -U svchq_1CDbAccess -P UBZRhMsn5F -Q "USE [master]; CREATE DATABASE TEST-BASE-123-fix; ALTER DATABASE TEST-BASE-123-fix SET RECOVERY SIMPLE" -b>
ОТЛАДКА - [oscript.lib.commands] - Длина вывода 276, количество строк 7
ОТЛАДКА - [oscript.lib.commands] - Код возврата равен 1
ОШИБКА - Ошибка восстановления базы "TEST-BASE-123-fix" из резервной копии "E:\temp\TEST-BASE-123-fix.bak": Msg 102, Level 15, State 1, Server SHQDC-1C-DEV01, Line 1
Incorrect syntax near '-'.
Msg 102, Level 15, State 1, Server SHQDC-1C-DEV01, Line 1
Incorrect syntax near '-'.
Msg 195, Level 15, State 7, Server SHQDC-1C-DEV01, Line 1
'RECOVERY' is not a recognized SET option.

Рефакторинг архитектуры приложения/библиотеки

  • Реализовать возможность использования как библиотеки
  • Разделить исполняющие функции и командный интерфейс
  • Выделить интерфейс взаимодействия с СУБД в отдельный класс
  • Заложить возможность работы с другими СУБД через подключаемые классы
  • Заменить библиотеку работы с параметрами

Дифференциальный бакап

Хочу использовать возможность делать бакапы из командной строки.
Можно ли добавить ключ -differential по нему дописывать разницу в предыдущий файл ?

declare @BackUpFile as Varchar(255)

SELECT TOP 1 @BackUpFile=mf.physical_device_name from msdb..backupset bk
join msdb..backupmediafamily mf on bk.media_set_id = mf.media_set_id
where database_name=N'dbname' and bk.type='D' order by
backup_set_id desc
select @BackUpFile
BACKUP DATABASE [dbname] TO DISK = @BackUpFile WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'Differential Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

Ошибка при подключении/отключении сетевого диска

При работе с сетевыми дисками в
РаботаСФайлами.ПодключитьДиск()
РаботаСФайлами.ОтключитьДиск()

возникают следующая ошибка

ИНФОРМАЦИЯ - Выполняется сценарий (0) из файла "./test.json"
ИНФОРМАЦИЯ - Выполняется шаг "Подключить сетевой диск" сценария (0) из файла "./test.json"
ИНФОРМАЦИЯ - Начало подключения сетевого ресурса "\\путь" к устройству "R"
ОТЛАДКА - [oscript.lib.commands] - РабочийКаталог: .
ОТЛАДКА - [oscript.lib.commands] - Строка запуска <net use R \\путь пароль /USER:пользователь>
ОТЛАДКА - [oscript.lib.commands] - Полная строка запуска <net use R \\путь пароль  /USER:пользователь>
ОТЛАДКА - [oscript.lib.commands] - Строка запуска <net use R \\путь пароль  /USER:пользователь>
ОТЛАДКА - [oscript.lib.commands] - Полная строка запуска <net use R \\путь пароль  /USER:пользователь>
ОТЛАДКА - [oscript.lib.commands] - Длина вывода 497, количество строк 19
ОТЛАДКА - [oscript.lib.commands] - Код возврата равен 1
КРИТИЧНАЯОШИБКА - {Модуль C:\Program Files\OneScript\lib\cpdb\src\core\Модули\РаботаСФайлами.os / Ошибка в строке: 383 / Ошибка ошибка подключения ресурса "\\путь" к устройству "R", код ошибки 1:
Синтаксис данной команды:

NET USE
[devicename | *] [\\computername\sharename[\volume] [password | *]]
        [/USER:[domainname\]username]
        [/USER:[dotted domain name\]username]
        [/USER:[username@dotted domain name]
        [/SMARTCARD]
        [/SAVECRED]
        [/REQUIREINTEGRITY]
        [/REQUIREPRIVACY]
        [/WRITETHROUGH]
        [[/DELETE] | [/PERSISTENT:{YES | NO}]]

NET USE {devicename | *} [password | *] /HOME

NET USE [/PERSISTENT:{YES | NO}]

}

я подразумеваю что нарушен синтаксис т.е.
сейчас: net use R \путь пароль /USER:пользователь
нужно: net use R: \путь /USER:пользователь пароль

или кодом

Процедура ПодключитьДиск(ИмяУстройства, ИмяРесурса, Пользователь, ПарольПользователя) Экспорт

	Лог.Информация("Начало подключения сетевого ресурса ""%1"" к устройству ""%2""",
	               ИмяРесурса,
	               ИмяУстройства);

	КомандаРК = Новый Команда;
	
	КомандаРК.УстановитьКоманду("net");
	КомандаРК.ДобавитьПараметр("use");
	КомандаРК.ДобавитьПараметр(ИмяУстройства + ":");
	КомандаРК.ДобавитьПараметр(ИмяРесурса);

	Если ЗначениеЗаполнено(Пользователь) Тогда
		КомандаРК.ДобавитьПараметр("/USER:" + Пользователь);		
		КомандаРК.ДобавитьПараметр(ПарольПользователя);
	КонецЕсли;

	КомандаРК.УстановитьИсполнениеЧерезКомандыСистемы( Ложь );
	КомандаРК.ПоказыватьВыводНемедленно( Ложь );
	
	КодВозврата = КомандаРК.Исполнить();

	ОписаниеРезультата = КомандаРК.ПолучитьВывод();
	
	Если КодВозврата = 0 Тогда
		Лог.Информация("Подключен сетевой ресурс ""%1"" к устройству ""%2"": %3",
		               ИмяРесурса,
		               ИмяУстройства,
		               ОписаниеРезультата);
	Иначе
		ВызватьИсключение СтрШаблон("Ошибка ошибка подключения ресурса ""%1"" к устройству ""%2"", код ошибки %3: %4%5",
		                            ИмяРесурса,
		                            ИмяУстройства,
		                            КодВозврата,
		                            Символы.ПС,
		                            ОписаниеРезультата);
	КонецЕсли;
	
КонецПроцедуры // ПодключитьДиск()

Ошибка при восстановлении из резервной копии "Logical file '' is not part of database ...."

Не хватает поля в описании временной таблицы структуры байла бэкапа:
ИнструкментыСУБД.os
должно быть:

Функция ПолучитьСписокПолейТаблицыФайловРезервнойКопии()

ОписаниеПолей = "[LogicalName] nvarchar(128),
				|[PhysicalName] nvarchar(260),
				|[Type] char(1),
				|[FileGroupName] nvarchar(128),
				|[Size] numeric(20,0),
				|[MaxSize] numeric(20,0),
				|[FileID] bigint,
				|[CreateLSN] numeric(25,0),
				|[DropLSN] numeric(25,0) NULL,
				|[UniqueID] uniqueidentifier,
				|[ReadOnlyLSN] numeric(25,0) NULL,
				|[ReadWriteLSN] numeric(25,0) NULL,
				|[BackupSizeInBytes] bigint,
				|[SourceBlockSize] int,
				|[FileGroupID] int,
				|[LogGroupGUID] uniqueidentifier NULL,
				|[DifferentialBaseLSN] numeric(25,0) NULL,
				|[DifferentialBaseGUID] uniqueidentifier,
				|[IsReadOnly] bit,
				|[IsPresent] bit,
				|[TDEThumbprint] varbinary(32),
				|[SnapshotUrl] nvarchar(360)";

Возврат ОписаниеПолей;

КонецФункции //ПолучитьСписокПолейТаблицыФайловРезервнойКопии()

Иначе ошибка при

Команда Copy

При вызове команды copy выходит ошибка

КРИТИЧНАЯОШИБКА` - {Модуль C:\Program Files (x86)\OneScript\lib\cmdline\src\cmdline.os / Ошибка в строке: 436 / Неизвестный параметр в позиции 3 параметр d:\MSSQL\Backup\MyDatabase_copy.bak copy -src d:\MSSQL\Backup\MyDatabase_copy.bak -dst N:\NewDestination" -replace -delsrc }

[email protected]

Ошибка при восстановление бекапа из сетевого диска

Есть цепочка вызовов
РаботаССУБД.ВыполнитьВосстановление() -> ПодключениеКСУБД.ВосстановитьИзРезервнойКопии() -> ПодключениеКСУБД.ПолучитьЛогическоеИмяФайлаВРезервнойКопии()

Если у скуля в функции ПолучитьЛогическоеИмяФайлаВРезервнойКопии() нет прав на файл или его физически нет, то возникнет следующая ошибка в SQL:

Сообщение 3201, уровень 16, состояние 2, строка 1
Cannot open backup device 'Путь к бекапу'. Operating system error 3(The system cannot find the path specified.).
Сообщение 3013, уровень 16, состояние 1, строка 1
RESTORE FILELIST is terminating abnormally.

Это приведет к тому что запрос в РаботаССУБД.ВыполнитьВосстановление() будет некорректен.
Переменные "ЛогическоеИмяФайлаДанных", "ЛогическоеИмяФайлаЖурнала" будут содержать строку как описано выше.
Это приведет к ошибке следующего вида:

КРИТИЧНАЯОШИБКА - {Модуль C:\Program Files\OneScript\lib\cpdb\src\core\Классы\РаботаССУБД.os / Ошибка в строке: 226 / Ошибка восстановления базы "ИмяБазы" из резервной копии "Путь к бекапу":
{Модуль C:\Program Files\OneScript\lib\cpdb\src\core\Классы\РаботаССУБД.os / Ошибка в строке: 216 / Ошибка восстановления базы "ИмяБазы" из резервной копии "Путь к бекапу":
Сообщение 102, уровень 15, состояние 1, сервер DA1CM03\DVLP, строка 7
Incorrect syntax near 'МеткаСетевогоДиска:'.
Сообщение 132, уровень 15, состояние 1, сервер DA1CM03\DVLP, строка 14
The label 'МеткаСетевогоДиска' has already been declared. Label names must be unique within a query batch or stored procedure.
}
}       
             ВызватьИсключение ТекстОшибки;

Добавить логи в сценарии

Для удобства диагностики желательно добавить в сценарии возможность записи простых текстовых логов вида:
Шаг: "Копирование базы" начат 11:20
Шаг: "Копирование базы" закончен 11:30
и т.п.
Сейчас приходится cpdb в другие скрипты заворачивать.

Не описано требование иметь программу sqlcmd на машине

Нужно добавить в Readme.md

sqlcmd -S obr-sedo-mdb -U 1сv8 -P хххххх -Q "SET NOCOUNT ON; SELECT COUNT(name) from sysdatabases where name = 'mc_uat_dev'; SET NOCOUNT OFF" -b, ., Да,
ОШИБКА - Ошибка восстановления базы "mc_uat_dev" из резервной копии "L:": {Модуль C:\Program Files (x86)\OneScript\lib\1commands\src\Команда.os / Ошибка в строке: 306
 / Внешнее исключение (System.ComponentModel.Win32Exception): Не удается найти указанный файл}

Расширить команду compress - получать список несжатых таблиц и индексов

Если мы не внедряем в базу SQL дополнительные триггеры, то после изменения метаданных, влекущих за собой изменение структуры таблиц, в базе оказываются несжатые таблицы и индексы из-за реструктуризации.
Например - добавили реквизит в табличную часть Товары Заказа клиента - база резко распухла.
Хочется видеть, какие таблицы не сжаты.
Соответственно при сжатии делать ребилд только несжатых таблиц и индексов.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.