Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
Уважаемые гуру! Все ли я правильно понял и нет ли других вариантов ... Есть 2 таблицы (например) t_invoiсe (шапка счета) и t_invoice_det (содержимое) в t_invoice есть признак, если признак = True то счет переслать целиком, иначе не пересылать. т.к. dbRemote анализирует что требуется отправить по обмену опираясь только на лог базы то для того что бы по обмену ушла не только запись из t_invoice но и из t_invoice_det, последняя должна иметь любое поле (напрмер timestamp) которое принудительно обновляется после изменения поля t_invoice.признак. Цель этого обновления - появление записей в transaction log и далее в обмене. Других способов передавать подчиненные данные не существует? Очень хочется что бы я ошибался ... Есть ли другой способ организации обмена? P.S. Данные до их полного формирования не должны никуда уезжать по обмену! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 20:35 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял структуру данных, то на консолидированой базе есть таблица с флаговым полем, и в зависимости от изменения этого флага на удаленных базах должны появляться или исчезать записи в зависимой таблице? Так? Например вчера создали накладную ФЫВА-124 с флагом Реплицировать=TRUE, содержимое накладной автоматически уехало на удаленные базы. Сегодня обновили заголовок наколадной, поставили Реплицировать=FALSE и все удаленые базы автоматически убили содержимое накладной, а на консолидированой базе содержание осталось? Или наоборот, сменили флаг с FALSE на TRUE и ранее нереплицированное содержание накладной уехало на удаленную базу? Так? --- http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 20:49 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
v_smirnovУважаемые гуру! Все ли я правильно понял и нет ли других вариантов ... Есть 2 таблицы (например) t_invoiсe (шапка счета) и t_invoice_det (содержимое) в t_invoice есть признак, если признак = True то счет переслать целиком, иначе не пересылать. т.к. dbRemote анализирует что требуется отправить по обмену опираясь только на лог базы то для того что бы по обмену ушла не только запись из t_invoice но и из t_invoice_det, последняя должна иметь любое поле (напрмер timestamp) которое принудительно обновляется после изменения поля t_invoice.признак. Цель этого обновления - появление записей в transaction log и далее в обмене. Других способов передавать подчиненные данные не существует? Очень хочется что бы я ошибался ... Есть ли другой способ организации обмена? P.S. Данные до их полного формирования не должны никуда уезжать по обмену! Какая разница изменено ли поле в подчиненной таблице или нет, если ты изменяешь поле в основной, изменения в основной таблице все равно уйдут.Если ты в подчинненой таблице каждый раз будешь менять любое поле, скажем какое-нибудь служебное, то у тебя будет просто дополнительный трафик. Тебе просто на клиенте после формирования нового счета надо помещать сразу одним блоком данные. Да кстати, если очень хочется, то можно создать подписку , в которой таблицы будут реплицироваться по твоему условию, т.е. будут реплицироваться записи у которых поле признак будет = true, естественно и у подчиненной таблице ты должен будешь задать соответствующие условие, для целостности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 03:04 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
2 White Owl - да! - именно так. 2 Sergey Orlov авторКакая разница изменено ли поле в подчиненной таблице или нет, если ты изменяешь поле в основной, изменения в основной таблице все равно уйдут Если изменение в основной произошло когда уже в подчиненной есть записи то уйдет по обмену действительно только запись из оснвной таблицы. Уже существующие записи из подчиненной таблицы никуда не уйдут, dbRemote на них просто не обратит внимания. условие подписки на подчиненной таблице примерно nтакое: where (select признак from t_invoice i where i.PK=t_invoice_det.PK) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 08:57 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
если так играться: включили флаг - уехало, выключили - пропало, опять включили - уехало, то лишний трафик, особенно если еще что-то будет в виде атачментов. проще реплицировать все... а флагами (и доп. атрибутами) определять, должна ли данная накладная быть видна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 09:59 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
2 Рыжий Кот Нет - реплицировать все это не выход и не решение (по крайней мере в моем случае). Значит остается только одно - служебное обновляемое поле... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 10:20 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
v_smirnov2 White Owl - да! - именно так. 2 Sergey Orlov [quot автор]Какая разница изменено ли поле в подчиненной таблице или нет, если ты изменяешь поле в основной, изменения в основной таблице все равно уйдут Если изменение в основной произошло когда уже в подчиненной есть записи то уйдет по обмену действительно только запись из оснвной таблицы. Уже существующие записи из подчиненной таблицы никуда не уйдут, dbRemote на них просто не обратит внимания. +1 создай тригер на t_invoiсe ALTER TRIGGER "tbu_bla_bla " before UPDATE ORDER 1 ON t_invoiсe REFERENCING OLD AS old_row NEW AS new_row FOR EACH ROW BEGIN UPDATE t_invoice_det publication <Publication name > subscribe by <по чем сабскрайбим > WHERE new_row.PK=t_invoice_det.FK (Я так понимаю с PK была очепятка ) end ; а более детально почитай SQL Remote User's Guide Command Reference for Adaptive Server Anywhere UPDATE statement ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 10:35 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
v_smirnov2 White Owl - да! - именно так. 2 Sergey Orlov авторКакая разница изменено ли поле в подчиненной таблице или нет, если ты изменяешь поле в основной, изменения в основной таблице все равно уйдут Если изменение в основной произошло когда уже в подчиненной есть записи то уйдет по обмену действительно только запись из оснвной таблицы. Уже существующие записи из подчиненной таблицы никуда не уйдут, dbRemote на них просто не обратит внимания. условие подписки на подчиненной таблице примерно nтакое: where (select признак from t_invoice i where i.PK=t_invoice_det.PK) Да какая разница, эта запись из подчиненной уже уехала, она уже есть на удаленной... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 11:15 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
insert into t_invoice ( Id,...., Priznak ) values ( 2,....,FALSE ) ; insert into t_invoice_det ( id_Invoice, id_det ,......); values ( 2,1 ..... ); update t_invoice set Priznak = true where id = 2 ; при такой последовательности уедет только шапка ( t_invoice ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 11:20 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
2 pand СПС! за подсказку. Как часто бывает для того что бы что-то найти надо точно знать где искать ;) Пока эксперименты показали что это работает но пока только в одну сторону. Т.е: - признак=True - все уезжает как и задумывалось. - признак=False - уезжает только запись из основной таблицы (уезжает удаление т.к. запись престала соответствовать публикации). Скорее всего где-то я ошибся с условиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 13:09 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
v_smirnov2 pand СПС! за подсказку. Как часто бывает для того что бы что-то найти надо точно знать где искать ;) Пока эксперименты показали что это работает но пока только в одну сторону. Т.е: - признак=True - все уезжает как и задумывалось. - признак=False - уезжает только запись из основной таблицы (уезжает удаление т.к. запись престала соответствовать публикации). Скорее всего где-то я ошибся с условиями. Повесь тогда в подчиненой таблице признак, ну а дальше если в основной false, тогда триггером основной таблице в подчиненной сделать соответсвующие записи в true, потом в false, ну и наоборот соответсвенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 13:56 |
|
||
|
ASA 9.0.2 - репликация
|
|||
|---|---|---|---|
|
#18+
Sergey Orlov v_smirnov2 pand СПС! за подсказку. Как часто бывает для того что бы что-то найти надо точно знать где искать ;) Пока эксперименты показали что это работает но пока только в одну сторону. Т.е: - признак=True - все уезжает как и задумывалось. - признак=False - уезжает только запись из основной таблицы (уезжает удаление т.к. запись престала соответствовать публикации). Скорее всего где-то я ошибся с условиями. Повесь тогда в подчиненой таблице признак, ну а дальше если в основной false, тогда триггером основной таблице в подчиненной сделать соответсвующие записи в true, потом в false, ну и наоборот соответсвенно. Только не забудь что действия тригеров по умолчанию не попадают в репликацию. не видя схемы трудно угадать, но попробую думаю что просто с true false не обойдешься. посмотри как организовать репликацию с использованием SUBSCRIBE BY можешь вырезать кусок схемы с репликацией и прислать может смогу более детально подсказать. Самому создавать честно говоря нехохота :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 16:22 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=34449770&tid=2012153]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 261ms |
| total: | 422ms |

| 0 / 0 |
