Просмотр задачи

НомерПроектКатегорияВидимостьИзменен
0001559RasKonПожеланияпубличная2021-07-30 22:27
ИнициаторADGroup ОтветственныйADGroup  
ПриоритетобычныйВлияниемалоеВоспроизводимостьне проверялась
Состояние закрытаРешениерешена 
Целевая версия10.05Решена в версии10.05 
Тема0001559: Перенос работы с базой данных в MSSQL.
Описание-
МеткиНет связанных меток.
Количество обращений
Срок реализации (дней)
Стоимость
Планируемая дата

Деятельность

Stealth7777

2017-10-06 11:32

автор   ~0001605

Замечательная мысль с пятью НО!

1. Если информация в СУБД будет храниться в открытом виде.
Если организации нужна конфиденциальность, сисадмин может реализовать ее средствами самой SQL.

2. Назначения полей, первичные и внешние ключи должны быть наиболее полным образом описаны.

3. Максимально воздержаться от составных первичных ключей и первичных ключей по полям с типами char и nvarchar.

4. Базу формировать без индексов. Каждый сисадмин сможет проанализировать производительность своей БД и, при необходимости, определить необходимые для них поля, создать индексы.

5. Заменить программный код Раскон средствами SQL там, где это возможно (агрегатные, скалярные, табличные функции, триггеры, хранимые процедуры, ограничивающие ключи и т.д.). Это:
- уменьшит трафик
- снимет нагрузку на клиенте
- максимально оправдает использование SQL
- даст возможность повторно использовать код T-SQL вместо создания API Раскон (если такой планируется), отказаться от REST
- уменьшит вероятность возникновения труднодиагностируемых ошибок машинного (скомпилированного) кода.

В противном случае переход почти не имеет практического смысла.

ADGroup

2017-10-06 11:49

администратор   ~0001608

1. В первом представлении база будет иметь туже структуру что и в Access. Изменение структуры это отдельный вопрос и не будет делаться сразу иначе перевести базу на MSSQL вообще не удастся если делать все сразу.
2. Пока там толком нечего описывать кроме первичных ключей и названий таблиц.
3. Таких нет но составные первичные ключи не исключаю в будущем, но это будет видно ближе к реализации при условии если без них производительность будет низкая.
4. База содержит индексы по первичным ключам.
5. Это на перспективу, сейчас об этом тяжело говорить, так как требуется обратная совместимость. Для дилерских безлимитных программ нужна например максимально простая установка и по умолчанию они по прежнему будут работать на Access, иначе процесс установки и поддержки данных клиентов может резко усложнится. По этому хранимые процедуры будут вводится с осторожностью и опять же не сразу.

Перевод на MSSQL в любом случае имеет смысл как минимум ради стабильности работы базы, Вы по своему опыту знаете о таких проблемах на больших базах. Плюс минимальный функционал по транзакциям и блокировкам, которые в Access вроде как есть но их работа вызывает большие вопросы, что опять же критично на больших базах и большом числе пользователей.

ADGroup

2018-03-02 12:34

администратор   ~0001743

Последние изменения: 2018-03-02 12:40

Реализован первый тестовый вариант работы с базой данных в MSSQL сервере. Тестирование проводилось на MSSQL Express 2017. Функции резервного копирования и восстановления базы из архива работают нормально. Сначала создается архив текущей базе в формате "*.zp", потом из него с помощью "утилит баз данных" восстанавливаем базу уже в MSSQL. Для настройка соединения с базой используется Connection String, который можно настраивать в интерфейсе из специального окна программы. Средство универсальное, теоретически можно будет в будущем расширить и на другие СУБД. Работа с базой также сделана максимально универсальным образом чтоб на данном этапе не привязываться к синтаксису и специализированным возможностям конкретной СУБД. На данном этапе программа не умеет сама создавать базу данных, по этому после инсталляции MSSQL нужно вручную выполнить запрос "create database raskondb" (имя базы можно создавать любое, для примера указано raskondb), после этого в программе нужно настроить Connection String на соединение с этой базой данных, после этого при первом старте программы сделать восстановление базы из архива с помощью "утилит базы данных". Режим работы с базой через Connection String задается с помощью коммандной строки и параметра -usedbconstr. Более подробная инструкция будет позже.

ADGroup

2018-04-13 22:40

администратор   ~0001767

Последние изменения: 2021-07-30 22:27

