-
Notifications
You must be signed in to change notification settings - Fork 13
/
TMSSQL.os
267 lines (223 loc) · 14.4 KB
/
TMSSQL.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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
#Использовать cmdline
#Использовать "."
//*****************************************************************
Процедура ПоказатьСправкуПоКомандам()
Сообщить("Библитека для работы с MS SQL SERVER
|-------------------------------
|Параметры:
|
| Режим работы (обязательный):
|
| help - Вывод справки
|
| createdatabase - Создает на сервере MS SQL новую базу данных.
|
| dropdatabase - Удаляет базу данных с сервера MS SQL с указанным именем.
|
| setrecovery - Изменяет модель восстановления базы данных из параметров подключения. Параметры:
| МодельВосстановления - модель восстановления, возможные значения:
| 1 или FULL
| 2 или BULK_LOGGED
| 3 или SIMPLE
|
| backupdatabase - Создает резервную копию базы данных из параметров подключения. Параметры:
| Каталог - Путь к каталогу для хранения резревной копии.
| Задается относительно сервера MS SQL Server.
| Если не задан используется каталог по умолчанию.
| ИмяФайла - Имя файла резервной копии.
| Если не задан, формируется автоматически в формате: ИмяБазы_2017_04_28_19_02_12.bak
| ТипРезервнойКопии - Тип резервной копии, возможные значения:
| 1 или FULL - Полная резервная копия
| 2 или DIFFERENTIAL - Разностная резервная копия
| 3 или LOG - Копия журнала транзакций
| ТолькоРезервноеКопирование - Флаг только резервного копирования, возможные значения:
| 1 или COPY_ONLY - Только резервное копирование
| СжиматьРезервныеКопии - Параметр сжатия резервной копии, возможные значения:
| 1 или COMPRESSION - Сжимать резевную копию
|
| restoredatabas - Восстанавливает базу данных из параметров подключения на указанную дату. Параметры:
| ВосстановлениеНаДату - Дата на котороую подбирается последовательность файлов
| Если не указана, то берется текущая дата.
|
| deletefile - Удаляет файл на сервере MS SQL. Параметры команды:
| <ПолноеИмяФайла> - Полное имя к файлу, который необходимо удалить.
|
| shrinkfile - Сжимает файлы базы данных из параметров подключения. Параметры:
| ТипФайла - Тип файла для сжатия, возможные значения:
| 0 или ROWS - Файл данных
| 1 или LOG - файл жураналов транзакций
| ОставитьМБ - Число МБ до которого сжимаются файлы.
| Если не указан, сжимается до размера по умолчанию
| Обрезать - Параметр обрезки файла, возможные значения:
| 1 или TRUNCATEONLY
| 0 или NOTRUNCATE
|
| shrinkdatabase - Сжимает базу данных из параметров подключения. Параметры:
| ОставитьПроцентов - Оставить зарезервированное место в %
| Обрезать - Обрезать файл. Возможные значения:
| 0 или NOTRUNCATE
| 1 или TRUNCATEONLY
|
| -server - (обязательный) Сетевой адрес MS SQL Server
|
| -uid - (обязательный) Имя пользователя для подключения к MS SQL Server
|
| -pwd - (обязательный) Пароль пользователя для подключения MS SQL Server
|
| -database - (обязательный) Имя базы данных, в которой по умолчанию будут выполняться все запросы
|");
КонецПроцедуры
//*****************************************************************
Функция РазобратьПараметры(АргументыКоманднойСтроки, ПараметрыПодключения)
Парсер = Новый ПарсерАргументовКоманднойСтроки();
Парсер.ДобавитьПараметр("Режим");
Парсер.ДобавитьПараметр("Параметр1");
Парсер.ДобавитьПараметр("Параметр2");
Парсер.ДобавитьПараметр("Параметр3");
Парсер.ДобавитьПараметр("Параметр4");
Парсер.ДобавитьПараметр("Параметр5");
Парсер.ДобавитьИменованныйПараметр("-server");
Парсер.ДобавитьИменованныйПараметр("-uid");
Парсер.ДобавитьИменованныйПараметр("-pwd");
Парсер.ДобавитьИменованныйПараметр("-database");
ПараметрыЗапуска = Парсер.Разобрать(АргументыКоманднойСтроки);
Если ПараметрыЗапуска = Неопределено или ПараметрыЗапуска.Количество() = 0 Тогда
Сообщить("Некорректные аргументы командной строки");
ПоказатьСправкуПоКомандам();
Возврат Неопределено;
КонецЕсли;
РежимСтруктура = Новый Структура;
РежимСтруктура.Вставить("Режим","");
РежимСтруктура.Вставить("Параметр1","");
РежимСтруктура.Вставить("Параметр2","");
РежимСтруктура.Вставить("Параметр3","");
РежимСтруктура.Вставить("Параметр4","");
РежимСтруктура.Вставить("Параметр5","");
Для Каждого Параметр ИЗ ПараметрыЗапуска Цикл
Ключ = ВРег(Параметр.Ключ);
Если Ключ = "РЕЖИМ" Тогда
РежимСтруктура.Режим = Параметр.Значение;
ИначеЕсли Ключ = "ПАРАМЕТР1" Тогда
РежимСтруктура.Параметр1 = Параметр.Значение;
ИначеЕсли Ключ = "ПАРАМЕТР2" Тогда
РежимСтруктура.Параметр2 = Параметр.Значение;
ИначеЕсли Ключ = "ПАРАМЕТР3" Тогда
РежимСтруктура.Параметр3 = Параметр.Значение;
ИначеЕсли Ключ = "ПАРАМЕТР4" Тогда
РежимСтруктура.Параметр2 = Параметр.Значение;
ИначеЕсли Ключ = "ПАРАМЕТР5" Тогда
РежимСтруктура.Параметр2 = Параметр.Значение;
ИначеЕсли Ключ = "-SERVER" Тогда
ПараметрыПодключения.АдресСервераSQL = Параметр.Значение;
ИначеЕсли Ключ = "-UID" Тогда
ПараметрыПодключения.ИмяПользователяSQL = Параметр.Значение;
ИначеЕсли Ключ = "-PWD" Тогда
ПараметрыПодключения.ПарольПользователяSQL = Параметр.Значение;
ИначеЕсли Ключ = "-DATABASE" Тогда
ПараметрыПодключения.ИмяБазыДанныхSQL = Параметр.Значение;
КонецЕсли;
КонецЦикла;
Если РежимСтруктура.Режим = "" Тогда
Сообщить("Неопределен режим работы");
ПоказатьСправкуПоКомандам();
Возврат Неопределено;
КонецЕсли;
Возврат РежимСтруктура;
КонецФункции
//*****************************************************************
Процедура ВыполнитьКоманду(УправлениеMSSQL, РежимСтруктура)
Если НЕ ЗначениеЗаполнено(РежимСтруктура) Тогда
Возврат;
КонецЕсли;
Режим = ВРег(РежимСтруктура.Режим);
Если НЕ ЗначениеЗаполнено(Режим) Тогда
Возврат;
КонецЕсли;
Если Режим = "HELP" Тогда
ПоказатьСправкуПоКомандам();
ИначеЕсли Режим = "CREATEDATABASE" Тогда
// Создадим базу данных
Если УправлениеMSSQL.СоздатьБД() Тогда
Сообщить("СоздатьБД: УСПЕШНО");
Иначе
Сообщить("СоздатьБД: " + УправлениеMSSQL.ТекстОшибки);
КонецЕсли;
ИначеЕсли Режим = "DROPDATABASE" Тогда
// Удалим базу данных
Если УправлениеMSSQL.УдалитьБД() Тогда
Сообщить("УдалитьБД: УСПЕШНО");
Иначе
Сообщить("УдалитьБД: " + УправлениеMSSQL.ТекстОшибки);
КонецЕсли;
ИначеЕсли Режим = "SETRECOVERY" Тогда
// Сменим модель восстановления базы
Если УправлениеMSSQL.ИзменитьМодельВосстановленияБД(РежимСтруктура.Параметр1) Тогда
Сообщить("ИзменитьМодельВосстановленияБД: УСПЕШНО");
Иначе
Сообщить("ИзменитьМодельВосстановленияБД: " + УправлениеMSSQL.ТекстОшибки);
КонецЕсли;
ИначеЕсли Режим = "BACKUPDATABASE" Тогда
// Сделаем резервную копию
ПолноеИмяФайла = УправлениеMSSQL.СделатьРезервнуюКопиюБД(
РежимСтруктура.Параметр1,
РежимСтруктура.Параметр2,
РежимСтруктура.Параметр3,
РежимСтруктура.Параметр4,
РежимСтруктура.Параметр5);
Если ПолноеИмяФайла <> Неопределено Тогда
Сообщить("СделатьРезервнуюКопиюБД: УСПЕШНО в " + ПолноеИмяФайла);
Иначе
Сообщить("СделатьРезервнуюКопиюБД: " + УправлениеMSSQL.ТекстОшибки);
КонецЕсли;
ИначеЕсли Режим = "RESTOREDATABASE" Тогда
// Восстаноим базу на дату создания полной копии
Если РежимСтруктура.Параметр1 = "" Тогда
ТекДата = "";
Иначе
ТекДата = Дата(РежимСтруктура.Параметр1);
КонецЕсли;
Если УправлениеMSSQL.ВосстановитьБД(ТекДата) Тогда
Сообщить("ВосстановитьБД: УСПЕШНО на дату " + ТекДата);
Иначе
Сообщить("ВосстановитьБД: " + УправлениеMSSQL.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
ИначеЕсли Режим = "DELETEFILE" Тогда
ИмяФайлаДляУдаления = РежимСтруктура.Параметр1;
Если УправлениеMSSQL.УдалитьФайлНаСервере(ИмяФайлаДляУдаления) Тогда
Сообщить("УдалитьФайлНаСервере: УСПЕШНО для " + ИмяФайлаДляУдаления);
Иначе
Сообщить("УдалитьФайлНаСервере: " + УправлениеMSSQL.ТекстОшибки);
КонецЕсли;
ИначеЕсли Режим = "SHRINKFILE" Тогда
// Запустим сжатие файлов
Если УправлениеMSSQL.СжатьФайлыБД(
РежимСтруктура.Параметр1,
РежимСтруктура.Параметр2,
РежимСтруктура.Параметр3,
РежимСтруктура.Параметр4) Тогда
Сообщить("СжатьФайлыБД: УСПЕШНО");
Иначе
Сообщить("СжатьФайлыБД: " + УправлениеMSSQL.ТекстОшибки);
КонецЕсли;
ИначеЕсли Режим = "SHRINKDATABASE" Тогда
// Запустим сжатие базы данных
Если УправлениеMSSQL.СжатьБД(
РежимСтруктура.Параметр1,
РежимСтруктура.Параметр2) Тогда
Сообщить("СжатьБД: УСПЕШНО");
Иначе
Сообщить("СжатьБД: " + УправлениеMSSQL.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//*****************************************************************
// Создадим объект
УправлениеMSSQL = Новый УправлениеMSSQL();
// Введем параметры
ПараметрыПодключения = УправлениеMSSQL.ПараметрыПодключения;
// Разбор параметров
РежимСтруктура = РазобратьПараметры(АргументыКоманднойСтроки, ПараметрыПодключения);
// Выполнение команды
ВыполнитьКоманду(УправлениеMSSQL, РежимСтруктура);