Вопрос

В настоящее время у меня возникла проблема, связанная с использованием нескольких баз данных 2003 (одной и той же схемы) на ноутбуках.

Мне нужно найти автоматизированный способ синхронизации данных в центральную базу данных.

Данные на ноутбуках только добавляются, поэтому операции обновления/удаления не будут проблемой.

Какие инструменты позволят мне сделать это легко?Какие факторы повлияют на решение о лучшем инструменте или решении?

Это было полезно?

Решение

Можно использовать репликацию Jet, встроенную в Access, но я предупрежу вас, она довольно нестабильная. Он также испортит ваш ПК в любых таблицах, в которых вы это делаете, потому что он выбирает случайные целые числа со знаком, чтобы попытаться избежать столкновений клавиш, поэтому вы можете в конечном итоге использовать -1243482392912 в качестве следующего ПК в данной записи. Это PITA для ввода, если вы выполняете какой-либо поиск по нему (например, идентификатор клиента, номер заказа и т. Д.). Вы не можете автоматизировать синхронизацию доступа (возможно, вы можете подделать что-то подобное с помощью VBA. Но все же , он будет запущен только при открытой базе данных).

Я бы порекомендовал использовать SQL Server 2005/2008 на вашем " центральном " базы данных и использовать SQL Server Express Edition в качестве серверной части на своем «удаленном» сервере. базы данных, а затем используйте связанные таблицы в Access для подключения к этим базам данных SSEE и репликации для их синхронизации. Настройте один из вариантов: объединить репликацию или репликацию моментальных снимков с вашим " центральным " база данных в качестве издателя и ваши базы данных SSEE в качестве подписчиков. В отличие от репликации Access Jet, вы можете контролировать нумерацию PK, но для вас это не будет проблемой, так как ваши подписчики не будут продвигать изменения.

Помимо масштабируемости, которую принесет SQL-сервер, вы также можете автоматизировать это с помощью диспетчера синхронизации Windows (если у вас есть синхронизированные папки, это раздражающее маленькое окно, которое всплывает и синхронизирует их при входе / выходе из системы), и установите его таким образом, чтобы он синхронизировался с заданным интервалом, при запуске, завершении работы или в определенное время суток, и / или когда компьютер не используется, или синхронизируется только по требованию. Даже если Access не запускается в течение месяца, его набор данных может обновляться каждый раз, когда ваши пользователи подключаются к сети. Очень классные вещи.

Другие советы

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

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

Ответы в этой теме заполнены дезинформацией о Jet Replication от людей, которые явно не использовали его и просто повторяют то, что слышали, или приписывают проблемы Jet Replication, которые фактически отражают ошибки проектирования приложения.

  

Возможно использовать Jet   Репликация встроена в Access, но я   предупредит вас, это довольно облупленное.

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

  

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

Суррогатные номера Autonumber PK никогда не должны быть открыты для пользователей. Это бессмысленные числа, используемые для соединения записей за кулисами, и если вы предоставляете их пользователям, это ОШИБКА В ВАШЕМ ДИЗАЙНЕ ПРИЛОЖЕНИЯ.

Если вам нужны порядковые номера, вам придется свернуть свои собственные и решить вопрос о том, как предотвратить коллизии между вашими репликами. Но это проблема репликации в любом ядре базы данных. SQL Server предлагает возможность выделения блоков порядковых номеров для отдельных реплик на уровне ядра базы данных, и это действительно хорошая функция, но она достигается за счет увеличения административных издержек из-за поддержки нескольких экземпляров SQL Server (со всеми проблемами безопасности и производительности что влечет за собой). В Jet Replication вам придется делать это в коде, но это вряд ли сложная проблема.

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

Но это не какой-то недостаток в реализации Jet репликации - это проблема для любого сценария репликации с необходимостью значимых порядковых номеров.

  

Вы не можете автоматизировать доступ   синхронизация (возможно, вы можете подделать   как то с помощью VBA. но   тем не менее, это будет работать только тогда, когда   база данных открыта).

Это явно не соответствует действительности. Если вы установите синхронизатор Jet, вы можете запланировать синхронизацию (прямую, косвенную или интернет-синхронизацию). Даже без этого вы можете запланировать периодический запуск VBScript и синхронизацию. Это всего лишь два способа выполнения автоматической синхронизации Jet без необходимости открывать приложение Access.

Цитата из документации MS:

  

