2011-06-06 5 views
1

Я хочу синхронизировать 2 записи, специфичные для базы данных. Предположим, у меня есть две базы данных;Как синхронизировать 2 базы данных

1.Shop 
2.Stock 

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

Что я работаю в том, что - если подключение к Интернету стабильно,

  • Когда изменение цены на складе, я вызвать веб-сервис эта услуга будет вставлять записи в таблице цены веб-данных.
  • Теперь на стороне магазина Я пинг, что таблица веб-данных с помощью веб-службы каждые 20 минут, если я нахожу новую запись, я обновляю соответствующую цену продукта в магазине!

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

Является ли мой первый вариант эффективным для этой цели или я что-то упускаю, и есть лучшая альтернатива для достижения этой цели!

+0

Репликация или брокер услуг являются очевидными инструментами для этой работы, но, как вы уже определили, им нужна хотя бы одна не-экспресс-версия SQL Server для работы. –

+0

Это * может * быть одним для dba.SE, но, возможно, потребуется кодирование без базы данных, если версии SQL OP не могут выполнять репликацию. Поэтому я сейчас ухожу. – Kev

ответ

0

вы можете создать триггер на биржевой таблице.

CREATE TRIGGER triggerName 
ON [Stock].[dbo].[products] 
AFTER UPDATE 
AS 
IF (UPDATE (productPrice)) 
BEGIN 
    --insert to shop 
END 
GO 
+0

просто из любопытства - будет ли это работать, если две базы данных находятся на другом сервере и/или за брандмауэром? –

+0

Я не уверен о брандмауэре, но для разных серверов (серверы должны быть связаны вместе) вы можете явно ссылаться на таблицы как на servername.databasename.tablename .. но это может иметь некоторые проблемы с производительностью ... вместо этого вы можете использовать репликацию ... – pRimE

+1

Обычно я рекомендую использовать триггеры cross-* database *, не говоря уже о cross- * server * - если сетевое соединение снижается, вы фактически делаете эту таблицу только для чтения, а ошибки, которые она производит, будут интересными. –

1

Вы могли бы иметь триггер на столе, как PRIME говорит выше, но вместо того, чтобы писать непосредственно в другой базе данных записи изменений в местном «ступенчатого» таблицы, а затем каждые 20 мин или так запланировать задачу отправить обновления для второго db.

Вы можете настроить второй БД как связанный сервер.

Таким образом, вы избегаете делать стол триггер включен только для чтения, если соединение между двумя dbs идет вниз.

+0

+1 для промежуточного стола. –

0

IF не может использовать функцию репликации сервера MS SQL (требует не-Express Edition, как вы уже определили) для данной ситуации (см http://msdn.microsoft.com/en-us/library/ms151198.aspx), то другой вариант заключается в использовании MS Sync Framework (может работать с DBs до SQL CE и т. Д., Файлы даже пользовательские источники данных и т. Д.) - см. http://msdn.microsoft.com/en-us/library/bb726002.aspx.

Если вы действительно хотите реализовать это в коде самостоятельно (я настоятельно рекомендую против этого), а затем реализовать его как «толчок сценарий»:

  • DB запускающего заполняющий промежуточные таблицы
  • службы Windows, который проверяет наличие изменений в промежуточных таблиц и применять themn правила разрешения конфликтов
  • полное протоколирование всего этого, чтобы иметь возможность анализировать расхождения (на всякий случай)
Смежные вопросы