Исправление ошибок данных, обнаруженных с помощью выполняемого перед переносом скрипта A1 (Project Server 2010)
Применимо к: Project Server 2010
Последнее изменение раздела: 2016-11-30
После выполнения скрипта A1 (выполняется перед началом переноса) для данных Microsoft Office Project Server 2003 проверьте выходные данные скрипта на наличие возможных ошибок. В этой статье описывается способ устранения ошибок данных, определенных в выходных данных. К ним относятся следующие ошибки:
Извлеченные проекты
Проекты, измененные извне
Проекты с обновлениями состояния, ожидающими утверждения
Дублирующиеся корпоративные ресурсы
Версия Project Server 2003 должна быть не ниже версии с пакетом обновления 2a (SP2a).
Дублирующиеся корпоративные ресурсы в проектах
Корпоративный глобальный шаблон, измененный извне
Извлеченный корпоративный глобальный шаблон
Заблокированный корпоративный глобальный шаблон
Различие между установленным по умолчанию языком базы данных таблиц проекта и веб-таблиц
Наличие запятых в именах корпоративных ресурсов
Наличие обязательных настраиваемых полей корпоративных ресурсов, не содержащих значений
Наличие обязательных настраиваемых полей корпоративных ресурсов, значения которых отсутствуют в определении таблицы подстановки
Корпоративные ресурсы, измененные извне
Настраиваемые поля длительности для корпоративных ресурсов, содержащие списки значений
Настраиваемые поля длительности для корпоративных ресурсов, содержащие недопустимые значения
После устранения ошибок в соответствии с инструкциями, приведенными в этом разделе, повторно выполните скрипт A1, чтобы убедиться в полном устранении ошибок.
Извлеченные проекты
Извлеченный проект перенести нельзя. Перед миграцией лучше всего привести исходные данные в стабильное состояние. Осознанное выполнение возврата проектов позволит обеспечить их готовность к миграции. Координаторы миграции должны установить для менеджеров проекта крайний срок возврата проектов и по истечении этого срока выполнять принудительный возврат.
Устранение проблемы
Верните все извлеченные проекты.
Верните проекты, извлеченные в Project Server 2003
В Microsoft Office Project Server 2003 Project Web Access нажмите Администратор.
Щелкните Управление корпоративными компонентами.
Щелкните Вернуть корпоративные проекты и посмотрите, какие проекты извлечены. Обеспечьте возврат или принудительно верните проекты с помощью Project Web Access.
Примечание
Кроме того, проверить наличие извлеченных проектов можно с помощью запроса SQL к базам данных таблиц проектов Project Server 2003 и веб-таблиц Project Server 2003.select PROJ_NAME from dbo.MSP_PROJECTS where PROJ_CHECKEDOUT = 1 and PROJ_TYPE in (0, 1)
Если вернутся результаты, значит, соответствующие проекты извлечены.
Проекты, измененные извне
Измененный извне проект нельзя перенести.
Устранение проблемы
Откройте измененный извне проект в Project Professional 2003, сохраните его и верните на сервер. При этом флажок Externally edited меняется на false.
Проекты с ожидающими утверждения обновлениями состояния
По умолчанию, если у проектов Project Server 2003 есть ожидающие утверждения обновления, они не переносятся в Project Server 2007. Перед выполнением переноса рекомендуется принять или отклонить изменения статуса и таким образом привести проекты в устойчивое состояние для переноса.
Устранение проблемы
Для миграции проектов с обновлениями, ожидающими утверждения, можно настроить параметр StopProjectMigrationIfStatusUpdatesPending в файле конфигурации миграции. Дополнительные сведения об этом параметре см. в разделе Настройка средства переноса.
До начала миграции лучше всего установить крайний срок, до которого менеджеры проектов должны принять или отклонить ожидающие обновления. После этого выполняется принудительная миграция всех проектов (даже если обновления статуса неактуальны).
Дублирующиеся корпоративные ресурсы
Project Server 2003 и Project Server 2007 не поддерживают наличие в корпоративном пуле ресурсов объектов с одинаковыми именами. Дубликаты могут появиться при прямом редактировании базы данных. Обратите внимание, что при редактировании корпоративного пула ресурсов в Project Professional дублирующиеся имена не появляются. Это объясняется тем, что для корпоративного ресурса с определенным именем может существовать только одна запись в таблице MSP_WEB_RESOURCES. Простого способа выйти из этой ситуации нет. Продумайте решение вместе со специалистом по Project Server. Ниже приведено несколько рекомендаций, которые помогут найти и устранить проблемы с дубликатами корпоративных ресурсов.
Определение дублирующихся корпоративных ресурсов
Дублирующиеся корпоративные ресурсы в данных можно определить с помощью скрипта A1, выполняемого перед переносом. Если скрипт найдет дублирующиеся корпоративные ресурсы, отобразятся примерно такие данные, как в следующем примере, где найдено два дубликата:
RES_UID | RES_NAME | RES_EUID |
---|---|---|
123 |
Peter Krebbs |
123 |
124 |
Peter Krebbs |
123 |
125 |
Brad Sutton |
125 |
126 |
Brad Sutton |
126 |
Определение дублирующихся корпоративных ресурсов, использованных в проектах
Дублирующиеся корпоративные ресурсы в данных можно определить с помощью скрипта A1, выполняемого перед переносом. Если скрипт найдет дублирующиеся корпоративные ресурсы, отобразятся примерно такие данные, как в следующем примере, где найдено два дубликата:
RES_NAME | RES_EUID |
---|---|
Peter Krebbs |
123 |
Brad Sutton |
125 |
Brad Sutton |
126 |
Исправление проектов, в которых использованы дублирующиеся корпоративные ресурсы
После запуска следующего запроса (запрос 1) возвращается идентификатор проекта, связанного с дублирующимися корпоративными ресурсами. Дубликаты нужно устранить, чтобы в проектах использовалась только одна комбинация параметров "res_name, res_euid". Один из дубликатов нужно пометить как "правильный" ресурс и убедиться, что его используют все проекты (обновите столбец MSP_RESOURCES.RES_EUID этого проекта и укажите в нем этот ресурс). Затем запустите скрипт A1 и повторите поиск дублирующихся корпоративных ресурсов, использованных в проекте.
Запрос 1:
select res_name, res_euid, proj_id from msp_resources where res_name in (select distinct r1.RES_NAME from dbo.MSP_RESOURCES r1 inner join dbo.MSP_RESOURCES r2 on (r1.RES_NAME = r2.RES_NAME and r1.PROJ_ID = r2.PROJ_ID) where r1.PROJ_ID = 1 and r1.RES_UID != r2.RES_UID) and proj_id <> 1 and res_euid is not null order by res_name, res_euid asc
Предположим, например, что запрос 1 возвращает следующие результаты:
RES_NAME | RES_EUID | PROJ_ID |
---|---|---|
Brad Sutton |
125 |
12 |
Brad Sutton |
126 |
13 |
Brad Sutton |
125 |
14 |
Чтобы исправить ситуацию, можно пометить ресурс "Brad Sutton" с RES_EUID=125 как "правильный" и следующим образом исправить строки:
RES_NAME | RES_EUID | PROJ_ID |
---|---|---|
Brad Sutton |
125 |
12 |
Brad Sutton |
125 |
13 |
Brad Sutton |
125 |
14 |
Устранение дублирующихся корпоративных ресурсов и выбор нужного
В предыдущем разделе был выбран правильный ресурс и в проекты добавлены указания на него. Теперь необходимо изменить таблицу MSP_RESOURCES в соответствии с выбранным ресурсом. Запустите запрос 4 (аналог запроса 1), чтобы получить список дублирующихся корпоративных ресурсов. Затем обновите столбец RES_EUID дублирующегося ресурса, чтобы указать ресурс, назначенный "правильным".
Запрос 4:
select res_uid, res_name, res_euid from msp_resources where res_name in (select distinct r1.RES_NAME from dbo.MSP_RESOURCES r1 inner join dbo.MSP_RESOURCES r2 on (r1.RES_NAME = r2.RES_NAME and r1.PROJ_ID = r2.PROJ_ID) where r1.PROJ_ID = 1 and r1.RES_UID != r2.RES_UID) and proj_id = 1 order by res_name asc
Предположим, например, что запрос 4 возвращает следующие результаты. Строка "Peter Krebbs" правильная. Строку "Brad Sutton" нужно исправить.
RES_UID | RES_NAME | RES_EUID |
---|---|---|
123 |
Peter Krebbs |
123 |
124 |
Peter Krebbs |
123 |
125 |
Brad Sutton |
125 |
126 |
Brad Sutton |
126 |
Чтобы исправить ситуацию, можно выбрать "Brad Sutton" с "правильным" ресурсом RES_UID=125 и обновить другие строки так, чтобы они указывали на этот элемент. Пример.
RES_UID | RES_NAME | RES_EUID |
---|---|---|
123 |
Peter Krebbs |
123 |
124 |
Peter Krebbs |
123 |
125 |
Brad Sutton |
125 |
126 |
Brad Sutton |
125 |
Устранение дублирующихся ресурсов из корпоративного пула ресурсов
Дублирующиеся ресурсы можно удалить из корпоративного пула, указав для повторяющегося ресурса несуществующий проект (PROJ_ID = максимальное целое значение). Кроме того, нужно очистить связанные корпоративные календари. Для этого используется запрос 5.
Запрос 5:
update msp_resources set proj_id=2147483647 WHERE res_uid != res_euid and res_euid is not null and res_uid > 0 and proj_id = 1
update msp_calendars set proj_id=2147483647 WHERE res_uid not in (select res_uid from msp_resources where proj_id=1) and proj_id = 1 and cal_uid > 0 and res_uid is not null
После завершения предыдущих этапов попытайтесь снова запустить средство миграции с параметром -verify и убедитесь, что проблема с дублирующимися ресурсами решена.
Проект должен быть создан, как минимум, в Project Server 2003 SP2a
Корпорация Майкрософт поддерживает перенос с Project Server 2003 с пакетом обновления 2a (SP2a) или 3 (SP3). Если установлена версия пакета обновления ниже 2a (SP2a), необходимо установить любой из них (рекомендуется установка последней версии — пакета обновления 3 (SP3)).
Устранение проблемы
Примените пакет обновления 3 (SP3) для Project Server 2003 к установке Project Server 2003. Дополнительные сведения о пакете обновления 3 (SP3) для Project Server 2003 см. в статье базы знаний Описание пакета обновления 3 (SP3) для Project Server 2003 (Возможно, на английском языке) (https://go.microsoft.com/fwlink/?linkid=188720\&clcid=0x419) (Возможно, на английском языке).
Корпоративный глобальный шаблон, измененный извне
Флагу "Externally Edited" присваивается значение true, когда глобальный корпоративный шаблон редактируется за пределами Project (например, в стороннем приложении). Project Professional проверяет этот флаг. Если ему присвоено значение true, Project Professional пересчитывает все данные шаблона с целью обеспечения единообразия. При переносе этому флагу следует присвоить значение false.
Устранение проблемы
Откройте глобальный корпоративный шаблон в Project Professional и сохраните его на сервере.
Извлеченный глобальный корпоративный шаблон
При миграции проектов глобальный корпоративный шаблон не должен быть извлечен.
Устранение проблемы
Убедитесь, что глобальный корпоративный шаблон возвращен.
В Project Web Access приложения Project Server 2003 щелкните Администратор.
Щелкните Управление корпоративными компонентами.
Щелкните Вернуть корпоративные проекты и посмотрите, кто извлек глобальный корпоративный шаблон. Обеспечьте возврат или принудительно верните проекты с помощью Project Web Access.
Как определить, не заблокирован ли глобальный корпоративный шаблон
Проект блокируется при выключении компьютера с ошибкой или закрытии Project Professional с ошибкой. При заблокированном шаблоне невозможно запустить инструмент миграции.
Устранение проблемы
Следующий запрос SQL разблокирует заблокированный корпоративный шаблон. Выполните запрос SQL для базы данных таблиц проектов Project Server 2003.
Update MSP_PROJECTS set PROJ_LOCKED = 1 where PROJ_TYPE = 2
Проверка соответствия выбранного по умолчанию языка базы данных веб-таблиц и таблиц проектов
Перед переносом нужно настроить для баз данных веб-таблиц Project Server 2003 и таблиц проектов Project Server 2003 один и тот же язык по умолчанию.
Устранение проблемы
Устраните несоответствие настроек баз данных вместе с администратором.
Проверка наличия запятой в имени ресурса
Project Server 2007 не позволяет использовать запятую (,) в имени корпоративного ресурса (на любом языке). Ее нужно заменить допустимым символом.
Устранение проблемы
Выполните следующий запрос SQL для баз данных таблиц проектов Project Server 2003 и веб-таблиц Project Server 2003. Этот запрос заменяет запятую символом подчеркивания. Запрос можно изменить, вставив другой допустимый символ.
-- run this against the project tables db
declare @replacement_char char
declare @char_to_replace char
set @replacement_char = '_'
set @char_to_replace = ','
update dbo.MSP_RESOURCES set RES_NAME = replace(RES_NAME, @char_to_replace, @replacement_char)
where RES_NAME is not null and charindex(@char_to_replace, RES_NAME) > 0
-- run this against the web tables db
declare @replacement_char char
declare @char_to_replace char
set @replacement_char = '_'
set @char_to_replace = ','
update dbo.MSP_WEB_RESOURCES set RES_NAME = replace(RES_NAME, @char_to_replace, @replacement_char)
where RES_NAME is not null and charindex(@char_to_replace, RES_NAME) > 0
Наличие обязательных настраиваемых полей корпоративных ресурсов, не содержащих значений
Корпоративный ресурс без значений в обязательном корпоративном настраиваемом поле (например, RBS) не переносится. В процессе миграции в журнал записывается ошибка. Перед миграцией рекомендуется проверить этот момент. Если корпоративный ресурс создан давно (до того, как поле стало обязательным) или неактивен, в полях может не быть значений.
Устранение проблемы
Откройте в Project Server 2003 корпоративный пул ресурсов и установите значения обязательных полей или сделайте соответствующие поля необязательными. После этого можно вручную изменить такие поля в Office Project Server 2007 после их переноса.
Наличие настраиваемых полей ресурсов, значения которых отсутствуют в определении таблицы подстановки
Все значения настраиваемых полей ресурсов должны быть в определении таблицы подстановки.
Устранение проблемы
Следующий запрос SQL обнуляет недопустимые значения настраиваемых полей. Запустите запрос SQL к базе данных таблиц проектов Project Server 2003.
declare @eglobal_proj_id int
set @eglobal_proj_id = (select PROJ_ID from dbo.MSP_PROJECTS where PROJ_TYPE = 2)
update dbo.MSP_MV_FIELDS
set
CODE_UID = NULL
from dbo.MSP_MV_FIELDS cf1
left join dbo.MSP_OUTLINE_CODES oc1 on (oc1.CODE_UID = cf1.CODE_UID and (cf1.CODE_FIELD_ID - 76) = oc1.OC_FIELD_ID and oc1.PROJ_ID = @eglobal_proj_id)
left join (
select
oc.CODE_UID,
fa.ATTRIB_FIELD_ID as OC_FIELD_ID,
@eglobal_proj_id as PROJ_ID
from
dbo.MSP_OUTLINE_CODES oc
inner join dbo.MSP_FIELD_ATTRIBUTES fa on (fa.PROJ_ID = oc.PROJ_ID and fa.ATTRIB_VALUE = oc.OC_FIELD_ID and fa.ATTRIB_ID = 212)
where
oc.PROJ_ID = @eglobal_proj_id
and fa.PROJ_ID = @eglobal_proj_id
and fa.ATTRIB_ID = 212
) as oc2 on (oc2.CODE_UID = cf1.CODE_UID and (cf1.CODE_FIELD_ID - 76) = oc2.OC_FIELD_ID and oc2.PROJ_ID = @eglobal_proj_id)
where
cf1.proj_id = 1
and oc1.CODE_UID is null
and oc2.CODE_UID is null
update dbo.MSP_CODE_FIELDS
set
CODE_UID = NULL
from dbo.MSP_CODE_FIELDS cf1
left join dbo.MSP_OUTLINE_CODES oc1 on (oc1.CODE_UID = cf1.CODE_UID and cf1.CODE_FIELD_ID = oc1.OC_FIELD_ID and oc1.PROJ_ID = @eglobal_proj_id)
left join (
select
oc.CODE_UID,
fa.ATTRIB_FIELD_ID as OC_FIELD_ID,
@eglobal_proj_id as PROJ_ID
from
dbo.MSP_OUTLINE_CODES oc
inner join dbo.MSP_FIELD_ATTRIBUTES fa on (fa.PROJ_ID = oc.PROJ_ID and fa.ATTRIB_VALUE = oc.OC_FIELD_ID and fa.ATTRIB_ID = 212)
where
oc.PROJ_ID = @eglobal_proj_id
and fa.PROJ_ID = @eglobal_proj_id
and fa.ATTRIB_ID = 212
) as oc2 on (oc2.CODE_UID = cf1.CODE_UID and cf1.CODE_FIELD_ID = oc2.OC_FIELD_ID and oc2.PROJ_ID = @eglobal_proj_id)
where
cf1.proj_id = 1
and oc1.CODE_UID is null
and oc2.CODE_UID is null
update dbo.MSP_PROJECTS set PROJ_EXT_EDITED = 1, PROJ_EXT_EDITED_CODE = 1 where PROJ_ID = 1
Корпоративные ресурсы, измененные извне
Перенести из Project Server 2003 в Project Server 2007 можно только корпоративные ресурсы, которые не были изменены извне.
Устранение проблемы
Чтобы устранить проблему, прежде всего нужно указать, что все корпоративные ресурсы редактировались извне. Для этого используется запрос SQL. Затем можно изменить каждый корпоративный ресурс так, чтобы все соответствующие обновления выполнялись в Project Professional при сохранении корпоративного пула ресурсов. При этом флажок "externally edited" каждого корпоративного ресурса удаляется. Если не изменить корпоративный ресурс, Project Professional не будет выполнять пересчет. Флажок ресурса сохранится, и корпоративный пул ресурсов не удастся перенести.
Примечание
После миграции корпоративного пула ресурсов можно отменить изменения ресурсов.
Следующий общий обходной путь позволяет удалить все флажки внешнего изменения корпоративных ресурсов.
Пометьте все корпоративные ресурсы как измененные извне. Для этого используется следующий запрос SQL к базе данных "Project Server 2003 Project tables".
Update dbo.MSP_RESOURCES set EXT_EDIT_REF_DATA = 1 where PROJ_ID = 1
Update dbo.MSP_PROJECTS set PROJ_EXT_EDITED = 1, PROJ_EXT_EDITED_DATE = 1, PROJ_EXT_EDITED_DUR = 1, PROJ_EXT_EDITED_NUM = 1, PROJ_EXT_EDITED_FLAG = 1, PROJ_EXT_EDITED_CODE = 1, PROJ_EXT_EDITED_TEXT = 1 where PROJ_ID = 1
Временно добавьте к каждому корпоративному ресурсу несвязанное настраиваемое поле, чтобы включить принудительный пересчет в Project Professional 2003. При этом флажок внешнего изменения снимается. Например, в Project Professional 2003 можно создать настраиваемое поле ресурса "test'", которое будет добавлено к каждому корпоративному ресурсу. Поле может быть любым. Например, добавьте поле "Resource Duration", которое редко используется.
Примечание
При использовании настраиваемого поля "Корпоративная длительность ресурса" не следует создавать для него список значений. Настраиваемые поля "Корпоративная длительность ресурса" cо списками значений не переносятся. При создании временного поля используйте числовое значение.
Новое настраиваемое поле можно назвать "Test Resource CF". Создав поле "Test Resource CF", откройте корпоративный пул ресурсов и добавьте столбец "Test Resource CF". Для всех ресурсов укажите допустимое значение поля. Сохраните пул и выполните перенос. Затем нужно будет удалить поле "Test Resource CF" в Microsoft Office Project Professional 2007.
Настраиваемые поля длительности для корпоративных ресурсов, содержащие списки значений
Настраиваемые поля "Корпоративная длительность ресурса" со связанными списками значений приводят к ошибке переноса.
Устранение проблемы
Чтобы устранить проблему, нужно вручную удалить все списки значений полей "Корпоративная длительность ресурса", которые вернул SQL-запрос. Для этого используется следующая процедура.
Откройте приложение Project Professional 2003, подключенное к серверу Project Server 2003.
В меню Сервис выделите пункт Корпоративные параметры и выберите команду Открыть глобальный корпоративный шаблон.
На странице Microsoft Project — Извлеченный корпоративный глобальный шаблон, выберите меню Сервис — Настройка, а затем щелкните ссылку Корпоративные поля.
На странице "Настраиваемые корпоративные поля", вкладка Настраиваемые поля, раздел Поля нажмите Ресурс.
В раскрывающемся списке Тип пункт Длительность. Все настраиваемые поля "Корпоративная длительность" будут отображаться в списке Поле.
В списке Поле выберите первое настраиваемое поле "Корпоративная длительность ресурса", соответствующее значениям, возвращенным SQL-запросом, который был запущен ранее. В разделе Настраиваемые атрибуты нажмите кнопку Список значений. Удалите из списка конкретного поля "Корпоративная длительность" все значения столбца Значение и нажмите кнопку ОК. В появившемся диалоговом окне Microsoft Office Project нажмите кнопку ОК.
На странице "Настройка корпоративных полей" в разделе Настраиваемые атрибуты , убедитесь, что Список значений поля "Корпоративная длительность ресурса", выбранного в списке Поле, не выбран. Если Список значений выбран, выберите Нет.
В списке Поле выберите все остальные настраиваемые поля "Корпоративная длительность ресурса", возвращенные SQL-запросом, и повторите шаги 6 и 7.
Нажмите кнопку ОК.
Настраиваемые поля длительности для корпоративных ресурсов, недопустимые значения
Project Server 2010 не поддерживает отрицательные значения длительности и значения длительности больше 34689600. При попытке переноса настраиваемых полей "Корпоративная длительность ресурса" Project Server 2003 с такими значениями происходит сбой.
Устранение проблемы
Чтобы устранить проблему, необходимо вручную изменить значения всех настраиваемых полей "Корпоративная длительность ресурса" с недопустимыми значениями. Для всех полей нужно выбрать допустимые значения (от 0 до 34689600).
Если запрос вернул простое настраиваемое поле (а не поле формулы), ему можно присвоить значение из допустимого диапазона. Если запрос вернул поле формулы, ее придется изменить так, чтобы полученные результаты попадали в этот диапазон.