Проверка и очистка перед выполнением перехода
Обновлено: Май 2009 г.
Последнее изменение раздела: 2015-02-27
Содержание:
Запуск инструмента миграции с параметром -verify
Ручная диагностика проблем миграции
В этой статье описаны способы проверки пригодности исходных данных Microsoft Office Project Server 2003 для миграции на Microsoft Office Project Server 2007. Здесь перечислены полезные инструменты для проверки на наличие недопустимых или поврежденных данных. К числу таких инструментов относится параметр инструмента миграции -verify и запуск запросов SQL в базах данных Project Server 2003. Кроме того, описаны общие проверки, которые нужно провести в среде Project Server 2003 перед миграцией.
Важно!
Миграция крупной базы данных может занять очень много времени (дополнительные сведения см. в разделе Данные выполнения миграции для Project Server 2007). Если в процессе глобальной миграции произойдет сбой (например, из-за дублирования корпоративных ресурсов), необходимо будет устранить причину неполадки и повторить процесс с самого начала. Если выполнить предварительную проверку и очистку до запуска процесса, можно сильно уменьшить вероятность сбоя.
Запуск средства миграции с параметром -verify
Параметр средства миграции -verify проверяет данные Project Server 2003 по следующим параметрам:
Извлеченные проекты
Измененные извне проекты
Проекты с ожидающими утверждения обновлениями статуса
Дублирующиеся корпоративные ресурсы
Средство миграции определяет, нужно ли изменить данные и подготовить их к миграции. Оно записывает эти изменения в файл журнала миграции, но не исправляет данные вместо пользователя.
Обратите внимание, что не только параметр -verify определяет набор проверок, который нужно выполнить с данными. Нужно будет выполнить все проверки, описанные в этой статье, и убедиться, что данные подходят для миграции.
Созданный файл журнала нужно внимательно прочесть и внести в данные Project Server 2003 все необходимые изменения, чтобы устранить проблемы при миграции данных.
![]() |
---|
При запуске средства миграции с параметром -verify глобальные данные и данные проекта не переносятся, даже если такая настройка есть в файле конфигурации миграции. |
Поиск извлеченных проектов
Извлеченный проект перенести нельзя. Перед миграцией лучше всего привести исходные данные в стабильное состояние. Осознанное выполнение возврата проектов позволит обеспечить их готовность к миграции. Координаторы миграции должны установить для менеджеров проекта крайний срок возврата проектов и по истечении этого срока выполнять принудительный возврат.
Поиск возможной проблемы
Если переносимый проект будет извлечен при запуске инструмента миграции с параметром -verify, на консоли и в журнале появится следующее сообщение:
The following projects are checked out. These projects will not be migrated by the migration tool (the migration tool will not stop, it will just skip these projects). Please check them in.
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Если все проекты возвращены, это сообщение не появится. |
Последует указанное ранее сообщение с именами проектов. Каждое имя проекта отображается в отдельной строке. |
Устранение проблемы
Верните все извлеченные проекты.
Верните проекты, извлеченные в Project Server 2003
В веб-клиенте Project приложения Project Server 2003 щелкните Администратор.
Щелкните Управление корпоративными компонентами.
Щелкните Check in Enterprise Projects и посмотрите, какие проекты извлечены. Обеспечьте возврат или принудительно верните проекты с помощью веб-клиента Project.
![]() |
---|
Кроме того, проверить наличие извлеченных проектов можно с помощью запроса SQL к базам данных "Project Server 2003 Project tables" и "Project Server 2003 Web Tables".select PROJ_NAME from dbo.MSP_PROJECTS where PROJ_CHECKEDOUT = 1 and PROJ_TYPE in (0, 1) Если вернутся результаты, значит, соответствующие проекты извлечены. |
Поиск измененных извне проектов
Измененный извне проект нельзя перенести.
Поиск возможной проблемы
При запуске инструмента миграции с параметром -verify, если переносимый проект изменен извне, на консоли и в файле журнала появится следующее сообщение:
The following projects have been externally modified. These projects will not be migrated by the migration tool (the migration tool will not stop, it will just skip these projects). Please open them using Project Professional 2003 and save them back to Project Server 2003.
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Предыдущее сообщение не появится в том случае, если измененных извне проектов нет. |
Последует указанное ранее сообщение с именами проектов. Каждое имя проекта отображается в отдельной строке. |
Устранение проблемы
Откройте измененный извне проект в Project Professional 2003, сохраните его и верните на сервер. При этом флажок Externally edited меняется на false.
![]() |
---|
Кроме того, проверить наличие измененных извне проектов можно с помощью запроса SQL к базам данных "Project Server 2003 Project tables" и "Project Server 2003 Web Tables".select PROJ_NAME from dbo.MSP_PROJECTS where (PROJ_EXT_EDITED = 1 or RESERVED_BINARY_DATA is null) and PROJ_TYPE in (0, 1) |
Если вернутся результаты любых строк, значит, соответствующие проекты изменены извне.
Поиск проектов с ожидающими утверждения обновлениями статуса
По умолчанию, если у проектов Project Server 2003 есть ожидающие утверждения обновления, они не переносятся на Office Project Server 2007. Перед выполнением миграции рекомендуется принять или отклонить изменения статуса, и таким образом привести проекты в устойчивое состояние для миграции.
Поиск возможной проблемы
Если у переносимого проекта при запуске инструмента миграции с параметром -verify имеются обновления, которые ожидают утверждения, то на консоли и в журнале появится следующее сообщение:
The following projects have pending status updates. These projects will not be migrated by the migration tool (the migration tool will not stop, it will just skip these projects). Please apply the pending updates.
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Предыдущее сообщение не появится в том случае, если проектов с обновлениями, ожидающими утверждения, нет. |
Последует указанное ранее сообщение с именами проектов. Каждое имя проекта отображается в отдельной строке. |
Устранение проблемы
Для миграции проектов с ожидающими обновлениями можно настроить параметр StopProjectMigrationIfStatusUpdatesPending в файле конфигурации миграции. Подробное описание этого параметра см. в разделе Настройка средства миграции для Project Server.
До начала миграции лучше всего установить крайний срок, до которого менеджеры проектов должны принять или отклонить ожидающие обновления. После этого выполняется принудительная миграция всех проектов (даже если обновления статуса неактуальны).
![]() |
---|
Кроме того, проверить наличие проектов с ожидающими обновлениями статуса с помощью следующего запроса SQL к базе данных "Project Server 2003 Web Tables".select distinct PROJ_NAME from dbo.MSP_WEB_ASSIGNMENTS wa, dbo.MSP_WEB_TRANSACTIONS trans, dbo.MSP_WEB_PROJECTS wp where wa.WPROJ_ID = wp.WPROJ_ID and trans.WASSN_ID = wa.WASSN_ID and trans.WTRANS_STATE in (0, 1, 2) Наличие любых возвращенных результатов будет говорить о наличии ожидающих обновлений статуса у соответствующих объектов. |
Поиск дублирующихся корпоративных ресурсов
Project 2003 и Project 2007 не поддерживают наличие в корпоративном пуле ресурсов объектов с одинаковыми именами. Дубликаты могут появиться при прямом редактировании базы данных. Обратите внимание, что при редактировании корпоративного пула ресурсов в Project Professional дублирующиеся имена не появляются. Это объясняется тем, что для корпоративного ресурса с определенным именем может существовать только одна запись в таблице MSP_WEB_RESOURCES. Простого способа выйти из этой ситуации нет. Продумайте решение вместе со специалистом по Project Server. Ниже приведено несколько рекомендаций, которые помогут найти и устранить проблемы с дубликатами корпоративных ресурсов.
Поиск возможной проблемы
Если при запуске инструмента миграции с параметром -verify, есть дублирующиеся корпоративные ресурсы, на консоли и в журнале появится следующее сообщение:
Your enterprise resource pool contains duplicate entries for the following resources. This is an unsupported scenario in Project 2003 and could cause enterprise resource migration to fail. Please make sure there are no duplicate resources before trying migration.
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Если дублирующихся корпоративных ресурсов нет, предыдущее сообщение не появится. |
Появится указанное выше сообщение, за которым будут следовать имена ресурсов. Каждое имя отображается в отдельной строке. |
![]() |
---|
Кроме того, дублирующиеся ресурсы можно найти, запустив запрос SQL к таблицам проектов Project Server 2003. В ответ на запрос формируется список всех дублирующихся корпоративных ресурсов в корпоративном пуле. Запрос 1: 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 Если сценарий найдет дублирующиеся корпоративные ресурсы, отобразятся примерно такие данные, как в следующем примере, где найдено два дубликата. |
RES_UID | RES_NAME | RES_EUID |
---|---|---|
123 |
Peter Krebbs |
123 |
124 |
Peter Krebbs |
123 |
125 |
Brad Sutton |
125 |
126 |
Brad Sutton |
126 |
Поиск дублирующихся корпоративных ресурсов, использованных в проектах
Следующий запрос SQL ищет дублирующиеся корпоративные ресурсы, использованные в проектах. При ссылке на этот запрос в следующих разделах он будет называться "запрос 2."
Запрос 2:
select distinct 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 and res_euid is not null order by res_name, res_euid asc
После запуска запроса отображается список дублирующихся корпоративных ресурсов, используемых в проектах. Если для каждого имени ресурса отображается одна строка, запустите запрос 4 из раздела "Устранение дублирующихся корпоративных ресурсов и выбор нужного". Если строк несколько, запустите запрос 3 из раздела "Исправление проектов, в которых использованы дублирующиеся корпоративные ресурсы".
Обратите внимание, что дублирующиеся экземпляры ресурса "Brad Sutton" использованы в проектах. Эту ситуацию нужно исправить.
RES_NAME | RES_EUID |
---|---|
Peter Krebbs |
123 |
Brad Sutton |
125 |
Brad Sutton |
126 |
Исправление проектов, в которых использованы дублирующиеся корпоративные ресурсы
После запуска следующего запроса (запрос 3) возвращается идентификатор проекта, связанного с дублирующимися корпоративными ресурсами. Дубликаты нужно устранить, чтобы в проектах использовалась только одна комбинация параметров "res_name, res_euid". Один из дубликатов нужно пометить как "правильный" ресурс и убедиться, что его используют все проекты (обновите столбец MSP_RESOURCES.RES_EUID этого проекта и укажите в нем этот ресурс). Затем запустите запрос 2 и повторите поиск дублирующихся корпоративных ресурсов, использованных в проекте.
Запрос 3:
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
Предположим, например, что при запуске сценария 3 возвращаются следующие результаты:
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 и убедитесь, что проблема с дублирующимися ресурсами решена.
Ручная диагностика проблем миграции
При запуске инструмента миграции с параметром -verify можно автоматически проверить данные Project Server 2003 на наличие проблем, которые могут вызвать сбой. Кроме того, эти проверки (а также другие, которые не открываются с помощью параметра verify) можно запустить вручную. В первой половине статьи описаны возможные автоматические проверки. В оставшейся части описан запуск ручных проверок данных Project Server 2003 с целью подготовки к миграции.
Проект должен быть создан, как минимум, в Project Server 2003 SP2a
Корпорация Майкрософт поддерживает миграцию с Project Server 2003 SP2a. Если этот пакет не установлен, его нужно применить. Информацию о пакете обновлений см. в статье из базы знаний Описание пакета обновлений Project Server 2003 Service Pack 2a (https://go.microsoft.com/fwlink/?linkid=78242\&clcid=0x419).
Поиск возможной проблемы
Запустите следующий запрос SQL к базе данных "Project Server 2003 Web tables". Этот запрос возвращает конкретную версию Project Server, включая номер пакета обновлений.
select replace(str(WADMIN_VERSION_MAJOR)+'.'+str(WADMIN_VERSION_MINOR),' ','') as 'Project Server Version' from dbo.MSP_WEB_ADMIN
Успешный результат проверки | Неуспешный результат проверки |
---|---|
11,2 |
11,1 |
Устранение проблемы
Примените пакет обновлений Project Server 2003 SP2a к установке Project Server 2003. Дополнительную информацию о примененииProject Server 2003 SP2a см. в разделе Подготовка перехода на Project Server 2007.
Глобальный корпоративный шаблон нельзя изменять извне
Флажок "Externally Edited" устанавливается в значение "true", когда глобальный корпоративный шаблон редактируется за пределами Project (например, в стороннем приложении). Project Professional проверяет этот флажок. Если он установлен в значение "true", Project Professional пересчитывает все данные шаблона с целью обеспечения единообразия. При миграции флажок нужно установить в значение "false".
Поиск возможной проблемы
Запустите следующий запрос SQL к базе данных "Project Server 2003 Project tables". Он ищет в базе данных Project Server 2003 измененные извне проекты. Если будут возвращены какие-либо строки, значит, выполнять миграцию глобального корпоративного шаблона в его текущем состоянии нельзя.
select PROJ_NAME from dbo.MSP_PROJECTS where (PROJ_EXT_EDITED = 1 or RESERVED_BINARY_DATA is null) and PROJ_TYPE = 2
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Нет возвращенных строк. |
Возвращена одна или несколько строк. |
Устранение проблемы
Откройте глобальный корпоративный шаблон в Project Professional и сохраните его.
Как определить, извлечен ли глобальный корпоративный шаблон
При миграции проектов глобальный корпоративный шаблон не должен быть извлечен.
Поиск возможной проблемы
Следующий запрос SQL проверяет, не извлечен ли корпоративный шаблон. Запустите запрос SQL к базе данных "Project Server 2003 Project tables".
select count(*) from dbo.MSP_PROJECTS where PROJ_CHECKEDOUT = 1 and PROJ_TYPE = 2
Успешный результат проверки | Неуспешный результат проверки |
---|---|
0 |
Возвращено значение больше "0". |
Устранение проблемы
Убедитесь, что глобальный корпоративный шаблон возвращен.
В веб-клиенте Project приложения Project Server 2003 щелкните Администратор.
Щелкните Управление корпоративными компонентами.
Щелкните Check in Enterprise Projects и посмотрите, какие проекты извлечены. Обеспечьте возврат или принудительно верните проекты с помощью веб-клиента Project.
Как определить, не заблокирован ли глобальный корпоративный шаблон
Проект блокируется при выключении компьютера с ошибкой или закрытии Project Professional с ошибкой. При заблокированном шаблоне невозможно запустить инструмент миграции.
Поиск возможной проблемы
Следующий запрос SQL проверяет, не извлечен ли корпоративный шаблон. Запустите запрос SQL к базе данных "Project Server 2003 Project tables".
select cast(isnull(PROJ_LOCKED, '0') as int) from dbo.MSP_PROJECTS where PROJ_TYPE = 2
Успешный результат проверки | Неуспешный результат проверки |
---|---|
0 |
1 |
Устранение проблемы
Следующий запрос SQL разблокирует заблокированный корпоративный шаблон. Запустите запрос SQL к базе данных "Project Server 2003 Project tables".
Update MSP_PROJECTS set PROJ_LOCKED = 1 where PROJ_TYPE = 2
Проверка соответствия выбранного по умолчанию языка базы данных веб-таблиц и таблиц проектов
Перед миграцией нужно настроить для баз данных веб-таблиц (Project Server 2003 Web Tables) и таблиц проектов (Project Server 2003 Project Tables) один и тот же язык по умолчанию.
Поиск возможной проблемы
Этот запрос определяет выбранный по умолчанию язык каждой базы данных. Если результаты запроса не совпадают, при миграции возникает сбой. Запустите следующий запрос SQL к базам данных "Project Server 2003 Project tables" и "Project Server 2003 Web Tables".
select WADMIN_DEFAULT_LANGUAGE from dbo.MSP_WEB_ADMIN.
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Результаты двух баз данных совпадают. |
Результаты двух баз данных не совпадают. |
Устранение проблемы
Устраните несоответствие настроек баз данных вместе с администратором.
Проверка наличия запятой в имени ресурса
Office Project Server 2007 не позволяет использовать запятую (,) в имени корпоративного ресурса (на любом языке). Ее нужно заменить допустимым символом.
Поиск возможной проблемы
Этот запрос ищет в корпоративном пуле ресурсов имена ресурса, содержащие запятые. Запустите запрос SQL к базе данных "Project Server 2003 Project tables".
select RES_NAME from MSP_RESOURCES where RES_NAME is not null and charindex(',', RES_NAME) > 0
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Строки не возвращаются. |
Возвращается одна или несколько строк. |
Устранение проблемы
Запустите следующий запрос SQL к базам данных "Project Server 2003 Project tables" и "Project Server 2003 Web Tables". Он заменяет запятую символом подчеркивания. Запрос можно изменить, вставив другой допустимый символ.
-- 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) не переносится. В процессе миграции в журнал записывается ошибка. Перед миграцией рекомендуется проверить этот момент. Если корпоративный ресурс создан давно (до того, как поле стало обязательным) или неактивен, в полях может не быть значений.
Один из способов устранить эту проблему — сделать все настраиваемые поля ресурса Office Project Server 2007необязательными. Затем из можно будет переключить в Office Project Server 2007 вручную.
Существует два способа выяснить, какое настраиваемое поле вызвало неполадку при миграции.
Метод 1 использует запрос SQL к базе данных "Project Server 2003 Project tables".
Метод 2 использует интерфейс Project Professional 2003.
Поиск проблемы с помощью метода проверки 1
Этот запрос SQL возвращает имена корпоративных ресурсов с обязательными настраиваемыми полями без значений. Запустите запрос SQL к базе данных "Project Server 2003 Project tables".
declare @eglobal_proj_id int
set @eglobal_proj_id = (select PROJ_ID from dbo.MSP_PROJECTS where PROJ_TYPE = 2)
select
r1.RES_NAME as 'Resource Name',
ast1.AS_VALUE as 'Custom Field Name'
from
dbo.MSP_RESOURCES r1
inner join dbo.MSP_CODE_FIELDS cf1 on (r1.RES_UID = cf1.CODE_REF_UID)
inner join dbo.MSP_FIELD_ATTRIBUTES fa1 on (cf1.CODE_FIELD_ID = fa1.ATTRIB_FIELD_ID)
inner join dbo.MSP_ATTRIBUTE_STRINGS ast1 on (fa1.AS_ID = ast1.AS_ID)
inner join dbo.MSP_OUTLINE_CODES oc3 on (cf1.CODE_UID = oc3.CODE_UID and oc3.PROJ_ID = @eglobal_proj_id)
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
r1.PROJ_ID = 1
and cf1.proj_id = 1
and fa1.PROJ_ID = @eglobal_proj_id
and fa1.ATTRIB_ID = 206
and ast1.PROJ_ID = @eglobal_proj_id
and oc3.PROJ_ID = @eglobal_proj_id
and oc1.CODE_UID is null
and oc2.CODE_UID is null
order by
r1.RES_NAME,
ast1.AS_VALUE
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Нет возвращенных строк. |
Возвращена одна или несколько строк. |
Устранение проблемы
Откройте в Project Server 2003 корпоративный пул ресурсов и установите значения обязательных полей или сделайте соответствующие поля "Необязательными".
Поиск проблемы с помощью метода проверки 2
При использовании этого метода корпоративный пул ресурсов необходимо открыть с помощью Project Professional 2003. При попытке сохранить пул будет ясно, у всех ли выбранных корпоративных ресурсов есть значения обязательных настраиваемых полей.
Откройте приложение Project Professional 2003, подключенное к серверу Project Server 2003.
В меню Сервис выберите Корпоративные параметры, а затем – Открыть корпоративный пул ресурсов.
В появившемся диалоговом окне Open Enterprise Resources поставьте флажок Include inactive resources. Убедитесь, что параметр Read/write to check out выбран. Нажмите кнопку Apply filter.
Нажмите кнопку Select/Deselect all, чтобы выбрать все ресурсы.
Нажмите кнопку Open/Add. Когда ресурсы откроются для редактирования, нажмите Save. Project Professional проверит, у всех ли обязательных настраиваемых полей (активных и неактивных) есть значения.
Успешный результат проверки Неуспешный результат проверки После сохранения не отображаются сообщения об ошибке.
Появляется сообщение с перечнем ошибок ресурсов, у которых нет значений обязательных настраиваемых полей.
Устранение проблемы
Установите в Project Server 2003 значения обязательных настраиваемых полей или сделайте соответствующие поля необязательными.
Проверка наличия настраиваемых полей ресурсов, чьи значения отсутствуют в определении таблицы подстановки
Все значения настраиваемых полей ресурсов должны быть в определении таблицы подстановки.
Поиск возможной проблемы
Этот запрос SQL ищет недопустимые настраиваемые поля ресурсов, проверяя, есть ли их значения в соответствующей таблице подстановки.
Запустите следующий запрос SQL к базам данных "Project Server 2003 Project tables" и "Project Server 2003 Web Tables".
declare @eglobal_proj_id int
set @eglobal_proj_id = (select PROJ_ID from dbo.MSP_PROJECTS where PROJ_TYPE = 2)
select
r1.RES_NAME,
ast1.AS_VALUE
from
dbo.MSP_RESOURCES r1
inner join dbo.MSP_CODE_FIELDS cf1 on (r1.RES_UID = cf1.CODE_REF_UID)
inner join dbo.MSP_FIELD_ATTRIBUTES fa1 on (cf1.CODE_FIELD_ID = fa1.ATTRIB_FIELD_ID)
inner join dbo.MSP_ATTRIBUTE_STRINGS ast1 on (fa1.AS_ID = ast1.AS_ID)
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
r1.PROJ_ID = 1
and cf1.proj_id = 1
and cf1.code_uid is not null
and fa1.PROJ_ID = @eglobal_proj_id
and fa1.ATTRIB_ID = 206
and ast1.PROJ_ID = @eglobal_proj_id
and oc1.CODE_UID is null
and oc2.CODE_UID is null
union
select
r1.RES_NAME,
ast1.AS_VALUE
from
dbo.MSP_RESOURCES r1
inner join dbo.MSP_MV_FIELDS cf1 on (r1.RES_UID = cf1.CODE_REF_UID)
inner join dbo.MSP_FIELD_ATTRIBUTES fa1 on (cf1.CODE_FIELD_ID = fa1.ATTRIB_FIELD_ID)
inner join dbo.MSP_ATTRIBUTE_STRINGS ast1 on (fa1.AS_ID = ast1.AS_ID)
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
r1.PROJ_ID = 1
and cf1.proj_id = 1
and cf1.code_uid is not null
and fa1.PROJ_ID = @eglobal_proj_id
and fa1.ATTRIB_ID = 206
and ast1.PROJ_ID = @eglobal_proj_id
and oc1.CODE_UID is null
and oc2.CODE_UID is null
order by
r1.RES_NAME,
ast1.AS_VALUE
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Нет возвращенных строк. |
Возвращена одна или несколько строк. |
Устранение проблемы
Следующий запрос SQL обнуляет недопустимые значения настраиваемых полей. Запустите запрос SQL к базе данных "Project Server 2003 Project tables".
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 Server 2003 Project tables".
select count(*) from dbo.MSP_RESOURCES where PROJ_ID = 1 and cast(EXT_EDIT_REF_DATA as varchar(1)) = '1'
Успешный результат проверки | Неуспешный результат проверки |
---|---|
0 |
Возвращено значение больше "0". |
Устранение проблемы
Чтобы устранить проблему, прежде всего нужно указать, что все корпоративные ресурсы редактировались извне. Для этого используется запрос 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", которое редко используется.
Примечание:
При добавлении поля "Enterprise Resource Duration" не следует создавать для него список значений. Поля Enterprise Resource Duration cо списками значений не переносятся. Используйте при создании временного поля числовое значение. Новое настраиваемое поле можно назвать "Test Resource CF". Создав поле "Test Resource CF", откройте корпоративный пул ресурсов и добавьте столбец "Test Resource CF". Для всех ресурсов укажите допустимое значение поля. Сохраните пул и выполните переход. Затем нужно будет удалить поле "Test Resource CF" в Microsoft Office Project Профессиональный 2007.
Поиск настраиваемых полей "Enterprise Resource Duration" со списками значений
Настраиваемые поля "Enterprise Resource Duration" со связанными списками значений приводят к ошибке миграции.
Поиск возможной проблемы
Этот запрос SQL ищет настраиваемые поля Enterprise Resource Duration со связанными списками значений. Запустите запрос SQL к базе данных "Project Server 2003 Project tables".
declare @proj_id int
set @proj_id = (select proj_id from msp_projects where proj_type = 2)
select ats.as_value as CustomFieldName from msp_attribute_strings ats
inner join msp_field_attributes fa on (fa.proj_id = ats.proj_id and fa.as_id = ats.as_id)
where fa.attrib_id = 206 and fa.proj_id = @proj_id and fa.attrib_field_id >= 205521382 and fa.attrib_field_id <= 205521391
and exists (select * from msp_field_attributes fa2 where fa2.proj_id = fa.proj_id and fa2.attrib_field_id = fa.attrib_field_id and fa2.attrib_id = 210)
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Нет возвращенных строк. |
Возвращена одна или несколько строк. С этими полями Enterprise Resource Duration связаны списки значений. Все списки нужно удалить вручную. |
Устранение проблемы
Чтобы устранить проблему, нужно вручную удалить все списки значений полей Enterprise Resource Duration, которые вернул запрос SQL. Для этого используется следующая процедура:
Откройте приложение Project Professional 2003, подключенное к серверу Project Server 2003.
В меню Сервис выделите пункт Корпоративные параметры и выберите команду Открыть глобальный корпоративный шаблон.
На странице Microsoft Project — Извлеченный корпоративный глобальный шаблон, выберите меню Сервис — Настройка, а затем щелкните ссылку Корпоративные поля.
На странице "Настраиваемые корпоративные поля", вкладка Настраиваемые поля, раздел Поля нажмите Ресурс.
Выберите из самораскрывающегося списка Тип пункт Длительность. Все настраиваемые поля Enterprise Duration отобразятся в списке Поле.
В списке Поле выберите первое настраиваемое поле Enterprise Resource Duration, соответствующее значениям, возвращенным запросом SQL, который был запущен ранее. В разделе Настраиваемые атрибуты нажмите кнопку Список значений. Удалите из списка конкретного поля Enterprise Duration все значения столбца Значение и нажмите кнопку OK. В появившемся диалоговом окне Microsoft Office Project нажмите кнопку OK.
На странице "Настройка корпоративных полей", раздел Настраиваемые атрибуты , убедитесь, что Список значений поля Enterprise Resource Duration, выбранного в списке Поле, не выбран. Если Список значений не выбран, выберите Нет.
В списке Поле выберите все остальные настраиваемые поля Enterprise Resource Duration, возвращенные запросом SQL, и повторите шаги 6 и 7.
Нажмите кнопку ОК .
Проверка допустимости значений настраиваемых полей Enterprise Resource Duration
Office Project Server 2007 не поддерживает отрицательные значения длительности и значения длительности выше 34689600. При попытке перенести на Project Server 2003 поля Enterprise Resource Duration с такими значениями происходит сбой.
Поиск возможной проблемы
Для проверки нужно запустить следующий запрос SQL к базе данных "Project Server 2003 Project tables". Он вернет поля Enterprise Resource Duration custom с недопустимыми значениями.
select r.res_name, mas.as_value from msp_resources r
inner join msp_duration_fields df on (df.dur_ref_uid = r.res_euid and df.proj_id = r.proj_id)
inner join msp_projects p on (p.proj_type = 2)
inner join msp_field_attributes fa on (fa.proj_id = p.proj_id and fa.attrib_field_id = df.dur_field_id)
inner join msp_attribute_strings mas on (mas.proj_id = p.proj_id and fa.as_id = mas.as_id)
where (dur_value < 0 or dur_value > 34689600) and df.proj_id = 1 and p.proj_type = 2 and fa.attrib_id = 206
Успешный результат проверки | Неуспешный результат проверки |
---|---|
Нет возвращенных строк. |
Возвращена одна или несколько строк. |
Устранение проблемы
Чтобы устранить проблему, необходимо вручную изменить все найденные поля Enterprise Resource Duration. Для всех полей нужно выбрать допустимые значения (от 0 до 34689600).
Если запрос вернул простое настраиваемое поле (а не поле формулы), ему можно присвоить значение из допустимого диапазона. Если запрос вернул поле формулы, ее придется изменить так, чтобы полученные результаты попадали в этот диапазон.
Поиск имен корпоративных настраиваемых полей с начальным или конечным пробелом
Убедитесь, что в именах настраиваемых полей Office Project Server 2007 нет начальных или конечных пробелов (например, __настраиваемое поле_ (подчеркивания соответствуют символам пробела). При попытке миграции таких полей возникает ошибка.
Поиск учетной записи администратора миграции в Project Server 2003
Если в Project Server 2003 есть учетная запись администратора миграции (именная или учетная запись Windows), то пользовательские разрешения, привязки категорий и пользовательские свойства не переносятся на Office Project Server 2007. По сути, пользователю Office Project Server 2007 это выгодно. Обратите внимание, что если в проектах используется учетная запись администратора миграции, она заменяет эти ресурсы.
Замена запятых в именах корпоративных ресурсов
Если базы данных Project Server 2003 содержат имена ресурсов с запятыми, то это вызовет ошибку переноса ресурса. Данная ошибка может возникать в том случае, если языковой стандарт клиента предполагает использование запятых в именах ресурсов.
Устранение проблемы
Используйте следующие запросы SQL для замены запятых на нейтральный символ подчеркивания.
Выполните этот запрос для базы данных Project tables:
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
Выполните этот запрос для базы данных Web tables:
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