移轉前的驗證和清除
更新日期: 2009年5月
上次修改主題的時間: 2015-02-27
本文內容:
以 -verify 選項執行移轉工具
對移轉問題執行手動測試
本文將說明如何對要移轉 Microsoft Office Project Server 2003 的來源資料驗證是否處於可移轉至 Microsoft Office Project Server 2007 的有效狀態。本文將說明一些實用驗證工具,讓您驗證要移轉的資料是否並非無效或損毀。這些工具包括移轉工具的 -verify 選項,以及要在 Project Server 2003 資料庫上執行的 SQL 查詢。此外,文中也將說明在移轉前您應對 Project Server 2003 環境執行哪些一般性檢查。
重要事項: |
---|
資料庫的大小可能會造成移轉程序相當耗時 (如需詳細資訊,請參閱<Project Server 2007 的移轉執行資料>)。如果中途發生全域資料移轉失敗 (例如,因為企業資源重複),您必須先解決問題,再從頭開始重新執行全域資料移轉程序。在執行移轉程序之前先執行移轉前驗證和清除,就可以大幅降低移轉工具失敗的機率。 |
以 -verify 選項執行移轉工具
移轉工具的 -verify 選項會檢查 Project Server 2003 資料是否有下列問題:
專案已取出
專案從外部修改
專案具有等候中的狀態更新
重複的企業資源
移轉工具會決定是否需對資料進行變更,使其適合移轉。它會將所做的變更寫入移轉記錄檔,但並不會修正資料。
請注意,要對資料執行的檢查項目組不是只有 -verify 選項。您需執行完本文其餘驗證程序,才能確保資料處於可移轉的有效狀態。
您應檢閱整份所產生的記錄檔,並對 Project Server 2003 資料進行任何必要變更,以才不致使資料移轉發生問題。
附註: |
---|
以 -verify 選項執行移轉工具並不會移轉任何全域或專案資料,即使您在移轉設定檔中設定要這樣執行。 |
決定專案是否已取出
舉凡已取出的專案,就不能進行移轉。因此,最好能在移轉前使來源資料處於穩定狀態,也就是自行檢查專案是否處於可移轉的穩定狀態。負責移轉的處理人員可設定期限,要求專案經理在某個日期前完成專案檢查工作,並規定在該日期之後強制存回所有專案。
如何檢查問題
如果以 -verify 選項執行移轉工具時,發現要移轉的專案已取出,您就會在主控台和記錄檔看到下列訊息:
下列專案已取出。移轉工具將不會移轉這些專案 (移轉工具不會停止,只會略過這些專案)。請存回這些專案。
成功的測試結果 | 不成功的測試結果 |
---|---|
如果所有專案都已存回,將不會出現上述訊息。 |
會出現上述訊息,後面加上專案名稱。每個專案名稱以單獨一行出現。 |
如何修正問題
存回所有取出的專案。
存回 Project Server 2003 中取出的專案
在 Project Server 2003 Project Web Access 中,按一下 [管理]。
按一下 [管理企業功能]。
按一下 [存回企業專案],看看哪些專案已取出。請協調讓專案存回或從 Project Web Access 強制執行存回作業。
附註: |
---|
您也可以在「Project Server 2003 專案資料表」和「Project Server 2003 網頁資料表」資料庫中執行下列 SQL 查詢,測試專案是否已取出。select PROJ_NAME from dbo.MSP_PROJECTS where PROJ_CHECKEDOUT = 1 and PROJ_TYPE in (0, 1) 如果傳回任何結果,表示所代表的專案已取出。 |
決定專案是否從外部編輯
舉凡從外部編輯的專案,就不能進行移轉。
如何檢查問題
如果以 -verify 選項執行移轉工具時,發現要移轉的專案是從外部編輯,您就會在主控台和記錄檔看到下列訊息:
下列專案是從外部修改。移轉工具將不會移轉這些專案 (移轉工具不會停止,只會略過這些專案)。請在 Project Professional 2003 中開啟這些專案,並將它們回存到 Project Server 2003。
成功的測試結果 | 不成功的測試結果 |
---|---|
如果所有專案都未從外部編輯,將不會出現上述訊息。 |
會出現上述訊息,後面加上專案名稱。每個專案名稱以單獨一行出現。 |
如何修正問題
在 Project Professional 2003 中,開啟從外部編輯的專案,直接儲存該專案,並回存至伺服器。這個動作應會將 [外部編輯] 標幟設為 [false]。
附註: |
---|
您也可以在「Project Server 2003 專案資料表」和「Project Server 2003 網頁資料表」資料庫中執行下列 SQL 查詢,檢查專案是否從外部編輯。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 選項執行移轉工具時,發現要移轉的專案具有等候中的狀態更新,您就會在主控台和記錄檔看到下列訊息:
下列專案具有等候中的狀態更新。移轉工具將不會移轉這些專案 (移轉工具不會停止,只會略過這些專案)。請套用等候中的更新。
成功的測試結果 | 不成功的測試結果 |
---|---|
如果所有專案都沒有等候中的狀態更新,將不會出現上述訊息。 |
會出現上述訊息,後面加上專案名稱。每個專案名稱以單獨一行出現。 |
如何修正問題
移轉設定檔中的 StopProjectMigrationIfStatusUpdatesPending 參數可以設定成允許移轉具有等候中更新的專案。如需這個參數的詳細資訊,請參閱<設定 Project Server 移轉工具>。
最好的移轉前作法就是設定期限,要求專案經理在某個日期前接受或拒絕等候中的狀態更新,並規定在該日期之後,強制移轉所有專案 (即使專案不具有最新的狀態更新)。
附註: |
---|
您也可以在「Project Server 2003 網頁資料表」資料庫中執行下列 SQL 查詢,檢查專案是否具有等待中的狀態更新。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 選項執行移轉工具時,發現有重複的企業資源存在,您就會在主控台和記錄檔看到下列訊息:
您的企業資源資料庫中下列資源有重複項目。Project 2003 不支援此情況,且可能導致企業資源移轉失敗。嘗試移轉前,請先確認沒有重複的資源存在。
成功的測試結果 | 不成功的測試結果 |
---|---|
如果沒有重複的企業資源,將不會出現上述訊息。 |
會出現上述訊息,後面加上資源名稱。每個資源名稱以單獨一行出現。 |
附註: |
---|
您也可以在「Project Server 2003 專案資料表」中執行下列 SQL 查詢,檢查是否有重複的企業資源。查詢作業會產生一份清單,列出企業資源資料庫中所有重複的企業資源。 查詢 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 |
若要修正此問題,您可以選擇將識別碼為 RES_EUID=125 的「Brad Sutton」指定為「正確」的企業資源,然後修正各列,如下所示:
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 |
若要修正此問題,您可以選擇將識別碼為 RES_UID=125 的「Brad Sutton」指定為「正確」的資源,然後更新另外一列以指向此項目。例如:
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」
Microsoft 支援的是從 Project Server 2003 SP2a 移轉。如果未安裝此 Service Pack,請套用此 Service Pack。如需此 Service Pack 的詳細資訊,請參閱知識庫文章 Project Server 2003 Service Pack 2a 的說明 (https://go.microsoft.com/fwlink/?linkid=78242\&clcid=0x404)。
如何檢查問題
請在「Project Server 2003 網頁資料表」資料庫中執行下列 SQL 查詢。此查詢會具體告訴您 Project Server 的版本,包括 Service Pack 版本號碼。
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>。
企業通用範本不應從外部編輯
如果 [企業通用] 範本是在 Project 之外的軟體 (例如協力廠商應用程式) 上編輯,[外部編輯] 標幟會設為 [true]。Project Professional 會檢查此標幟,如果它設定為 [true],Project Professional 便會重新計算 [企業通用] 範本中的所有資料,以確保一致性。您需將此標幟設為 [false] 才能進行移轉。
如何檢查問題
請在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。下列查詢會檢查 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 中開啟 [企業通用] 並回存至 Project Professional。
決定企業通用範本是否已取出
移轉專案時,[企業通用] 範本不應已取出。
如何檢查問題
下列 SQL 查詢會驗證 [企業通用] 是否已取出。請在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。
select count(*) from dbo.MSP_PROJECTS where PROJ_CHECKEDOUT = 1 and PROJ_TYPE = 2
成功的測試結果 | 不成功的測試結果 |
---|---|
0 |
會傳回大於 "0" 的值。 |
如何修正問題
請確定 [企業通用] 已存回。
在 Project Server 2003 Project Web Access 中,按一下 [管理]。
按一下 [管理企業功能]。
按一下 [存回企業專案],看看誰取出 [企業通用]。請協調讓專案存回或從 Project Web Access 強制執行存回作業。
決定企業通用範本是否已鎖定
如果電腦不正常關機或 Project Professional 不正常結束,專案就會變成鎖定。如果 [企業通用] 範本已鎖定,便無法執行移轉工具。
如何檢查問題
下列 SQL 查詢會檢查 [企業通用] 範本檔案是否已鎖定。請在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。
select cast(isnull(PROJ_LOCKED, '0') as int) from dbo.MSP_PROJECTS where PROJ_TYPE = 2
成功的測試結果 | 不成功的測試結果 |
---|---|
0 |
1 |
如何修正問題
下列 SQL 查詢會對 [企業通用] 範本解除鎖定。請在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。
Update MSP_PROJECTS set PROJ_LOCKED = 1 where PROJ_TYPE = 2
決定網頁資料表資料庫和專案資料表資料庫中的預設語言是否應相符
「Project Server 2003 網頁資料表」資料庫和「Project Server 2003 專案資料表」資料庫上的預設語言必須相符才能進行移轉。
如何檢查問題
這項查詢會決定每個資料庫的預設語言。如果查詢結果是不相符,移轉作業會失敗。請在「Project Server 2003 專案資料表」和「Project Server 2003 網頁資料表」資料庫中執行下列 SQL 查詢。
select WADMIN_DEFAULT_LANGUAGE from dbo.MSP_WEB_ADMIN.
成功的測試結果 | 不成功的測試結果 |
---|---|
對這兩個資料庫執行的結果是相符。 |
對這兩個資料庫執行的結果是不相符。 |
如何修正問題
請與系統管理員一起修正這兩個資料庫之間不一致的狀態。
決定資源的名稱中是否有逗號
Office Project Server 2007 有一項限制是,(任何語言的) 企業資源名稱不可以有逗號字元 (,)。必須以有效字元取代該字元。
如何檢查問題
這項查詢會檢查企業資源資料庫中是否有任何資源的名稱包含逗號字元。請在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。
select RES_NAME from MSP_RESOURCES where RES_NAME is not null and charindex(',', RES_NAME) > 0
成功的測試結果 | 不成功的測試結果 |
---|---|
沒有傳回任何資料列。 |
會傳回一或多列。 |
如何修正問題
請在「Project Server 2003 專案資料表」和「Project Server 2003 網頁資料表」資料庫中執行下列 SQL 查詢。這項查詢會將逗號字元取代成底線字元。如果要使用其他有效字元,則可以編輯該查詢。
-- 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 對「Project Server 2003 專案資料表」資料庫使用 SQL 查詢。
驗證方法 2 使用 Project Professional 2003 使用者介面。
如何使用驗證方法 1 檢查問題
這個 SQL 查詢會傳回必要企業自訂欄位沒有值的企業資源。請在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。
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 Server 2003 伺服器的 Project Professional 2003。
在 [工具] 功能表上,按一下 [企業選項] 後,再按一下 [開啟企業資源資料庫]。
在出現的 [開啟企業資源] 對話方塊中,勾選 [包含非作用中資源] 核取方塊。請確認是否已勾選 [要取出的讀寫]。按一下 [套用篩選器] 按鈕。
按一下 [全選/取消全選] 按鈕,確定已選取所有資源。
按一下 [開啟/新增] 按鈕。開啟要編輯的資源之後,請按一下 [儲存]。Project Professional 便會驗證每個企業資源 (包括作用中或非作用中) 的必要自訂欄位上是否都有值。
成功的測試結果 不成功的測試結果 儲存後沒有出現錯誤訊息。
會出現錯誤訊息,對必要企業自訂欄位沒有值的資源列出錯誤。
如何修正問題
在 Project Server 2003 中設定必要自訂欄位的值,或將受影響的自訂欄位設定為 [非必要的]。
決定資源自訂欄位的值是否不存在於查閱資料表定義中
資源自訂欄位的值所有必須存在於查閱定義表格中。
如何檢查問題
此 SQL 查詢會檢查自訂欄位值是否存在於對應的查閱資料表中,藉以找出無效的資源自訂欄位。
請在「Project Server 2003 專案資料表」和「Project Server 2003 網頁資料表」資料庫中執行下列 SQL 查詢。
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 查詢會將無效的資源自訂欄位值設為 Null。請在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。
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,這些資源必須不是從外部編輯。
如何檢查問題
下列查詢會檢查企業資源資料庫中是否有從外部編輯的企業資源。如果測試結果顯示不成功,表示企業資源資料庫將無法在其目前狀態下移轉。請在「Project Server 2003 專案資料表」中執行下列 SQL 查詢。
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 完成。這個動作會移除每個企業資源的 [外部編輯] 標幟。如果企業資源沒有加以變更,Project Professional 就不會對該資源進行重新計算。這個特定企業資源會繼續標示成外部編輯,而且企業資源資料庫就不會移轉。
附註: |
---|
企業資源資料庫移轉之後,便可以移除之前對每個企業資源所做的變更。 |
您可以利用下列一般解決方法移除企業資源中的所有外部編輯標幟。
先將所有企業資源設為外部編輯。您可以在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。
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 中您可以對每個企業資源新增一個 [測試] 資源自訂欄位。任何自訂欄位類型都可以使用。例如,您可以使用一個不常用的自訂欄位 [企業資源工期]。
附註: 如果使用 [企業資源工期] 自訂欄位,請勿為該欄位建立值清單。凡是具有值清單的 [企業資源工期] 自訂欄位都不會移轉。因此,建立這個臨時自訂欄位時,請使用數字值。 您可以將新的自訂欄位命名為 [測試資源 CF]。建立 [測試資源 CF] 自訂欄位之後,開啟企業資源資料庫,並新增 [測試資源 CF] 欄。再對所有資源設定此自訂欄位的有效值。儲存企業資源資料庫並執行移轉作業。移轉之後,在 Microsoft Office Project Professional 2007 中移除 [測試資源 CF] 這個自訂欄位。
決定企業資源工期自訂欄位是否具有值清單
具有關聯值清單的 [企業資源工期] 自訂欄位會導致移轉失敗。
如何檢查問題
此 SQL 查詢會檢查 [企業資源工期] 自訂欄位是否具有關聯的值清單。請在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。
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)
成功的測試結果 | 不成功的測試結果 |
---|---|
沒有傳回任何資料列。 |
會傳回一或多列。這些 [企業資源工期] 自訂欄位都具有關聯的值清單。您必須以手動方式移除這些欄位的值清單。 |
如何修正問題
若要修正此問題,您必須以手動方式針對 SQL 查詢所找到的每個 [企業資源工期] 自訂欄位移除所有值清單。若要執行這項操作,請執行下列程序。
開啟連線到 Project Server 2003 伺服器的 Project Professional 2003。
在 [工具] 功能表上,指向 [企業選項],再按一下 [開啟企業通用]。
在 [Microsoft Project - 取出企業通用] 頁面上,從 [工具] 功能表,指向 [自訂],然後按一下 [企業欄位]。
在 [自訂企業欄位] 頁面上的 [自訂欄位] 索引標籤中,按一下 [欄位] 區段中的 [資源]。
在 [類型] 下拉式清單中,按一下 [工期]。所有 [企業工期] 自訂欄位將會出現在 [欄位] 清單中。
在 [欄位] 清單中,選取第一個與您先前所執行之 SQL 查詢傳回結果相符的 [企業資源工期] 自訂欄位。在 [自訂屬性] 區段中,按一下 [值清單] 按鈕。在該特定 [企業工期] 自訂欄位的值清單中,刪除 [值] 欄中的任何值,然後按一下 [確定]。[Microsoft Office Project] 對話方塊出現之後,按一下 [確定]。
在 [自訂企業欄位] 頁面上的 [自訂屬性] 區段中,驗證 [值清單] 是否未選用於 [欄位] 清單中所選取的 [企業資源工期] 自訂欄位。如果選用了 [值清單],則請選取 [無]。
在 [欄位] 清單中,選取其餘所有對應於上述 SQL 查詢的 [企業資源工期] 自訂欄位,然後重複執行步驟 6 和 7。
按一下 [確定]。
決定企業資源工期自訂欄位是否包含有效值
Office Project Server 2007 不允許負的工期值或工期值大於 34689600。如果您嘗試移轉的 Project Server 2003 [企業資源工期] 自訂欄位包含這兩者其中一,移轉作業將會失敗。
如何檢查問題
若要檢查此問題,請在「Project Server 2003 專案資料表」資料庫中執行下列 SQL 查詢。這個查詢會傳回具有無效值的 [企業資源工期] 自訂欄位。
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
成功的測試結果 | 不成功的測試結果 |
---|---|
沒有傳回任何資料列。 |
會傳回一或多列。 |
如何修正問題
若要修正此問題,您必須針對每個所識別的自訂欄位,以手動方式編輯 [企業資源工期] 自訂欄位值。您必須確定欄位值是有效的 (也就是介於 0 和 34689600 之間)。
如果查詢所識別的欄位為簡單自訂欄位 (而不是公式欄位),您可以變更欄位值,讓值介於允許範圍內。如果查詢所識別的欄位為公式欄位,就必須改變公式,才能確保結果會介於有效範圍內。
決定企業自訂欄位名稱是否不包含前置或結尾空格
請驗證 Office Project Server 2007 自訂欄位名稱是否不包含任何前置或結尾空格 (例如,*__Custom Field_*其中的底線字元代表一個空格字元)。如果您嘗試移轉具有前置或結尾空格字元的自訂欄位,移轉將會失敗並出現錯誤訊息。
決定 Project Server 2003 是否具有移轉管理員帳戶
如果 Project Server 2003 有「移轉管理員帳戶」存在 (不管是使用此名稱或以 Windows 帳戶名稱),該帳戶的使用者權限、類別對應及使用者屬性將不會移轉到 Office Project Server 2007。基本上,Office Project Server 2007 使用者會佔有優勢。請注意,如果專案中使用的是「移轉管理員帳戶」,「移轉管理員帳戶」將取代這些資源。
取代企業資源名稱中的逗號字元
若 Project Server 2003 資料庫有包含逗號字元的企業資源名稱,則資源的移轉會失敗。這對部分地區設定的客戶而言會是問題,因為在這些區域經常會在資源名稱中使用逗號字元。
如何修正問題
使用下列 SQL 查詢將每個逗號字元取代為中性的底線字元。
在 Project 表格資料庫上執行此查詢:
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 表格資料庫上執行此查詢:
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