Поделиться через


Многопользовательский доступ и синхронизация

Поскольку Microsoft SQL Server Compact 3.5 поддерживает многопользовательский доступ, пользователи могут работать с базой данных во время ее репликации. При разработке приложений, использующих SQL Server Compact 3.5, необходимо учитывать, что подобные ситуации могут вызывать конфликты с изменениями, получаемыми от издателя. Подобные конфликты называют локальными конфликтами данных. Некоторые сценарии 64-разрядных платформ не поддерживают одновременный доступ к файлу базы данных с SQL Server Compact более поздних версий. Дополнительные сведения о 64-разрядных версиях компонентов см. в разделе Управление 64-разрядными приложениями баз данных.

Влияние многопользовательского доступа

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

Возможность

Проблема

Блокировка

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

Чтобы предотвратить подобные ситуации, необходимо в приложении запретить изменение данных пользователем во время синхронизации.

Сверка

Если используется сверка и количество строк в базе данных SQL Server Compact 3.5 изменяется в процессе синхронизации, сверка завершается неудачно.

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

Повторная инициализация

Во время повторной инициализации подписки уровень репликации удаляет, а затем повторно создает все реплицированные пользовательские и системные таблицы. Как и в случае с подписками SQL Server, при повторной инициализации теряются все изменения, внесенные после начала синхронизации.

Чтобы предотвратить потерю данных, необходимо в приложении запретить изменение данных пользователем во время повторной инициализации.

Изменения схемы

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

Изменения во время синхронизации

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

Обнаружение и разрешение конфликтов

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

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

Дополнительные сведения об обнаружении и разрешении конфликтов см. в разделе Обнаружение и разрешение конфликтов репликации.

Использование свойства SubscriberConflicts

Внесение изменений в локальную базу данных во время синхронизации может привести к конфликтам. Если подписчику не удается сохранить полученную от издателя строку, считается, что возник конфликт у подписчика, и устанавливается свойство SubscriberConflicts. При возникновении конфликта у подписчиков SQL Server конфликт разрешается подписчиком. Однако в SQL Server Compact 3.5 отсутствует посредник, поэтому все конфликты должны разрешаться издателем. Приложение можно разработать таким образом, чтобы после каждой синхронизации проверялось значение свойства SubscriberConflicts. Если это значение не равно нулю, необходимо выполнить повторную синхронизацию данных, чтобы издатель мог разрешить конфликт.

См. также

Другие ресурсы

Синхронизация данных (SQL Server Compact)

Синхронная синхронизация данных

Асинхронная синхронизация данных

Обнаружение и разрешение конфликтов репликации