Приложение для работы с базами данных на MS SQL Server

TMSSQL

Приложение для работы с базами данных на MS SQL Server

Описание

Приложение для работы с базами данных на MS SQL Server. Реализовано на OneScript. Работает в режиме:

  • Консольного приложения
  • Библиотеки для разработки скриптов на OneScript

Для подключения к MS SQL-серверу используется COM-Объект ADODB.Connection:

Соединение  = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString =
    "driver={SQL Server};" +
    "server="+ПараметрыПодключения.АдресСервераSQL+";"+
    "uid="+ПараметрыПодключения.ИмяПользователяSQL+";"+
    "pwd="+ПараметрыПодключения.ПарольПользователяSQL+";" +
    "database="+БазаДанных+";";
Соединение.ConnectionTimeout = ПараметрыПодключения.ConnectionTimeout;
Соединение.CommandTimeout = ПараметрыПодключения.CommandTimeout;
Соединение.Open();

Соответственно, приложение работает только в ОС семейства Windows.

Работа в режиме приложения

Исполняемый файл: TMSSQL.bat

Команды:

  • help - Вывод справки по параметрам
  • createdatabase - Создание базы данных
  • dropdatabase - Удаление базы данных
  • setrecovery - Изменение модели восстановления
  • backupdatabase - Создание резервной копии
  • restoredatabase - Восстановление базы данных
  • shrinkfile - Сжатие файлов базы данных
  • shrinkdatabase - Сжатие базы данных
  • deletefile - Удаление файлов на сервере

Пример использования (bat-файл):

@echo off

setlocal

set file="%~dp0..\TMSSQL.bat"
set server="10.1.1.40"
set uid="sa"
set pwd="pass"
set database="Test_OS_TMSSQL"
set connectionstring=-server %server% -uid %uid% -pwd %pwd% -database %database%

rem Вывод справки
echo ----------------------------------------------
echo help:
call %file% help

rem Создание базы данных 
echo ----------------------------------------------
echo createdatabase:
call %file% createdatabase %connectionstring%

rem Изменение модели восстановления
echo ----------------------------------------------
echo setrecovery:
call %file% setrecovery FULL %connectionstring%

rem Создание резервных копий
echo ----------------------------------------------
echo backupdatabase:
set file_FULL=%database%_FILE_FULL.bak
set file_DIFF=%database%_FILE_DIFF.bak
set file_LOG=%database%_FILE_LOG.trn
call %file% backupdatabase "" %file_FULL% FULL %connectionstring%
TIMEOUT 1 /NOBREAK
call %file% backupdatabase "" %file_DIFF% DIFFERENTIAL %connectionstring%
TIMEOUT 1 /NOBREAK
call %file% backupdatabase "" %file_LOG% LOG %connectionstring%
TIMEOUT 1 /NOBREAK

rem Восстановление базы данных
echo ----------------------------------------------
echo restoredatabase:
call %file% restoredatabase %connectionstring%

rem Удаление файлов на сервере
echo ----------------------------------------------
echo deletefile:
call %file% deletefile %file_FULL% %connectionstring%
call %file% deletefile %file_DIFF% %connectionstring%
call %file% deletefile %file_LOG% %connectionstring%

rem Сжатие файлов базы данных
echo ----------------------------------------------
echo shrinkfile:
call %file% shrinkfile LOG %connectionstring%

rem Сжатие базы данных
echo ----------------------------------------------
echo shrinkdatabase:
call %file% shrinkdatabase %connectionstring%

rem Удаление базы данных
echo ----------------------------------------------
echo dropdatabase:
call %file% dropdatabase %connectionstring%

Использование как библиотеки

Библиотека подключается как отдельный класс. Экземпляр класса используется для работы с базами на конкретном SQL-Сервере. Может также работать в качестве модуля.

Подключение библиотеки:

#Использовать "..\TMSSQL"

Создание класса:

УправлениеMSSQL = Новый УправлениеMSSQL();

Параметры класса:

  • ПараметрыПодключения - Структура параметров подключения. Содержание структуры:
    • АдресСервераSQL - Сетевой адрес MS SQL Server
    • ИмяПользователяSQL - Имя пользователя для подключения к MS SQL Server
    • ПарольПользователяSQL - Пароль пользователя для подключения MS SQL Server
    • ИмяБазыДанныхSQL - Имя базы данных, в которой по умолчанию будут выполняться все запросы
    • ConnectionTimeout - Количество секунд для ожидания подключения, по умолчанию - 30
    • CommandTimeout - Количество секунд для выполнения команды, по умолчанию - 600
  • ТекстОшибки - Переменная для возврата ошибки, если таковая имела место быть
  • РежимОтладки - Переменная для включения отладки, по умолчанию Ложь

