diff --git a/src/CopyBase.os b/src/CopyBase.os index 70eba93..e0b02f3 100644 --- a/src/CopyBase.os +++ b/src/CopyBase.os @@ -3,7 +3,6 @@ #Использовать logos #Использовать json - Перем фЛог; // Получить имя лога продукта @@ -46,36 +45,36 @@ ЗавершитьРаботу(1); КонецЕсли; - + текстНастроек = ПолучитьТекстИзФайла(Параметры["ПутьКФайлу"]); Если текстНастроек = Ложь Тогда - + Сообщить("Переданный файл не найден или не является файлом настроек."); Сообщить("Для создания файла воспользуйтесь обработкой _ПодготовкаНастроекДляБазы.epf"); - + ЗавершитьРаботу(1); - + КонецЕсли; ЧтениеJSON = Новый ПарсерJSON; параметрыИзФайла = ЧтениеJSON.ПрочитатьJSON(текстНастроек,,,Истина); - + прочитанныеПараметры = Новый Соответствие; ПрочитатьПараметрыРекурсивно( параметрыИзФайла, прочитанныеПараметры ); Для каждого цЭлемент Из прочитанныеПараметры Цикл - + фЛог.Отладка( "Прочитан параметр " + цЭлемент.Ключ + ": " + цЭлемент.Значение ); - + КонецЦикла; - + Возврат прочитанныеПараметры; КонецФункции Процедура ПрочитатьПараметрыРекурсивно( Знач пПараметры, пПрочитенныеПараметры ) - + Для каждого цЭлемент Из пПараметры Цикл Если ТипЗнч( цЭлемент.Значение ) = Тип("Структура") @@ -90,13 +89,41 @@ КонецЕсли; КонецЦикла; - + КонецПроцедуры Процедура ВыполнитьКоманду(Знач пАргументы) параметры = ПолучитьПараметры( пАргументы ); + + работаСSQL = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "ExecQuery_SQLCMD.os")); + + Если параметры["Source_SQL.UseBackup"] = Истина Тогда + результат = работаСSQL.ВыполнитьБекап( параметры["Source_SQL.Server"], параметры["Source_SQL.User"], параметры["Source_SQL.Password"], параметры["Source_SQL.Base"], параметры["FileBackup"] ); + + Если Не результат Тогда + ЗавершитьРаботу(1); + КонецЕсли; + + КонецЕсли; + + Если параметры["Current_SQL.UseRestore"] = Истина Тогда + + результат = работаСSQL.ВыполнитьСкрипт( параметры["Current_SQL.Server"], параметры["Current_SQL.User"], параметры["Current_SQL.Password"], параметры["Current_SQL.Base"], параметры["Script_Restore"] ); + + Если Не результат Тогда + ЗавершитьРаботу(1); + КонецЕсли; + + КонецЕсли; + + Если параметры["Current_Repo.Blind"] = Истина Тогда + + Сообщить( "Выполняется переподключение к хранилищу" ); + + КонецЕсли; + КонецПроцедуры фЛог = Логирование.ПолучитьЛог(ИмяЛога()); diff --git a/src/ExecQuery_SQLCMD.os b/src/ExecQuery_SQLCMD.os index 4ee68e0..2d07190 100644 --- a/src/ExecQuery_SQLCMD.os +++ b/src/ExecQuery_SQLCMD.os @@ -13,6 +13,78 @@ Возврат "oscript.app.ExecQuery_SQLCMD"; КонецФункции +Функция ВыполнитьБекап( Знач пСервер, Знач пПользователь, Знач пПароль, Знач пИмяБазы, Знач пИмяФайлаБекапа ) Экспорт + + Если Не ЗначениеЗаполнено( пСервер ) Тогда + + фЛог.Ошибка( "Сервер не указан" ); + Возврат Ложь; + + КонецЕсли; + + Если Не ЗначениеЗаполнено( пПользователь ) Тогда + + фЛог.Ошибка( "Пользователь не указан" ); + Возврат Ложь; + + КонецЕсли; + + Если Не ЗначениеЗаполнено( пИмяФайлаБекапа ) Тогда + + фЛог.Ошибка( "Файл для бекапа не указан" ); + Возврат Ложь; + + КонецЕсли; + + Если Не ЗначениеЗаполнено( пИмяБазы ) Тогда + + фЛог.Ошибка( "Файл для бекапа не указан" ); + Возврат Ложь; + + КонецЕсли; + + параметрСТекстомЗапроса = "-Q""" + ТекстЗапроса_ВыполнитьБекап( пИмяБазы, пИмяФайлаБекапа ) + """"; + + Возврат ВыполнитьЧерезSQLCMD(пСервер, пПользователь, пПароль, пИмяБазы, параметрСТекстомЗапроса); + +КонецФункции + +Функция ВыполнитьСкрипт( Знач пСервер, Знач пПользователь, Знач пПароль, Знач пИмяБазы, Знач пИмяФайлаСкрипта ) Экспорт + + Если Не ЗначениеЗаполнено( пСервер ) Тогда + + фЛог.Ошибка( "Сервер не указан" ); + Возврат Ложь; + + КонецЕсли; + + Если Не ЗначениеЗаполнено( пПользователь ) Тогда + + фЛог.Ошибка( "Пользователь не указан" ); + Возврат Ложь; + + КонецЕсли; + + Если Не ЗначениеЗаполнено( пИмяФайлаСкрипта ) Тогда + + фЛог.Ошибка( "Файл скрипта не указан" ); + Возврат Ложь; + + КонецЕсли; + + текстЗапроса = ПолучитьТекстИзФайла( пИмяФайлаСкрипта ); + + Если текстЗапроса = Ложь Тогда + фЛог.Ошибка( "Не удалось прочитать текст запроса из " + пИмяФайлаСкрипта ); + Возврат Ложь; + КонецЕсли; + + параметрСТекстомЗапроса = "-i """ + пИмяФайлаСкрипта + """"; + + Возврат ВыполнитьЧерезSQLCMD(пСервер, пПользователь, пПароль, пИмяБазы, параметрСТекстомЗапроса); + +КонецФункции + Функция ПолучитьТекстИзФайла( Знач пИмяФайла ) файлОбмена = Новый Файл(пИмяФайла); @@ -63,7 +135,7 @@ текстЗапроса = СтрШаблон( шаблонЗапросБекапа, пПараметры["ИмяБазы"], пПараметры["ПутьКФайлу"]); параметрСТекстомЗапроса = "-Q""" + текстЗапроса + """"; - + ИначеЕсли ВРег( пПараметры["Команда"]) = ВРег("execQuery") Тогда текстЗапроса = ПолучитьТекстИзФайла( пПараметры["ПутьКФайлу"] ); @@ -74,7 +146,7 @@ КонецЕсли; параметрСТекстомЗапроса = "-i """ + пПараметры["ПутьКФайлу"] + """"; - + Иначе фЛог.Ошибка( "Неизвестная команда " + пПараметры["Команда"] ); @@ -85,11 +157,16 @@ Возврат параметрСТекстомЗапроса; -КонецФункции // ПолучитьТекстЗапроса( Знач пКоманда ) +КонецФункции -Процедура ВыполнитьКоманду(Знач пАргументы) +Функция ТекстЗапроса_ВыполнитьБекап( Знач пИмяБазы, Знач пИмяФайла) - параметры = ПолучитьПараметрыИзКоманднойСтроки( пАргументы ); + шаблонЗапросБекапа = "BACKUP DATABASE [%1] TO DISK = N'%2' WITH NOFORMAT, INIT, NAME = N'%1 FULL Backup', SKIP, NOREWIND, NOUNLOAD,COMPRESSION, STATS = 10"; + Возврат СтрШаблон( шаблонЗапросБекапа, пИмяБазы, пИмяФайла); + +КонецФункции + +Функция ВыполнитьЧерезSQLCMD( Знач пСервер, Знач пПользователь, Знач пПароль, Знач пИмяБазы, Знач пПараметрСТекстомЗапроса ) командаЗапуска = Новый Команда; @@ -101,10 +178,10 @@ КонецЕсли; командаЗапуска.УстановитьКоманду("sqlcmd"); - командаЗапуска.ДобавитьПараметр("-S" + параметры["Сервер"]); - командаЗапуска.ДобавитьПараметр("-U" + параметры["Пользователь"]); - командаЗапуска.ДобавитьПараметр("-P" + параметры["Пароль"]); - командаЗапуска.ДобавитьПараметр( ПолучитьПараметрСТекстомЗапроса( параметры ) ); + командаЗапуска.ДобавитьПараметр("-S" + пСервер); + командаЗапуска.ДобавитьПараметр("-U" + пПользователь); + командаЗапуска.ДобавитьПараметр("-P" + пПароль); + командаЗапуска.ДобавитьПараметр( пПараметрСТекстомЗапроса ); командаЗапуска.УстановитьИсполнениеЧерезКомандыСистемы( Ложь ); @@ -112,14 +189,15 @@ Если Не КодВозврата = 0 Тогда фЛог.Ошибка("Код возврата: " + КодВозврата); - фЛог.Информация(командаЗапуска.ПолучитьВывод()); + фЛог.Ошибка(командаЗапуска.ПолучитьВывод()); КонецЕсли; фЛог.Информация(командаЗапуска.ПолучитьВывод()); -КонецПроцедуры + Возврат кодВозврата = 0; + +КонецФункции фЛог = Логирование.ПолучитьЛог(ИмяЛога()); //фЛог.УстановитьУровень(УровниЛога.Предупреждение); //фЛог.УстановитьУровень(УровниЛога.Отладка); -ВыполнитьКоманду(АргументыКоманднойСтроки); \ No newline at end of file