Ну выскажусь еще немного :-) Тоже общие мысли.
06.12.2010 18:04, Victor Reshetnyak пишет:
2) Для недопущения пересечения других параллельных репликаций, создать
таблички содержащие инф. о том кто, каким инструментом, когда начал, когда
закончил, на какой стадии операция.
Тут есть проще решение на самом деле. За репликацию конкретной таблицы
отвечает конкретная ХП. Соответственно кто мешает в самом начале ХП
поставить запрос к MON$STATEMENT на наличие уже работающей ХП? По
поводу того кто и что начал... Не думаю что есть смысл усложнять
операцию. Не самый лучший способ сделать тяжелую задачу.
4) Завел таблицу примерно "в какой очередности выполнять действия", прямо
скриптами в блобах.
Одна ХП - одна таблица (или связка таблиц). Спасет от очередности. Если
перенос очередно-зависим - сделать вызов ХП из ХП для упрощения можно.
3) EXECUTE STATEMENT-ами переносил данные, таблица за таблицей, в более
расширенном варианте с изменением структур таблиц, триггеров, генераторы,
ХП.
Проверено, хотя можно было бы и не проверять конечно :-) Если делать
запрос к структурам и переносить по одному полю.. Короче про скорость
молчу :-) Забраковал. Даже близко не устраивает.
- что делать когда скрипт может выполнится с ошибками (нарушения разного
рода ограничений, и т.д.)?
Если переносить связанные таблицы то можно завести таблицу где будут
хранится записи с ошибками при выгрузке.
- в процессе репликации сессия оборвалась, либо даже не удалась, ХП
вывалится без возможности отработать ситуацию.
Повтор спасет ситуацию :-) Просто можно выкачивать обновление по
ключевому полю, а запрос делать с учетом сортировки по этому полю.
Так вот как обработать виолейшн в ХП не имею представления, может у
разработчиков на этот счет есть что сказать. Ну и приложения универсального
нет, к каждой базе особенный подход.
Да есть там что-то. Но на самом деле чтобы выскочила ошибка при полной
идентичности таблиц... Ну я не знаю, тут надо сильно постараться
наверное :-)
--
Андрей Кручинин
www.med-zakaz.ru
Для особо извращенных - http://мед-заказ.рф :-)