Как перенести базы данных Access нескольких пользователей в одну базу данных SQLServer - PullRequest
2 голосов
/ 22 ноября 2010

ОБНОВЛЕНО 2010-11-25

Устаревшее автономное приложение (A1) перерабатывается как веб-приложение (A2).

A1 написан на Delphi 7 и использует базу данных MS Access для хранения данных. A1 был разослан ~ 1000 активным пользователям, которые мы не можем контролировать во время сборки A2.

База данных содержит ~ 50 таблиц, некоторые из которых содержат пользовательские данные, некоторые содержат шаблонные данные (которые не нужно копировать); 3-4 из этих пользовательских таблиц больше (<5000 записей), остальные маленькие (<100). </p>

Как только A2 станет «живым», пользователи A1 смогут перейти на A2. Я ищу сравнение сценариев, чтобы сделать это.

Одним из вариантов является разработка автономного инструмента «обновления» для этих пользователей, и этот инструмент обновления может общаться с базой данных A2 через веб-сервисы.

Другой вариант - разрешить пользователям загружать свою базу данных Access db (~ 15 МБ) на наш сервер, запускать какой-то пакет служб SSIS (возможно, в одночасье), чтобы передать его в A2 для этого пользователя, и впоследствии удалить базу данных Access .

Мне не хватает опций? Какой вариант является «лучшим» (я понимаю, что это может быть несколько субъективно, но, надеюсь, плюсы и минусы сценария, по крайней мере, будут понятны).

Я с удовольствием сделаю это вики-сообществом, если того потребуют.

ОБНОВЛЕНИЕ 2010-11-23: было предложено, чтобы вариант сценария 1 заключался в том, чтобы инструмент / приложение обновления взаимодействовало непосредственно с производственной базой данных. Это возможно?

ОБНОВЛЕНИЕ 2011-11: К настоящему времени это было принято в производство. Пользователи загружают файл .zip, в котором находится .mdb, который распаковывается и помещается в безопасное место. Ночное запланированное задание SSIS приходит и перемещает данные в промежуточные таблицы, которые затем переносятся в производство через SP.

Ответы [ 4 ]

2 голосов
/ 30 ноября 2010

Если у вас нет контроля над 1000+ пользователями А1, как вы собираетесь заставить их всех конвертировать в А2?

Рассматривали ли вы предоставление им базы данных SQL Server Express для обновления и предоставление им возможности размещать веб-приложение на своих собственных серверах?

2 голосов
/ 23 ноября 2010

Как лучше всего это сделать, будет зависеть от ссылочной целостности и бизнес-правил, которые должны применяться, если таковые имеются.Например, есть ли возможность дублирования при объединении баз данных?Я полагаю, что они объединены из вашего несколько загадочного утверждения: «И да, одна база данных для всех, членство в aspnet для идентификаторов пользователей».

2 голосов
/ 30 ноября 2010

Я бы склонялся к загрузке полной базы данных и выполнению преобразования на сервере.

В любом случае вам нужно написать программу преобразования.Реальный вопрос заключается в том, сколько конверсии вы развернете и запустите на компьютерах клиентов.Я хотел бы сохранить эту часть как можно проще, то есть просто загрузить.Таким образом, если вы обнаружите какие-либо ошибки или неожиданные данные во время преобразования, вы можете просто обновить сервер и не нужно повторно развертывать программу преобразования.

Общий объем данных, о которых вы говорите, не слишком велик для загрузки, и, похоже, большинство из них необходимо будет загрузить в любом случае.

Если вы устанавливаете конверсионную программу локально, ей потребуется способ восстановления после конвертации, которая частично остановилась.Это может быть намного сложнее, чем просто перезапустить загрузку базы данных доступа.

Кроме того, вы не указываете, что веб-службы будут нуждаться после преобразования.Усилия по объединению этих сервисов и обеспечению их работоспособности и безопасности во время конверсий будут гораздо больше, чем простое приложение для загрузки или веб-форма.

Еще один фактор - это скорость конвертации ваших клиентов.Если некоторые из них будут запускать текущее приложение в течение некоторого периода времени, вам может потребоваться обновить приложение преобразования, так как база данных сервера меняется со временем.Если вы загрузите базу данных и запустите преобразование на сервере, то потребуется обновить только программу преобразования сервера.Не будет никакого риска того, что клиент скачает программу преобразования, но не запустит ее до тех пор, пока не будут обновлены базы данных сервера.