Процедуры и функции (описание параметров смотрите к описанию процедур и функций в файле TРаботаСMSSQL.os):

  • ВыполнитьЗапрос() - Выполняет произвольный запрос в указанной базе данных
  • СоздатьБД() - Создает на сервере MS SQL новую базу данных. Если база данных с данным именем уже существует, ничего не происходит
  • УдалитьБД() - Удаляет базу данных с сервера MS SQL с указанным именем. Если база данных не найдена на сервере, ничего не происходит
  • УдалитьФайлНаСервере() - Удаляет файл на сервере MS SQL
  • ПолучитьСтруктуруФайловБД() - Получает данные файлов базы данных из параметров подключения
  • СделатьРезервнуюКопиюБД() - Создает резервную копию базы данных из параметров подключения
  • ПолучитьСписокФайловДляВосстановленияБД() - Получает последовательность файлов для воосстановления базы данных из параметров подключения на указанную дату
  • ВосстановитьИзРезервнойКопииБД() - Восстанавливает базу данных из параметров подключения по переданным именам файлов
  • ВосстановитьБД() - Восстанавливает базу данных из параметров подключения на указанную дату
  • ИзменитьМодельВосстановленияБД() - Изменяет модель восстановления базы данных из параметров подключения
  • СжатьБД() - Сжимает базу данных из параметров подключения
  • СжатьФайлыБД() - Сжимает файлы базы данных из параметров подключения

Пример использования (os-файл):

// При подключении библиотеки необходиомо указать путь к каталогу TMSSQL с библиотекой TMSSQL.
// Путь указывается относительно расположения данного файла.
#Использовать "..\TMSSQL" 

// Создадим объект	
УправлениеMSSQL = Новый УправлениеMSSQL();

// Введем параметры
ПараметрыПодключения = УправлениеMSSQL.ПараметрыПодключения;
ПараметрыПодключения.АдресСервераSQL = "10.1.1.40";
ПараметрыПодключения.ИмяПользователяSQL = "sa";
ПараметрыПодключения.ПарольПользователяSQL = "pass";
ПараметрыПодключения.ИмяБазыДанныхSQL = "Test_OS_TMSSQL";

БылиОшибки = Ложь;

// Создадим базу данных
Если УправлениеMSSQL.СоздатьБД() Тогда
    Сообщить("СоздатьБД: УСПЕШНО");
