Репликация Sql server с ограничениями?

#sql-server #sql-server-2008 #replication #sql-server-2008-r2

#sql-сервер #sql-server-2008 #репликация #sql-server-2008-r2

Вопрос:

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

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

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

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

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

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

Комментарии:

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

2. односторонний вариант был бы хорош, всего несколько таблиц

3. и остальные мои вопросы?

4. да, это доступно только для чтения, и это не для отчетности

Ответ №1:

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

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

Битовая маска параметров схемы, устанавливаемая при добавлении статьи в публикацию, позволяет контролировать практически все аспекты DDL, реплицируемого подписчику — для получения полной информации смотрите документацию на sp_addarticle . Графический интерфейс репликации предоставляет вам доступ к большинству этих настроек, но вам может потребоваться использовать скрипты T-SQL, чтобы получить именно то, что вы хотите. На данный момент у меня нет доступа к базе данных, чтобы проверить, все ли ограничения check, default и foreign-key отображаются в графическом интерфейсе.

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

Комментарии:

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

2. @Flo — Единственными ограничениями, которые когда-либо будут реплицироваться, являются ограничения, созданные в реплицируемых таблицах, ссылающихся на другие таблицы. Ограничения из других (нереплицированных) таблиц, которые ссылаются на реплицируемые таблицы, реплицироваться не будут.

3. @Flo — если вам нужно добавить ограничения из нереплицированных таблиц к реплицируемым таблицам на подписчике, вам может понадобиться немного другая модель репликации транзакций, в которой реплицируемые таблицы на подписчике создаются независимо от репликации, и никакой DDL не реплицируется с издателя (используя schema_option значение 0x0 и pre_create_cmd значение ‘truncate’).