Инструкция по переносу базы на MSSQL:
1. Создаем принудительно архив базы данных в новом формате. Для этого запускаем программу через командную строку с дополнительными параметрами, в результате программа в папке data создаст архив базы в файле с именем "yyyymmdd_hhnn.zp", где yyyymmdd_hhnn текущая дата и время:
ccalc.exe -usefdacc -arhivebase
2. Необходимо создать connection string и создать саму базу данных на сервере MSSQL.
2.1. Запускаем программу как обычно ярлыком с рабочего стола, на окне ввода имени пользователя и пароля ничего не вводим и сразу нажимаем кнопку "утилиты базы данных". Откроется окно утилит, нажимаем на клавиатуре F10 и на окне утилит появится скрытая кнопка "Редактировать Connection String". Нажимаем, открывается редактор. В редакторе на первой вкладке Definition устанавливаем Driver ID значение "MSSQL", ниже где значение Server выбираем (прописываем) сервер. Прописываем User_Name и Password для подключения к серверу или ставим параметр OSAuthent=Yes если сервер поддерживает аутентификацию на уровне операционной системы. Нажимаем кнопку Test для проверки соединения с сервером.
2.2. Необходимо создать базу данных на MSSQL сервере. Если база данных уже создана ранее и создана вручную другими средствами, то пропускаем этот пункт. Открываем вкладку "SQL Script" и вписываем скрипт "create database raskondb", где raskondb это имя базы данных (можно указать любое имя, только запомните его). Нажимаем кнопку "Run ...". Возвращаемся на вкладку Definition.
2.3. В параметре Database прописываем raskondb (имя базы данных). Снова нажимает "Test" для проверки подключения к базе.
2.4. Закрываем редактор нажав кнопку "OK", закрываем окно утилит и на окне ввода логина и пароля нажимаем "Отмена" чтоб закрыть программу.
3. Запускаем программу в режиме работы через Connection String. Для этого запускаем программу через командную строку с параметром:
ccalc.exe -usedbconstr
4. При первом запуске программы после создания базы данных (база данных пока пустая) необходимо восстановить базу данных из архива, чтоб она восстановилась уже в MSSQL. Для этого запускаем программу, заходим в "утилиты базы данных" и выбираем в списке архивов наш свежий архив "yyyymmdd_hhnn.zp", где yyyymmdd_hhnn текущая дата и время на момент создания архива из пункта 1. Важно: другой архив выбирать нельзя так как он будет в старом формате, и такой архив нельзя развернуть в MSSQL.
5. После успешного восстановления архива базы в MSSQL можно ввести логин и пароль для входа в программу и работать с ней. Програму нужно будет каждый раз запускать как написано в пункте 3.

Важно: действия из пункта 1 принудительно формируют архив в новом формате, внешне это никак не отличается от старого, только там другая структура файла. Плюс архивы в новом формате можно создавать на работающей программе, когда другие пользователи работают с базой. Когда программа работает с MSSQL (в режиме работы через Connection String) все дневные архивы будут автоматически создаваться уже в ном формате даже если база занята другими пользователями, аналогично функция создания дилерской базы данных будет работать без закрытия программы другими пользователями, но этот файл не поймут дилерские программы без дополнительных действий. Об этом лучше написать отдельно. Работа с дилерскими программами потребует отдельных специальных действий (из-за архивов нового формата).


Поддержка задачи сообществом
Эта задача отмечена что решена.
Евли Вы думаете что это не так, пожалуйста откройте её повторно и разьясните почему.
Сторонники: panas vovaukrainec
Нейтралитет: Еще не проголосовало нейтрально ни одного пользователя за данную задачу.
Оппоненты: Еще не проголосовало ни одного оппонента за данную задачу.

История изменений

Дата изменения Пользователь Поле Изменить
2017-08-17 13:26 ADGroup Новая задача
2017-08-17 13:26 ADGroup Состояние новая => назначена
2017-08-17 13:26 ADGroup Ответственный => ADGroup
2017-10-06 11:32 Stealth7777 Комментарий добавлен: 0001605
2017-10-06 11:49 ADGroup Комментарий добавлен: 0001608
2018-03-02 12:34 ADGroup Комментарий добавлен: 0001743
2018-03-02 12:34 ADGroup Целевая версия 10.XX (готовится к выпуску) => 10.05
2018-03-02 12:36 ADGroup Комментарий изменен: 0001743
2018-03-02 12:36 ADGroup Комментарий изменен: 0001743
2018-03-02 12:40 ADGroup Комментарий изменен: 0001743
2018-03-02 12:40 ADGroup Комментарий изменен: 0001743
2018-03-08 10:14 ADGroup Состояние назначена => закрыта
2018-03-08 10:14 ADGroup Решение открыта => решена
2018-03-08 10:14 ADGroup Решена в версии => 10.05
2018-04-13 22:40 ADGroup Комментарий добавлен: 0001767
2021-07-30 21:17 ADGroup Комментарий изменен: 0001767
2021-07-30 22:27 ADGroup Комментарий изменен: 0001767
2021-07-30 22:27 ADGroup Комментарий изменен: 0001767
2021-07-30 22:27 ADGroup Комментарий изменен: 0001767