Иначе
    Сообщить("СоздатьБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;

// Получим список файлов базы данных
ТаблицаФайловБД = УправлениеMSSQL.ПолучитьСтруктуруФайловБД(); 
Если ТаблицаФайловБД <> Неопределено Тогда
    Сообщить("ПолучитьСтруктуруФайловБД: УСПЕШНО");
    Для Каждого ФайлБД Из ТаблицаФайловБД Цикл
        Сообщить("	Имя: " + ФайлБД.ЛогическоеИмя + ", Путь: " + ФайлБД.ФизическоеИмя + ", тип: " + ФайлБД.Тип + ", размер: " + ФайлБД.Размер + " Мб.");
    КонецЦикла;
Иначе
    Сообщить("ПолучитьСтруктуруФайловБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;

// Сменим модель восстановления базы на полную
Если УправлениеMSSQL.ИзменитьМодельВосстановленияБД("FULL") Тогда
    Сообщить("ИзменитьМодельВосстановленияБД: УСПЕШНО");
Иначе
    Сообщить("ИзменитьМодельВосстановленияБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;	

// Сделаем полную резервную копию
ПолноеИмяФайла = УправлениеMSSQL.СделатьРезервнуюКопиюБД(,,"FULL");
Если ПолноеИмяФайла <> Неопределено Тогда
    Сообщить("СделатьРезервнуюКопиюБД: УСПЕШНО в " + ПолноеИмяФайла);
Иначе
    Сообщить("СделатьРезервнуюКопиюБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;
Приостановить(6000);
ДатаПолнойКопии = ТекущаяДата();

// Сделаем разностную резервную копию
ПолноеИмяФайла = УправлениеMSSQL.СделатьРезервнуюКопиюБД(,,"DIFFERENTIAL");
Если ПолноеИмяФайла <> Неопределено Тогда
    Сообщить("СделатьРезервнуюКопиюБД: УСПЕШНО в " + ПолноеИмяФайла);
Иначе
    Сообщить("СделатьРезервнуюКопиюБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;
Приостановить(6000);

// Сделем копию журнала транзакций
ПолноеИмяФайла = УправлениеMSSQL.СделатьРезервнуюКопиюБД(,,"LOG");
Если ПолноеИмяФайла <> Неопределено Тогда
    Сообщить("СделатьРезервнуюКопиюБД: УСПЕШНО в " + ПолноеИмяФайла);
Иначе
    Сообщить("СделатьРезервнуюКопиюБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;
Приостановить(6000);

// Сделем копию журнала транзакций
ПолноеИмяФайла = УправлениеMSSQL.СделатьРезервнуюКопиюБД(,,"LOG");
Если ПолноеИмяФайла <> Неопределено Тогда
    Сообщить("СделатьРезервнуюКопиюБД: УСПЕШНО в " + ПолноеИмяФайла);
Иначе
    Сообщить("СделатьРезервнуюКопиюБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;
Приостановить(6000);

// Восстаноим базу на дату создания полной копии
Если УправлениеMSSQL.ВосстановитьБД(ДатаПолнойКопии) Тогда
    Сообщить("ВосстановитьБД: УСПЕШНО на дату " + ДатаПолнойКопии);
Иначе
    Сообщить("ВосстановитьБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;

// Получим список файлов для восстановления на текущую дату
МассивФайлов = УправлениеMSSQL.ПолучитьСписокФайловДляВосстановленияБД(); 
Если МассивФайлов <> Неопределено Тогда
    Сообщить("ПолучитьСписокФайловДляВосстановленияБД: УСПЕШНО");
    Для Сч = 0 По МассивФайлов.Количество()-1 Цикл
        Сообщить("	Файл: " + МассивФайлов.Получить(Сч));
    КонецЦикла;
Иначе
    Сообщить("ПолучитьСписокФайловДляВосстановленияБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;

// Восстановим базу данных по полученнуму ранее массиву файлов
Если УправлениеMSSQL.ВосстановитьИзРезервнойКопииБД(МассивФайлов) Тогда
    Сообщить("ВосстановитьИзРезервнойКопииБД: УСПЕШНО");
Иначе
    Сообщить("ВосстановитьИзРезервнойКопииБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;

// Удалим файлы резервных копий
Для Сч = 0 По МассивФайлов.Количество()-1 Цикл
    ИмяФайлаДляУдаления = МассивФайлов.Получить(Сч);
    Если УправлениеMSSQL.УдалитьФайлНаСервере(ИмяФайлаДляУдаления) Тогда
        Сообщить("УдалитьФайлНаСервере: УСПЕШНО для " + ИмяФайлаДляУдаления);
    Иначе
        Сообщить("УдалитьФайлНаСервере: " + УправлениеMSSQL.ТекстОшибки);
        БылиОшибки = Истина;
    КонецЕсли;
КонецЦикла;

// Переведем базу в простую модель восстановления
Если УправлениеMSSQL.ИзменитьМодельВосстановленияБД("SIMPLE") Тогда
    Сообщить("ИзменитьМодельВосстановленияБД: УСПЕШНО");
Иначе
    Сообщить("ИзменитьМодельВосстановленияБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;

// Запустим сжатие файлов лога
Если УправлениеMSSQL.СжатьФайлыБД("LOG") Тогда
    Сообщить("СжатьФайлыБД: УСПЕШНО");
Иначе
    Сообщить("СжатьФайлыБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;

// Запустим сжатие базы данных
Если УправлениеMSSQL.СжатьБД() Тогда
    Сообщить("СжатьБД: УСПЕШНО");
Иначе
    Сообщить("СжатьБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;

// Удалим базу данных
Если УправлениеMSSQL.УдалитьБД() Тогда
    Сообщить("УдалитьБД: УСПЕШНО");
Иначе
    Сообщить("УдалитьБД: " + УправлениеMSSQL.ТекстОшибки);
    БылиОшибки = Истина;
КонецЕсли;

// Отчет о работче процедуры
Сообщить("");
Сообщить("-----------------------------------------------");
Сообщить("Результат работы тестирования модуля: " + ?(БылиОшибки,"БЫЛИ ОШИБКИ","УСПЕШНО"));
Сообщить("-----------------------------------------------");
Сообщить("");

Доступные версии пакета

В разработке

Репозиторий

https://github.com/oscript-library/TMSSQL

Актуальная версия

TMSSQL-2018.4.6