อาการ
หมายเลขของเร็กคอร์ดในตารางเงาที่สร้างขึ้นในการเพิ่มฟิลด์สถานะองค์กรใน Microsoft โครงการ Server 2010 อย่างรวดเร็ว ปัญหานี้ทำให้เกิดปัญหาประสิทธิภาพการทำงาน
การแก้ปัญหา
เมื่อต้องการแก้ไขปัญหานี้ ใช้แพคเกจโปรแกรมแก้ไขด่วนต่อไปนี้:
2597138คำอธิบายของแพคเกจโปรแกรมแก้ไขด่วนโครงการ Server 2010 (Pjsrvwfe-x-none.msp): 28 กุมภาพันธ์ 2012
ข้อมูลเพิ่มเติม
โปรแกรมแก้ไขด่วนนี้จัดการจำนวนระเบียนในตารางเงาเพื่อให้จำนวนของระเบียนที่เพิ่มมากเกินไป ทุกครั้ง ที่คุณเปิด หรือบันทึกแผนโครงการในโครงการ Professional หลังจากใช้โปรแกรมแก้ไขด่วนบนเซิร์ฟเวอร์โครงการ เรกคอร์ดในตารางเงาที่เกี่ยวข้องกับโครงการ จะถูกล้างข้อมูล ถ้าคุณต้องการล้างระเบียนตารางเงาในจำนวนมาก คุณสามารถใช้สคริปต์ต่อไปนี้ ก่อนที่คุณรันสคริปต์ โปรดตรวจสอบให้แน่ใจว่า คุณได้อ่านเนื้อหาต่อไปนี้:
-
ทำสำเนาสำรองของฐานข้อมูลเซิร์ฟเวอร์โครงการก่อนที่คุณเรียกใช้สคริปต์
-
เมื่อต้องการหลีกเลี่ยงปัญหาเกี่ยวกับเนื้อหาของฐานข้อมูลที่ไม่คาดคิด หยุดบริการคิวบนเซิร์ฟเวอร์แอพลิเคชันโครงการเมื่อไม่มีกิจกรรมใด ๆ บนเซิร์ฟเวอร์เป็นเวลาหลาย ๆ ชั่วโมง
-
ตรวจสอบสคริปต์ในสภาพแวดล้อมการพัฒนา โดยใช้สำเนาสำรองของฐานข้อมูลเซิร์ฟเวอร์โครงการปัจจุบัน
-
เวลาว่าระยะเวลาที่ใช้ในสภาพแวดล้อมการพัฒนาสคริปต์เสร็จสมบูรณ์ เวลาที่จำเป็นให้ลบสคริปต์เสร็จสมบูรณ์ขึ้นอยู่กับ 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 ซึ่งแสดงไว้ในส่วน "นำไปใช้กับ"