2010-05-10 3 views
0

Мне нужно обновить существующие данные или вставить новые данные из базы данных клиента. Например, DB1 в центральную базу данных говорят, что DB2, поддерживающая одну и ту же схему, и обе базы данных находятся на одной машине. Обновления не являются двунаправленными. Я просто хочу, чтобы изменения отражались от клиента (DB1) до сервера (DB2).Синхронизировать клиентскую базу данных с центральной базой данных

База данных клиентов (DB1) - это не что иное, как резервная база данных (полная резервная копия базы данных, состоящая из файлов mdf и ldf), которая прикреплена к тому же серверу, где существует центральная база данных (DB2). Я не буду вносить какие-либо изменения в базу данных резервного копирования (DB1) после ее присоединения к серверу. В базе данных резервного копирования (DB1) уже есть модифицированные данные, которые я хочу обновить до центральной базы данных (DB2). Итак, как я могу программно использовать C# .NET?. Можете ли вы дать какой-либо пример кода?

Я попытался выполнить транзакционную репликацию с подпиской на подписку без отправки моментального снимка. Проблема в том, что я хочу обновить измененные данные из DB1 до центральной базы данных DB2 при первом запуске, но транзакционная репликация не позволит мне это сделать. Он не будет отправлять какие-либо измененные данные, которые уже присутствуют в DB1. Поэтому исходные данные, присутствующие в DB1, нетронуты, когда вы пытаетесь отправить без моментального снимка. База данных резервного копирования (DB1) уже имеет модифицированные данные до репликации. Как решить эту проблему, так как я не собираюсь вставлять какие-либо новые или изменять данные в резервную базу данных (DB1) после установки репликации.

Спасибо и уважением, Паван

+0

Привет, Паван, не могли бы вы переформатировать свой пост? Кажется, что в каждой строке есть пробелы, что делает его форматированным как исходный код. – chiccodoro

ответ

0

Для достижения этой цели у вас есть следующие варианты:

1.) репликации транзакционных Использование SQL Server. Сделайте DB1 как Publisher, DB2 как подписчик и перейдите на подписку Pull или Push. Все изменения в DB1 будут просто отражены на центральном. Если какие-либо изменения мы там в Центральном для одного и того же кортежа, они будут перезаписаны изменениями DB1.

Преимущества: Простота реализации и надежные Недостатки: Очень мало настройки

2.) Использование Microsoft Sync Framework SQLDataBaseProvider. Преимущества: Очень гибкий Недостатки: Я слышал плохие вещи об этом, но никогда не пробовал.

3.) Пользовательская реализация: Это немного сложно, поскольку вам нужно отслеживать изменения в DB1. Одним из вариантов может быть чтение журналов транзакций, которые Transactional Replication выполняет внутренне или другой вариант, чтобы использовать триггер и создавать знания об изменениях. Затем вам нужно написать библиотеку или подпрограмму, которая поможет вам изменить знания, а затем примениться к центральному.

Edit: Для резервного копирования и восстановления базы данных progmatically:

http://www.mssqltips.com/tip.asp?tip=1849

+0

Извините, я спросил об этом неправильно. Клиентская база данных (DB1) - это не что иное, как резервная база данных (полная резервная копия базы данных, состоящая из файлов mdf и ldf), которая подключена к тому же серверу, где существует центральная база данных (DB2). Я не буду вносить какие-либо изменения в базу данных резервного копирования (DB1) после ее присоединения к серверу. В базе данных резервного копирования (DB1) уже есть модифицированные данные, которые я хочу обновить до центральной базы данных (DB2). Итак, как я могу программно использовать C# .NET? Мне действительно нужна помощь. Если возможно, вы можете дать мне примерный код. Спасибо и приветствую Pavan –

0

Microsoft Sync Framework является лучшим решением, особенно если вы используете экспресс-изданий (в этом случае репликация не будет работать).

Структура синхронизации довольно проста, если используется с отслеживанием изменений SQL-сервера на сервере sql 2008. Также вы можете определить свой режим синхронизации (двунаправленный, загружать только, скачать только), а также определить, что происходит, когда конфликты (например, ограничения нарушаются и т. д.).

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

+0

Извините, на самом деле я спросил об этом неправильно. Я снова описал свой сценарий для ответа Нитина Медхи. Можете ли вы найти решение для меня. Спасибо за ответ. –

+0

Я забыл упомянуть, что я использую стандартную редакцию SQL Server 2005 –

+0

для комментариев: «особенно если вы используете экспресс-выпуски (в этом случае репликация не будет работать)». вы можете использовать RMO (объекты управления репликацией), чтобы программно выполнять синхронизацию в Express-изданиях. –

0

Вы также можете изучить функциональность SQL Server merge replication. Это тип репликации, предназначенный для того, чтобы спутниковые базы данных автоматически отправляли свои результаты в центральный репозиторий.

Смежные вопросы