1
0
mirror of https://github.com/Stepa86/oScript-Examples.git synced 2026-04-23 19:31:06 +02:00

ExecQuery_SQLCMD теперь только подключаемый

This commit is contained in:
Stepa86
2017-01-30 20:59:02 +03:00
parent 180a0d1a1b
commit 8b8bdfda8e
2 changed files with 128 additions and 23 deletions
+38 -11
View File
@@ -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"] = Истина Тогда
Сообщить( "Выполняется переподключение к хранилищу" );
КонецЕсли;
КонецПроцедуры
фЛог = Логирование.ПолучитьЛог(ИмяЛога());
+90 -12
View File
@@ -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;
КонецФункции
фЛог = Логирование.ПолучитьЛог(ИмяЛога());
//фЛог.УстановитьУровень(УровниЛога.Предупреждение);
//фЛог.УстановитьУровень(УровниЛога.Отладка);
ВыполнитьКоманду(АргументыКоманднойСтроки);