17.07.2008, 14:39 | #1 |
Участник
|
Постановка задачи.
В результате работы отчета по репликации данных между двумя NAVI базами данных произошел сбой и часть данных попала из одной в другую, часть нет. Для продолжения работы необходимо произвести синхронизации данных. Дело осложняется наличием ряда таблиц реплицирующихся по флагу модификации, а также возможностью удаления строк из таблиц. Решение. Для сравнения данных между двумя базами системы NAVISION использование стандартных средств системы не достаточно. Поскольку отчет по проверке баз в «лоб» работает крайне медленно и при значительном размере баз займет вечность. С другой стороны использование каких-то внешних инструментов не только затруднено необходимостью наличия лицензии (и не возможности её установки у клиента), но тем что сами эти инструменты внешние по отношению к системе. Использование Dataport-ов отчасти способно решить проблему, но только в случае если надеться разделитель для столбцов, и если у вас есть изрядная выдержка для проверки всего этого ясным взором. Все может осложниться в ситуации, когда нет полной уверенности в корректности самого функционала и задача сводиться не только к нахождению различий в данных, но и ошибки функционала. Результатом может стать действительно головная боль на несколько дней. Лекарством от мигрени может стать некий взгляд со стороны, а именно со стороны MS SQL. Конечно, для этого понадобиться некоторое количество программных средств и понимания ситуации и причины её возникновения, но это проще вглядывание в километры текстовых файлов. Рецепт на удивление прост – MS SQL, ApexSQL Diff и терпение. Первое, конечно копии базы данных – куда без них. Второе, необходимо позаботиться о датах (как минимум, в идеале необходимо вообще проверить форматы – но это может и не понадобиться). Именно даты могут нам помешать, поскольку MS SQL понимает их только в диапазоне 01.01.1753..31.12.9999, а NAVI начиная с 01.01.0000. Их можно править руками, а можно и с помощью отчета. Третье, удаляем все не нужные таблицы – простого DELETEALL достаточно. Лучшим решением служит написание отчета в txt после чего его компиляция. Четвертое, удаление всех не нужных ключей из наших таблиц – не зачем нам выстраивание их на MS SQL сервере. Пятое, физическое удаление таблиц – а то тащить их на SQL сервер занятье глупое (найти как программно удалить таблицы из базы данных мне не удалось) Шестое, BackUp и его разворачивание на MS SQL сервере. Если все нормально то мы готовы к проверке, но чаще всего точно возникнет ошибка и процесс придется повторить – пока не избавимся от всех неверных дат, ключей и т.п. ! Не стоит забывать что у нас две базы, а поэтому тоже нужно сделать для них обоих. Седьмое, Используя ApexSQL Diff произвести сравнение. Восьмое, найденные ApexSQL Diff расхождения реплицировать между базами данных. <правка не завершена> |
|