Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Replication & foreign keys
|
|||
|---|---|---|---|
|
#18+
1) В merge репликации участвуют 2 таблицы - parent и child, связанные foreign key. Поймет ли SQL при различных действиях с данными, что их надо правильно обновлять ? Не получится в какой-нибудь ситуации, что сначала придут инсерты на child'ов, а потом на parent'а ? Ну и подобные ситуации... 2) Если ответ на первый вопрос, что все будет замечательно, то возникает второй: а что будет, если в таблице есть foreign key на эту же таблицу, а не на другую ? Будет ли в этом случае все нормально ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2001, 18:03 |
|
||
|
Replication & foreign keys
|
|||
|---|---|---|---|
|
#18+
По первому вопросу. Вариант 1. В свойствах Foreign key можно поставить Not for replication. Тогда при поступлении в первую очередь записей на стороне "многие" до того, как перекачались данные на стороне "один" ошибки возникать не должно. Вариант 2. Явно задать последоватьельность передачи информации. Сначала Foregn Keys - потом Primary. Тогда даже временного нарушения ссылочной целостности происходить не будет. Второй вопрос, четсно говоря, не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2001, 22:03 |
|
||
|
Replication & foreign keys
|
|||
|---|---|---|---|
|
#18+
Насчет not for replication для foreign key почитаю... Для primary key я знаю, как ее правильно использовать, а вот для fk пока не приходилось. По 2-му варианту встречный вопрос - каким образом для репликации задать последовательность передачи ? Разве я могу явно указать, какая таблица будет реплицироваться первой, а какая второй ? Пояснение ко 2-му моему вопросу. Есть таблица с fk на себя же (ну вот надо мне так, никуда не денешься). create table t1( objectGUID uniqueidentifier not null unique, name sysname not null unique, ParentObjectGUID uniqueidentifier, primary key (objectGUID), foreign key (ParentObjectGUID) references t1 (objectGUID) ) Будет ли для нее нормально проходить репликация ? То есть просечет ли сиквел, что какие-то из записей надо вставлять первыми (они являются родителями), а какие-то - потом (дети) ? Это же фактически дерево получается, которое хранится в одной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2001, 09:44 |
|
||
|
Replication & foreign keys
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, что влез но у меня наверное проблема сходная. Я не могу выполнить репликацию... Получаю вот такое сообщение об ошибке: Cannot truncate table 'CRTAllCharts' because it is being referenced by a FOREIGN KEY constraint. Как это можно обойти.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2001, 13:09 |
|
||
|
Replication & foreign keys
|
|||
|---|---|---|---|
|
#18+
2 SergOK: если такое сообщение появляется в момент первой попытки синхронизации, то скорее всего это настройки для таблицы. Когда выбираешь статьи для репликации, то в детальных опциях можно указать, что делать с таблицей на подписчике, если она уже существует - и варианты действий (drop table and recreate, delete data with row filter, delete all data using truncate, keep the existing table unchanged). Возможно, у тебя как раз стоит 1, 2 или 3 вариант и прежде чем применять снапшот, сервер пытается очистить таблицу. Если же она не пустая и на нее ссылаются данные из других таблиц, то естественно очистить ее нельзя. "Обойти" это не получится - как ты обойдешь ссылочную целостность ? Так что выбирай - или вычищай все данные, которые ссылаются на нее или ставь 4 вариант (но он тоже чреват осложнениями). 2 All: Ну, судя по моим экспериментам, сиквел сам разбирается во внешних кличах. По крайней мере без всяких дополнительных телодвижений связанные таблицы прореплицировались без конфликтов. И кстати, для самоссылающейся таблицы тоже все прошло успешно, хотя там и было довольно большое разветвленное дерево. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2001, 13:23 |
|
||
|
Replication & foreign keys
|
|||
|---|---|---|---|
|
#18+
Обойти ссылочную целостность можно. Когда в диаграмме выбираешь линию между двумя таблицами и смотришь ее свойства, то видишь несколько флажков, которыми и определяется, на что эта целостность должна распространяться. Если все флажки снять, то она вообще ни на что распространяться не будет, хотя Foreign key и останется (только без DRI). Насчет последовательности передачи. Репликация использует агенты, которые запускают задания (как и все прочие задания) по определенному расписанию. В задания можно включить несколько шагов. Можно просто настроить несколько отдельных заданий, установив им временной график такой, что одно задание будет выполняться всегда после другого. Вот только в промежутке между ними могут внести изменения в таблицы - и все пойдет прахом. Поэтому лучше в DRI снимать галочку "Enforce relationship for replication". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2001, 13:55 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32005474&tid=1826814]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 382ms |

| 0 / 0 |
