Симптоми
Броят на скрити записи в таблицата, които се генерират в предприятие флаг поле се разширява бързо в Microsoft Project Server 2010. Този проблем се причинява проблеми с производителността.
Решение
За да разрешите този проблем, приложете следния пакет с актуални корекции:
2597138 описание на пакета с актуални корекции за Project Server 2010 (Pjsrvwfe-x-none.msp): 28 февруари 2012 г.
Допълнителна информация
Тази актуална корекция управлява броя на скрити записи в таблицата, така че броят на записите се увеличава твърде много. Всеки път, когато отворите или запишете план на проект в Project Professional след прилагането на актуалната корекция на Project server, сянка записи в таблицата, са свързани с проекта се изчистват. Ако искате да почистите сянка таблицата записи в големи обеми, можете да използвате следния скрипт. Преди да изпълните скрипта, уверете се, че сте прочели следното:
-
Направете резервно копие на базата данни на Project server, преди да стартирате скрипта.
-
За да избегнете неочаквана база данни на съдържанието проблеми, спрете услугата опашката на Project сървъри, когато не е имало дейност на сървърите за няколко часа.
-
Проверка на скрипта в среда за разработка с помощта на текущото архивиране на базата данни на Project server.
-
Време колко време е необходимо да изпълните скрипта в развойна среда. Времето, необходимо за изпълнение на скрипт за изтриване зависи от SQL server и броя на записите, които трябва да бъдат премахнати. Уверете се, че скрипта приключи в определеното време.
За да изчистите сянка таблицата записи в големи обеми, изпълнете следните стъпки:
-
Следния скрипт на проект и публикуван бази данни и освобождаване на свободно пространство в базата данни:
--Clean up MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW
IF object_id('tempdb..#TempTaskCFShadow') IS NOT NULL
BEGIN
drop table #TempTaskCFShadow
END
CREATE table #TempTaskCFShadow (pid uniqueidentifier, tid uniqueidentifier, revCount int, mdpid uniqueidentifier)
INSERT #TempTaskCFShadow (pid, tid, revCount, mdpid)
SELECT PROJ_UID, TASK_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID
FROM MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW
GROUP BY PROJ_UID , TASK_UID, MD_PROP_UID
DELETE
FROM MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW
FROM MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempTaskCFShadow AS newtable
where originalTable.MD_PROP_UID = newtable.mdpid AND
originalTable.PROJ_UID = newtable.pid AND
originalTable.TASK_UID = newtable.tid AND
originalTable.DELETED_REV_COUNTER <> newtable.revCount
DROP TABLE #TempTaskCFShadow
--Clean up MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW
IF object_id('tempdb..#TempAssnCFShadow') IS NOT NULL
BEGIN
drop table #TempAssnCFShadow
END
CREATE table #TempAssnCFShadow (pid uniqueidentifier, asid uniqueidentifier, revCount int, mdpid uniqueidentifier)
INSERT #TempAssnCFShadow (pid, asid, revCount, mdpid)
SELECT PROJ_UID, assn_uid, MAX(DELETED_REV_COUNTER), MD_PROP_UID
FROM MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW
GROUP BY PROJ_UID , ASSN_UID, MD_PROP_UID
DELETE
FROM MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW
FROM MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempAssnCFShadow AS newtable
where originalTable.MD_PROP_UID = newtable.mdpid AND
originalTable.PROJ_UID = newtable.pid AND
originalTable.ASSN_UID= newtable.asid AND
originalTable.DELETED_REV_COUNTER <> newtable.revCount
DROP TABLE #TempAssnCFShadow
--Clean up MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW
IF object_id('tempdb..#TempProjResCFShadow') IS NOT NULL
BEGIN
drop table #TempProjResCFShadow
END
CREATE table #TempProjResCFShadow (pid uniqueidentifier, resid uniqueidentifier, revCount int, mdpid uniqueidentifier)
INSERT #TempProjResCFShadow (pid, resid, revCount, mdpid)
SELECT PROJ_UID, RES_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID
FROM MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW
GROUP BY PROJ_UID , RES_UID, MD_PROP_UID
DELETE
FROM MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW
FROM MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempProjResCFShadow AS newtable
where originalTable.MD_PROP_UID = newtable.mdpid AND
originalTable.PROJ_UID = newtable.pid AND
originalTable.RES_UID = newtable.resid AND
originalTable.DELETED_REV_COUNTER <> newtable.revCount
DROP TABLE #TempProjResCFShadow
--Clean up MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW
IF object_id('tempdb..#TempProjCFShadow') IS NOT NULL
BEGIN
drop table #TempProjCFShadow
END
CREATE table #TempProjCFShadow (pid uniqueidentifier, revCount int, mdpid uniqueidentifier)
INSERT #TempProjCFShadow (pid, revCount, mdpid)
SELECT PROJ_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID
FROM MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW
GROUP BY PROJ_UID , MD_PROP_UID
DELETE
FROM MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW
FROM MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempProjCFShadow AS newtable
where originalTable.MD_PROP_UID = newtable.mdpid AND
originalTable.PROJ_UID = newtable.pid AND
originalTable.DELETED_REV_COUNTER <> newtable.revCount
DROP TABLE #TempProjCFShadow -
Изпълнете следния скрипт публикувана база данни, след като изпълните скрипта от стъпка 1 по проект и публикуван бази данни:
--Clean up MSP_RES_CUSTOM_FIELD_VALUES_SHADOW
IF object_id('tempdb..#TempResCFShadow') IS NOT NULL
BEGIN
drop table #TempResCFShadow
END
CREATE table #TempResCFShadow (resid uniqueidentifier, revCount int, mdpid uniqueidentifier)
INSERT #TempResCFShadow (resid, revCount, mdpid)
SELECT RES_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID
FROM MSP_RES_CUSTOM_FIELD_VALUES_SHADOW
GROUP BY RES_UID, MD_PROP_UID
DELETE
FROM MSP_RES_CUSTOM_FIELD_VALUES_SHADOW
FROM MSP_RES_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempResCFShadow AS newtable
where originalTable.MD_PROP_UID = newtable.mdpid AND
originalTable.RES_UID = newtable.resid AND
originalTable.DELETED_REV_COUNTER <> newtable.revCount
DROP TABLE #TempResCFShadow
Статус
Microsoft потвърждава, че това е проблем в продуктите на Microsoft, изброени в раздела "Отнася се за".