Здравствуйте!

Диспозиция такая - есть локальная база, на которой проведены доработки (создан раздел, сделаны детали, связи с другими разделами). Все прекрасно работает.

Задача - накатить обновления на копию этой же базы до всех обновлений.

Использую 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 - это новая колонка в ряде таблиц, созданная для связи с записями нового раздела.
Немного непонятно как тогда происходит апдейт структуры базы данных или я какой ключ не увидел?

Нравится

7 комментариев

Попробуйте вручную загрузить в последовательности: 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.

учтено, спасибо!

Показать все комментарии