Здравствуйте!
Диспозиция такая - есть локальная база, на которой проведены доработки (создан раздел, сделаны детали, связи с другими разделами). Все прекрасно работает.
Задача - накатить обновления на копию этой же базы до всех обновлений.
Использую TSMergeServices.
Делаю выгрузку такой строкой:
TSMergeServices.exe /cfg="xxx" /usr="Supervisor" /pwd="xxx" /opr="Extract" /dir="zzz" /upddb="true"
Получаю папку с выгруженными сервисами и таблицами
Натравливаю утилиту на конфигурацию с оригинальной базой
TSMergeServices.exe /cfg="xxx_PLAIN" /usr="Supervisor" /pwd="xxx" /opr="Load" /dir="zzz" /upddb="true"
Залетают сервисы, все ок начинают писаться таблицы, но на некоторых таблицах выпадает в ошибку:
Error: Unknown error occured 'Invalid column name 'SiteID'.
Invalid column name 'SiteID''
SiteID - это новая колонка в ряде таблиц, созданная для связи с записями нового раздела.
Немного непонятно как тогда происходит апдейт структуры базы данных или я какой ключ не увидел?
Нравится
Попробуйте вручную загрузить в последовательности: tbl_*,sq_*,ds_*,scr_*,wnd_*
Воспроизводится ли данная проблема?
Пробовал с ключом /usimask="tbl_*" и с /code="tbl_*" – не получилось, обрабатывался какждый раз 0 сервисов.
В итоге запустил с typecode=”Table”, прошла загрузка таблиц, началась запись в базу и проблема воспроизвелась на первой же таблице, в которой присутствует поле SiteID. Точнее можно сказать, проблема воспроизвелась на первой же таблице, загружаемая версия которой отлична от той, что есть в базе.
Утилита от сборки 3.3.2.195.
Возможно проблема связана с порядком сохранения таблиц. Проверьте пожалуйста загружена ли уже основная таблица раздела, на которую ссылается колонка SiteID. Если нет, сначала загрузите её, а уже потом уже загрузите все остальные сервисы.
Окей, сделал следующее:
так как SiteID содержит GUID, которые живут в tbl_sites (основная таблица нового раздела), то на чистой копии поднятой из бекапа базы первым шагом, через Администратор, создал папки как эта таблица лежит в базе-источнике, и тут попытался через администратор же её загрузить, на что поймал следующую ошибку:
Сообщение об ошибке: При сохранении объекта 'Custom\Workspaces\Sites\General\Main Grid\tbl_Sites' в базу данных, возникла ошибка:Object 'Relation.ParentField' is not assigned
Посмотрел блок в xml файле:
- <Relations> <Item SQLName="FSitesTypeID" UID="FCE78D87B93340A19A8606FD0174DB50" ParentFieldTableUSI="tbl_SitesType" ChildFieldSQLName="TypeID" /> <Item SQLName="FSitesAccountID" UID="BC188C8498BC4F4CA8E99CDCA35660CA" ParentFieldTableUSI="tbl_Account" ChildFieldSQLName="AccountID" /> </Relations>
Загрузил tbl_SitesType, после чего tbl_Sites загрузилась нормально.
Но все равно после этого при запуске TSMergeServices как доходит до первой же таблицы с колонкой SiteID выдает прежнюю ошибку.
Строка в xml файле tbl_Contracts (на ней вываливается) выглядит так:
<Item SQLName="SiteID" UID="74DBC5BF8E9D4BE6B8610A4AA1746D93" Caption="Site ID" SQLDataType="7" />
причем в блоке Relations нет таблицы tbl_Sites, может где-то тут проблема?
Есть некие особенности работы с TSMergeServices, так как данная утилита не соблюдает порядок загрузки сервисов таблиц, советую руководствоваться правилом: если в конфигурацию загружаются новые таблицы и/или добавляются связи на новые таблицы (как со старыми, так и с новыми таблицами) рекомендуется сначала загрузить в конфигурацию таблицы вручную, в нужном порядке (сначала – независимые, потом те, которые на них ссылаются), а уже после этого использовать TSMergeServices.