У нас есть похожий случай, когда мы решаем запустить преобразование на сервере.Мы создали веб-страницу для пользователя, чтобы загрузить свои файлы.В этом случае нет ничего для развертывания для нового приложения.Единственный недостаток, который мы обнаружили, - это заставить пользователя выбрать правильный файл.Если вы используете веб-форму для загрузки, вы не можете предварительно выбрать имя файла для пользователя из-за ограничений безопасности.В нашем случае мы знали, где находится файл, а клиенты - нет.Мы предоставляем указания на странице загрузки для пользователей, чтобы помочь им.Вы можете избежать этого, написав небольшое настольное приложение для выполнения загрузки для пользователей.

Единственный недостаток, который я вижу при написании серверной конверсии, - это то, что некоторые данные вашего шаблона будут загружены, что не нужно.В любом случае это небольшой объем данных.

Плюсы сервера: - Нет необходимости повторно развертывать преобразование из-за ошибок, непредвиденных данных или изменений в базе данных сервера - Легче защитить (возможно), есть только один доступточка - загрузка.Конечно, вы принимаете данные о клиентах в виде базы данных доступа, поэтому вы все еще не можете доверять ей.

Недостатки сервера: - загрузка ненужных данных шаблона

Desktop Pros: -?У меня возникают проблемы с любыми

Минусами рабочего стола: - Может потребоваться развернуть несколько версий

Что касается непосредственного общения с базой данных сервера.У меня есть одно приложение, которое напрямую обращается к размещенной базе данных, чтобы избежать создания веб-сервисов.Это работает хорошо, но если бы у меня была возможность, я бы больше не пошел по этому пути.Интернет отключается на регулярной основе, и поставщики SQL не очень хорошо выздоравливают.Мы обучили наших клиентов просто попробовать еще раз, когда это произойдет.Мы сделали это, чтобы избежать создания веб-сервисов для нашего настольного приложения.Мы просто ссылаемся на IP-адрес в строке подключения к серверу.Существует целый список причин безопасности, чтобы не идти по этому пути - мы были довольны нашей настройкой безопасности и возможными рисками.В конце концов, отказ от использования настольного приложения без каких-либо модификаций не стоил иметь нестабильный продукт.

2 голосов
/ 23 ноября 2010

Поскольку новый сервер баз данных, вероятно, является одним из стандартных движков баз данных в отрасли, почему бы не рассмотреть возможность подключения приложения доступа к этому серверу баз данных?Таким образом, вы можете просто отправлять свои данные на сервер sql таким способом.

Я не совсем уверен, почему вы бы даже посоветовали использовать набор веб-сервисов для механизма базы данных, когда доступ поддерживает связь ODBCк этому движку базы данных.Таким образом, один из возможных путей обновления будет состоять в том, чтобы просто выпустить новое приложение в доступе, которое должно быть помещено в тот же каталог, в котором находится их текущий существующий файл данных (и приложение).Затем при запуске это приложение может просто RE связать все свои таблицы с существующей базой данных, а также предоставить набор таблиц с предварительной связью с сервером базы данных.Это будет намного меньше работы по созданию подхода веб-сервисов.Я полагаю, что часть этого сосредоточена вокруг того, где будут размещаться серверы баз данных, но в большинстве случаев, возможно, в период миграции, сервер баз данных работает где-то, где каждый может получить к нему доступ.И многие веб-провайдеры теперь допускают внешние ссылки на свою базу данных.

Также не ясно, что в системе сервера баз данных вы собираетесь создавать отдельные базы данных для каждой или, как вы предлагаете в заголовке, этовсе будет помещено в одну базу данных.Поскольку будет помещен в одну базу данных, то при увеличении размера будет добавлен дополнительный столбец, который идентифицирует местоположение пользователя или, тем не менее, вы планируете различать каждую базу данных во время этого процесса изменения размера, чтобы различать каждый набор данных пользователя.

Насколько простым будет этот тип миграции, будет зависеть от схемы и структуры базы данных, которые разработчики используют для новой системы.Надеюсь и очевидно, что в нем есть положения для каждого пользователя или местоположения, или же вы планируете различать каждого отдельного пользователя системы.Итак, я не предлагаю веб-сервисы, но предлагаю связывать таблицы из приложения Access с экземпляром SQL-сервера (или любого другого сервера, на котором вы работаете).

...