Использовать Jet и объекты репликации

JRO - действительно не лучший способ управления Jet Replication. С одной стороны, он имеет только одну функцию, которой сам DAO не обладает, то есть способность инициировать косвенную синхронизацию в коде. Но если вы собираетесь добавить зависимость в свое приложение (JRO требует ссылку или ее можно использовать с помощью позднего связывания), вы также можете добавить зависимость от действительно полезной библиотеки для управления Jet Replication, и это Синхронизатор TSI , созданный Майклом Капланом, когда-то известным в мире экспертом по Jet Replication (который с тех пор перешел на интернационализацию как свою область концентрации). Он дает вам полный программный контроль практически над всеми функциями репликации, которые предоставляет Jet, включая планирование синхронизации, запуск всех видов синхронизации и столь необходимую команду MoveReplica (единственный допустимый способ перемещения или переименования реплики без прерывания репликации).

Вам следует прочитать Доступ База данных Репликация, так как там есть некоторая информация.

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

Используйте объекты Jet and Replication (JRO), если вам требуется программный контроль над обменом данными и проектной информацией между членами набора реплик в базах данных Microsoft Access (только файлы .mdb).Например, вы можете использовать JRO для написания процедуры, которая автоматически синхронизирует реплику пользователя с остальным набором, когда пользователь открывает базу данных.Чтобы реплицировать базу данных программно, базу данных необходимо закрыть.

Если ваша база данных была создана с помощью Microsoft Access 97 или более ранней версии, вам необходимо использовать объекты доступа к данным (DAO) для ее программного репликации и синхронизации.

Вы можете создавать и поддерживать реплицируемую базу данных в предыдущих версиях Microsoft Access, используя методы и свойства DAO.Используйте DAO, если вам требуется программный контроль над обменом данными и проектной информацией между членами набора реплик.Например, вы можете использовать DAO для написания процедуры, которая автоматически синхронизирует реплику пользователя с остальным набором, когда пользователь открывает базу данных.

Для создания и обслуживания реплицируемой базы данных можно использовать следующие методы и свойства:

  • MakeReplica метод
  • Synchronize метод
  • ConflictTable свойство
  • DesignMasterID свойство
  • KeepLocal свойство
  • Replicable свойство
  • ReplicaID свойство
  • ReplicationConflictFunction свойство

Microsoft Jet предоставляет следующие дополнительные методы и свойства для создания и обслуживания частичных реплик (реплик, содержащих подмножество записей в полной реплике):

  • ReplicaFilter свойство
  • PartialReplica свойство
  • PopulatePartial метод

Вам обязательно стоит прочитать Синхронизация данных часть документации.

Я использовал репликацию в a00 в течение многих лет, пока не был вынужден обновиться до a07 (когда он исчез). Наиболее проблемной проблемой, с которой мы столкнулись на уровне предприятия, было управление КОНФЛИКТАМИ . Если своевременно не управлять или их слишком много, пользователи разочаровываются и данные становятся ненадежными.

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

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

У пользователя была отдельная кнопка для отправки / извлечения каналов из указанного файла FTP, который будет обновляться из устаревших систем.

Этот процесс работал довольно хорошо, так как у нас было 30 таких «узлов» работа по всей стране, управление своими данными и обновление на FTP-серверах.

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

Вы можете написать собственное программное обеспечение для синхронизации, которое подключается к ноутбуку, выбирает diff из его базы данных и вставляет его в мастер. Это зависит от вашей схемы данных, насколько легко будет эта операция. (если у вас много таблиц с FK ... вам нужно будет делать это с умом). Я думаю, что это будет наиболее эффективно, если вы напишите это сами.

Автоматизация такого типа поведения называется репликацией, а Accesss поддерживает Это, очевидно, но я никогда не видел, чтобы это было реализовано.

Как я полагаю, большую часть времени ноутбук не подключен к основной БД, это не очень хорошая идея (для репликации данных).

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

Кстати:

  1. Автономера.Я согласен с Дэвидом – их никогда не следует разоблачать.Чтобы избавиться от этого искушения, я использую случайный автономер.
  2. Репликация.Несколько лет назад я широко использовал это с синхронизацией по расписанию и использованием GUID в качестве ПК.Я неоднократно обнаруживал, что любые сбои в сети повреждали реплики, в результате чего мне приходилось восстанавливать данные и перевыпускать реплики.Больно!
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top