Ошибки TFS 2017.2 после обновления в хранилище данных, конфликты данных в отчетах

Мы установили новую TFS 2017.2 с новым сервером SQL 2016 и одной новой коллекцией. После перемещения старых коллекций TFS 2015.1 на этот новый сервер мы получили ошибки конфликта схем в отчетах TFS.

Большинство из них были конфликтами имен с именами языков локализации и могли быть разрешены с помощью команды «witadmin changefield». Однако последний конфликт с полем «System.IsDeleted» не может быть разрешен, так как команда «witadmin listfields» не отображает это поле. Команда «witadmin changefield» сообщает: «TF26027: определение поля System.IsDeleted в файле определения типа рабочего элемента не существует. Добавьте определение для этого поля или удалите ссылку на поле и повторите попытку».

В базах данных коллекции контента на новом сервере SQL я нашел таблицу dbo.tbl_Field со значением «System.IsDeleted» в столбце «ReferenceName» в одной строке. Эта строка имеет разные значения в столбце «Имя» в новой и старой базах данных коллекций. Итак, похоже, что этот тип существует и имеет аналогичный конфликт имен с другими полями, но witadmin не перечисляет это поле, и я не думаю, что это хорошая идея - изменять значения непосредственно в SQL для TFS...

Есть идеи, как это исправить? Заранее спасибо за вашу помощь!


person Paul S.    schedule 25.10.2017    source источник
comment
Вы восстановили склад?   -  person Daniel Mann    schedule 25.10.2017
comment
Да, с пользовательским интерфейсом клиента, а затем с веб-интерфейсом ProcessAnalysisDatabase и ProcessWarehouse. После перестроений я увидел, что другие конфликты исчезли, остался только этот с System.IsDeleted.   -  person Paul S.    schedule 26.10.2017


Ответы (1)


Определите, каким из следующих способов вы хотите разрешить конфликты схем:

  • Измените атрибут поля в одной коллекции проектов, чтобы он соответствовал назначениям, сделанным в других коллекциях проектов. Вы должны предпринять это действие, когда команды используют поле одинаковым образом в похожих отчетах или для отчетов по нескольким проектам.
  • Переименуйте справочное имя отчета для конфликтующего поля. Вы должны предпринять это действие, когда поля используются по-разному или вы должны поддерживать другое поле. В этом случае это поле не используется командами, работающими в разных коллекциях проектов, для межпроектной отчетности.
  • Пометить поле как неотчетное для одной или нескольких коллекций. Это действие следует предпринять, если поле не используется для отчетов об этих коллекциях проектов.
  • Удалите поле из коллекции командных проектов. Это действие следует предпринять, если поле не используется никакими командными проектами или отчетами.

Если вы хотите копаться в базе данных TFS и изменять данные. Вы можете обратиться за помощью в поддержку TFS или сделать это под их руководством. .

person PatrickLu-MSFT    schedule 26.10.2017
comment
Как я могу реализовать вариант 3, не копаясь в базе данных SQL? Witadmin не показывает это поле, и я не знаю другого инструмента. Спасибо за вашу помощь! - person Paul S.; 26.10.2017
comment
@ПолС. Извините, забыл, что это поле даже не может быть отображено командой Witadmin. Я получил тот же результат, что и вы, при использовании witadmin listfields /collection:http://xxx/tfs/DefaultCollection /n:System.IsDeleted. Кстати, не всеми полями можно управлять с помощью команды Witadmin. Вы можете изменить имя поля, индекс и атрибуты отчета для любого поля, кроме системных полей, с помощью инструмента командной строки witadmin. Вы можете взглянуть на это Примечания по теме в разделе TFS. - person PatrickLu-MSFT; 27.10.2017
comment
@ПолС. Боюсь, вам придется иметь дело с базой данных SQL, чтобы разрешить конфликты. Либо измените имя, либо столбец IsReportingEnable. Чтобы реализовать эту опцию, измените значение с 1 по умолчанию на 0. - person PatrickLu-MSFT; 27.10.2017
comment
Я проверил это в своей тестовой среде. Изменить IsReportingEnable в SQL было недостаточно. Похоже, что есть 3 поля, играющие вместе. После запуска этой инструкции sql UPDATE [dbo].[tbl_Field] SET [IsReportingEnabled] = 0, [ReportingType] = 0, [ReportingFormula] = 0, WHERE ReferenceName = 'System.IsDeleted' для всех баз данных коллекции контента, затем ProcessAnalysisDatabase и ProcessWarehouse, затем iisreset на сервере TFS я снова мог видеть все отчеты без конфликтов. - person Paul S.; 27.10.2017
comment
Я буду наблюдать за тестовой лабораторией в течение нескольких дней, и если проблем не возникнет, я применю эти изменения к среде продукта. Спасибо за вашу помощь! - person Paul S.; 27.10.2017
comment
@ПолС. Рад, что здесь проблема исправлена. Всегда лучше, когда вы ремонтируете это самостоятельно; как вы понимаете, как это работает! :) - person PatrickLu-MSFT; 27.10.2017