-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathCopyBase.os
216 lines (137 loc) · 11.3 KB
/
CopyBase.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
#Использовать cmdline
#Использовать logos
#Использовать v8runner
#Использовать ReadParams
#Использовать "."
Перем _ПараметрыРаботы;
Перем _Лог;
Перем _Замер;
Перем _Конфигуратор;
// Получить имя лога продукта
//
// Возвращаемое значение:
// Строка - имя лога продукта
//
Функция ИмяЛога() Экспорт
Возврат "oscript.app.CopyBase";
КонецФункции
Процедура ВыполнитьБекап()
Если Не _ПараметрыРаботы.Параметры["Source_SQL.UseBackup"] = Истина Тогда
Возврат;
КонецЕсли;
_Замер.НачатьЗамер( "Начат бекап " + _ПараметрыРаботы.Параметры["FileBackup"], "Бекап" );
выполнениеБекапа = Новый РаботаСSQL();
выполнениеБекапа.ИнициализироватьЛог( _Лог.Уровень(), _Замер.ПолучитьПотомка() );
выполнениеБекапа.УстановитьСервер( _ПараметрыРаботы.Параметры["Source_SQL.Server"] );
выполнениеБекапа.УстановитьПользователя( _ПараметрыРаботы.Параметры["Source_SQL.User"] );
выполнениеБекапа.УстановитьПароль( _ПараметрыРаботы.Параметры["Source_SQL.Password"] );
выполнениеБекапа.УстановитьИмяБазы( _ПараметрыРаботы.Параметры["Source_SQL.Base"] );
результат = выполнениеБекапа.ВыполнитьБекап( _ПараметрыРаботы.Параметры["FileBackup"] );
Если Не результат Тогда
ЗавершитьРаботу(1);
КонецЕсли;
_Замер.СообщитьЗамер( "Выполнен бекап " + _ПараметрыРаботы.Параметры["FileBackup"]);
КонецПроцедуры
Процедура ПроверитьСоединения()
Если Не _ПараметрыРаботы.Параметры["SQL.UseRestore"] = Истина Тогда
Возврат;
КонецЕсли;
_Замер.НачатьЗамер( "Начало проверки количества соединений", "ПроверкаСоединения" );
проверкаСоединения = Новый РаботаСSQL();
проверкаСоединения.ИнициализироватьЛог( _Лог.Уровень(), _Замер.ПолучитьПотомка() );
проверкаСоединения.УстановитьСервер( _ПараметрыРаботы.Параметры["SQL.Server"] );
проверкаСоединения.УстановитьПользователя( _ПараметрыРаботы.Параметры["SQL.User"] );
проверкаСоединения.УстановитьПароль( _ПараметрыРаботы.Параметры["SQL.Password"] );
проверкаСоединения.УстановитьИмяБазы( _ПараметрыРаботы.Параметры["SQL.Base"] );
количествоСоединений = проверкаСоединения.ПолучитьКоличествоСоединений();
_Лог.Отладка( "Количество соединений: " + количествоСоединений );
Если количествоСоединений < 0 Тогда
ЗавершитьРаботу(1);
КонецЕсли;
_Замер.СообщитьЗамер( "Проверены активные соединения. Соединений: " + количествоСоединений);
Если количествоСоединений > 0 Тогда
_Лог.Ошибка( "Есть активные соединения. Выполнение скрипта прервано." );
ЗавершитьРаботу(1);
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьВосстановление()
Если Не _ПараметрыРаботы.Параметры["SQL.UseRestore"] = Истина Тогда
Возврат;
КонецЕсли;
представлениеБазы = _ПараметрыРаботы.Параметры["SQL.Server"] + "/" + _ПараметрыРаботы.Параметры["SQL.Base"];
_Замер.НачатьЗамер( "Начало восстановления в " + представлениеБазы, "Восстановление" );
выполнениеВосстановления = Новый РаботаСSQL();
выполнениеВосстановления.ИнициализироватьЛог( _Лог.Уровень(), _Замер.ПолучитьПотомка() );
выполнениеВосстановления.УстановитьСервер( _ПараметрыРаботы.Параметры["SQL.Server"] );
выполнениеВосстановления.УстановитьПользователя( _ПараметрыРаботы.Параметры["SQL.User"] );
выполнениеВосстановления.УстановитьПароль( _ПараметрыРаботы.Параметры["SQL.Password"] );
выполнениеВосстановления.УстановитьИмяБазы( _ПараметрыРаботы.Параметры["SQL.Base"] );
результат = выполнениеВосстановления.ВыполнитьСкрипт( _ПараметрыРаботы.Параметры["Script_Restore"] );
Если Не результат Тогда
ЗавершитьРаботу(1);
КонецЕсли;
_Замер.СообщитьЗамер( "Выполнено восстановление " + представлениеБазы);
КонецПроцедуры
Процедура УдалитьФайлБекапа()
Если Не _ПараметрыРаботы.Параметры["SQL.UseRestore"] = Истина Тогда
Возврат;
КонецЕсли;
Если Не _ПараметрыРаботы.Параметры["SQL.DelBackup"] = Истина Тогда
Возврат;
КонецЕсли;
_Замер.НачатьЗамер( "Удаление файла бекапа " + _ПараметрыРаботы.Параметры["FileBackup"], "УдалениеБекапа" );
Если ОбщегоНазначения.ФайлСуществует( _ПараметрыРаботы.Параметры["FileBackup"] ) Тогда
УдалитьФайлы( _ПараметрыРаботы.Параметры["FileBackup"] );
КонецЕсли;
_Замер.СообщитьЗамер( "Удален бекап " + _ПараметрыРаботы.Параметры["FileBackup"] );
КонецПроцедуры
Процедура ПереподключитьХранилище()
Если Не _ПараметрыРаботы.Параметры["Repo.Blind"] = Истина Тогда
Возврат;
КонецЕсли;
представлениеБазы = _ПараметрыРаботы.ПредставлениеБазы();
Конфигуратор = _ПараметрыРаботы.Конфигуратор;
_Замер.НачатьЗамер( "Начало отключения от хранилища " + представлениеБазы, "ОтключениеОтХранилища" );
Конфигуратор.ОтключитьсяОтХранилища();
Текст = Конфигуратор.ВыводКоманды();
Если Не ПустаяСтрока(Текст) Тогда
_Лог.Информация(Текст);
КонецЕсли;
_Замер.СообщитьЗамер( "Отключено от хранилища " + представлениеБазы );
_Замер.НачатьЗамер( "Подключение к хранилищу " + _ПараметрыРаботы.Параметры["Repo.Connect"] + " " + представлениеБазы, "ПодключениеКХранилищу" );
Конфигуратор.ПодключитьсяКХранилищу(_ПараметрыРаботы.Параметры["Repo.Connect"], _ПараметрыРаботы.Параметры["Repo.User"], _ПараметрыРаботы.Параметры["Repo.Password"], Истина );
Текст = Конфигуратор.ВыводКоманды();
Если Не ПустаяСтрока(Текст) Тогда
_Лог.Информация(Текст);
КонецЕсли;
_Замер.СообщитьЗамер( "Подключено к хранилищу " + _ПараметрыРаботы.Параметры["Repo.Connect"] + " " + представлениеБазы, "ПодключениеКХранилищу" );
Если _ПараметрыРаботы.Параметры["UpdateCfg"] Тогда
_Замер.НачатьЗамер( "Начало обновления конфигурации " + представлениеБазы, "ОбновлениеКонфигурации" );
Конфигуратор.ОбновитьКонфигурациюБазыДанныхИзХранилища(_ПараметрыРаботы.Параметры["Repo.Connect"], _ПараметрыРаботы.Параметры["Repo.User"], _ПараметрыРаботы.Параметры["Repo.Password"] );
Текст = Конфигуратор.ВыводКоманды();
Если Не ПустаяСтрока(Текст) Тогда
_Лог.Информация(Текст);
КонецЕсли;
_Замер.СообщитьЗамер( "Конфигурация обновлена " + представлениеБазы );
КонецЕсли;
ОбщегоНазначения.УдалитьФайлЕслиСуществует( _Конфигуратор.ФайлИнформации() );
КонецПроцедуры
Процедура СкопироватьБазуДанных()
_ПараметрыРаботы.ТестПараметров();
Если _ПараметрыРаботы.РежимТестированияПараметров Тогда
_Замер.СообщитьЗавершение();
Возврат;
КонецЕсли;
ВыполнитьБекап();
ПроверитьСоединения();
ВыполнитьВосстановление();
УдалитьФайлБекапа();
ПереподключитьХранилище();
_Замер.СообщитьЗавершение();
КонецПроцедуры
_Лог = Логирование.ПолучитьЛог(ИмяЛога());
_ПараметрыРаботы = Новый ПараметрыРаботы();
_ПараметрыРаботы.Инициализация( АргументыКоманднойСтроки, _Лог );
_Замер = _ПараметрыРаботы.Замер;
_Конфигуратор = _ПараметрыРаботы.Конфигуратор;
СкопироватьБазуДанных();