WSUS เป็นสิ่งที่เลวร้ายสำหรับผู้ดูแลระบบไอทีทุกคน คุณพบเธรดทั้งหมดกี่เธรดที่มีปัญหาเดียวกัน - ตัวช่วยสร้างการล้างข้อมูลบนเซิร์ฟเวอร์ล้มเหลว ข้อความด้านล่างใช้ได้สำหรับฉัน
ฉันได้ลองใช้สคริปต์ SQL มากมายทั้งจาก Microsoft และในสาธารณสมบัติ ทั้งหมดนี้ให้ผลลัพธ์ที่หลากหลาย สัปดาห์ที่แล้ว เซิร์ฟเวอร์ WSUS ของเราเริ่มไอขนเฟอร์บอลอีกครั้ง ดังนั้นฉันจึงจ่ายเงินและเปิดตั๋วสนับสนุน ข้อความด้านล่างตรงตามที่ได้รับจากฝ่ายสนับสนุนของ MS ในกรณีของฉัน ขั้นตอนที่ 8 ใช้เวลากว่าวันครึ่งจึงจะเสร็จสมบูรณ์ และถึงแม้จะมีข้อผิดพลาดอยู่บ้างก็ตาม ฉันเพิกเฉยต่อข้อผิดพลาดเหล่านั้น ขั้นตอนที่ 9 นั้นรวดเร็ว แต่ก็มีข้อผิดพลาดสองสามข้อเช่นกัน ฉันไม่สนใจข้อผิดพลาดเหล่านั้นเช่นกัน (ข้อผิดพลาดการหยุดชะงัก) เมื่อเสร็จแล้ว ฉันรันตัวช่วยสร้างการล้างข้อมูลบนเซิร์ฟเวอร์อีกครั้ง และมันก็ทำงานได้อย่างสมบูรณ์แบบ ทั้งหมดทำงานภายใน SQL Server Management Studio และใช้ WID
นี่ไม่ใช่คำถาม แต่เป้าหมายของฉันคือพยายามช่วยผู้ดูแลระบบคนอื่นๆ แก้ไขปัญหา WSUS ที่เรื้อรังเหล่านี้ ระยะทางของคุณอาจมาก - ฉันหวังว่าสิ่งนี้จะช่วยคุณได้
โปรดปฏิบัติตามขั้นตอนที่ระบุไว้ด้านล่าง:
--------------------------------------------- --------------------------------------------- ----------------------------------------
1) การจัดทำดัชนีใหม่:
ใช้ SUSDB;
ไป
ตั้งค่า NOCOUNT บน;
-- สร้างใหม่หรือจัดระเบียบดัชนีใหม่ตามระดับการกระจายตัว
ประกาศ @work_to_do ตาราง (
int คัดค้าน
ดัชนี int
ความหนาแน่นของหน้าลอย
ลอยกระจายตัว
, ตัวเลข int
)
ประกาศ @objectid int;
ประกาศ @indexid int;
ประกาศ @schemaname nvarchar(130);
ประกาศ @objectname nvarchar(130);
ประกาศ @indexname nvarchar(130);
ประกาศ @numrows int
ประกาศ @ความหนาแน่นลอย;
ประกาศ @ การแยกส่วนลอย;
ประกาศ @command nvarchar(4000);
ประกาศบิต @fillfactorset
ประกาศ @numpages int
-- เลือกดัชนีที่จะต้องมีการจัดระเบียบตามต่อไปนี้
-- * ความหนาแน่นของหน้าต่ำ
-- * การกระจายตัวภายนอกสูงเมื่อเทียบกับขนาดดัชนี
พิมพ์ 'การประมาณการการกระจายตัว: เริ่มต้น ' + แปลง (nvarchar, getdate (), 121)
INSERT @work_to_do
เลือก
ฉ.object_id
, index_id
, avg_page_space_used_in_percent
, avg_fragmentation_in_percent
, record_count
จาก
sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'SAMPLED') เป็น f
ที่ไหน
(f.avg_page_space_used_in_percent < 85.0 และ f.avg_page_space_used_in_percent/100.0 * page_count < page_count - 1)
หรือ (f.page_count > 50 และ f.avg_fragmentation_in_percent > 15.0)
หรือ (f.page_count > 10 และ f.avg_fragmentation_in_percent > 80.0)
พิมพ์ 'จำนวนดัชนีที่จะสร้างใหม่: ' + cast(@@ROWCOUNT as nvarchar(20))
พิมพ์ 'การประเมินการกระจายตัว: สิ้นสุด ' + แปลง (nvarchar, getdate (), 121)
เลือก @numpages = ผลรวม (ps.used_page_count)
จาก
@work_to_do AS fi
INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id และ fi.indexid = i.index_id
INNER JOIN sys.dm_db_partition_stats AS ps บน i.object_id = ps.object_id และ i.index_id = ps.index_id
-- ประกาศเคอร์เซอร์สำหรับรายการดัชนีที่จะประมวลผล
ประกาศ curIndexes เคอร์เซอร์สำหรับ SELECT * จาก @work_to_do
-- เปิดเคอร์เซอร์
เปิด curIndexes
- วนซ้ำผ่านดัชนี
ในขณะที่ (1=1)
เริ่ม
ดึงข้อมูลถัดไปจาก curIndexes
INTO @objectid, @indexid, @density, @fragmentation, @numrows;
ถ้า @@FETCH_STATUS < 0 BREAK;
เลือก
@objectname = QUOTENAME(o.name)
, @schemaname = QUOTENAME(s.name)
จาก
sys.objects AS o
INNER JOIN sys.schemas เป็น ON s.schema_id = o.schema_id
ที่ไหน
o.object_id = @objectid;
เลือก
@indexname = QUOTENAME(ชื่อ)
, @fillfactorset = กรณี fill_factor เมื่อ 0 แล้ว 0 อื่น ๆ 1 สิ้นสุด
จาก
sys.indexes
ที่ไหน
object_id = @objectid และ index_id = @indexid;
IF ((@density BETWEEN 75.0 AND 85.0) AND @fillfactorset = 1) หรือ (@fragmentation < 30.0)
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' จัดโครงสร้างใหม่';
อื่น ๆ ถ้า @numrows >= 5,000 และ @fillfactorset = 0
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' สร้างใหม่ด้วย (FILLFACTOR = 90)';
อื่น
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' สร้างใหม่';
พิมพ์ แปลง (nvarchar, getdate (), 121) + N' กำลังดำเนินการ: ' + @command;
EXEC (@คำสั่ง);
พิมพ์ converter(nvarchar, getdate(), 121) + N' Done.';
จบ
-- ปิดและยกเลิกการจัดสรรเคอร์เซอร์
ปิด curIndexes;
จัดสรร curIndexes;
หากมีอยู่ (เลือก * จาก @work_to_do)
เริ่ม
พิมพ์ 'จำนวนหน้าโดยประมาณในดัชนีที่แยกส่วน:' + cast(@numpages as nvarchar(20))
เลือก @numpages = @numpages - ผลรวม(ps.used_page_count)
จาก
@work_to_do AS fi
INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id และ fi.indexid = i.index_id
INNER JOIN sys.dm_db_partition_stats AS ps บน i.object_id = ps.object_id และ i.index_id = ps.index_id
พิมพ์ 'จำนวนหน้าที่ว่างโดยประมาณ:' + cast(@numpages as nvarchar(20))
จบ
ไป
--Update สถิติทั้งหมด
พิมพ์ 'กำลังอัปเดตสถิติทั้งหมด' + แปลง (nvarchar, getdate (), 121)
EXEC sp_updatestats
พิมพ์ 'เสร็จสิ้นการอัปเดตสถิติ' + แปลง (nvarchar, getdate (), 121)
ไป
--------------------------------------------- -----------------------------------
2) เรียกใช้แบบสอบถามด้านล่างเพื่อรับจำนวนการอัปเดตที่ถูกแทนที่
เลือก UpdateID จาก vwMinimalUpdate โดยที่ IsSuperseded = 1 และปฏิเสธ = 0
--------------------------------------------- ------------------------------------
3) เรียกใช้แบบสอบถามด้านล่างเพื่อลบการอัปเดตที่ถูกแทนที่ทั้งหมดและเรียกใช้ตัวช่วยสร้างการล้างข้อมูลบนเซิร์ฟเวอร์
ประกาศ @var1 ตัวระบุเฉพาะ
ประกาศ @msg nvarchar(100)
ประกาศเคอร์เซอร์ DU
สำหรับ
เลือก UpdateID จาก vwMinimalUpdate โดยที่ IsSuperseded = 1 และปฏิเสธ = 0
เปิด DU
ดึงข้อมูลถัดไปจาก DU เข้าสู่ @var1
ในขณะที่ (@@FETCH_STATUS > -1)
เริ่ม
RAISERROR(@msg,0,1) ด้วย NOWAIT exec spDeclineUpdate @updateID=@var1,@adminName=N'domain\user',@failIfReplica=1
ดึงข้อมูลถัดไปจาก DU เข้าสู่ @var1
จบ
ปิด
จัดสรร DU
--------------------------------------------- -------------------------------------
4) เรียกใช้แบบสอบถาม SQL ต่อไปนี้บน SQL กับฐานข้อมูล SUSDB เพื่อรับจำนวนการอัปเดตที่ต้องล้างข้อมูล:
ผู้บริหาร spGetObsoleteUpdatesToCleanup
--------------------------------------------- --------------------------------------
5) เรียกใช้แบบสอบถามด้านล่างบน SQL DB เพื่อลบการอัปเดต จากนั้นเรียกใช้ตัวช่วยสร้างการล้างข้อมูลบนเซิร์ฟเวอร์:
ประกาศ @var1 INT
ประกาศ @msg nvarchar(100)
สร้างตาราง #results (Col1 INT)
INSERT INTO #results(Col1) EXEC spGetObsoleteUpdatesToCleanup
ประกาศเคอร์เซอร์ WC
สำหรับ
เลือก Col1 จาก #results
เปิดห้องสุขา
ดึงข้อมูลถัดไปจาก WC
INTO @var1
ในขณะที่ (@@FETCH_STATUS > -1)
BEGIN SET @msg = 'กำลังลบ' + CONVERT(varchar(10), @var1)
RAISERROR(@msg,0,1) พร้อม EXEC spDeleteUpdate @localUpdateID=@var1
ดึงข้อมูลถัดไปจาก WC เข้าสู่ @var1 END
ปิด ห้องสุขา
จัดสรรห้องสุขา
วางตาราง #results
--------------------------------------------- ----------------------------------------
6) เรียกใช้แบบสอบถามด้านล่าง หากต้องการทราบว่าไม่มี การอัปเดตสำหรับ XML ความยาว 5,000 หรือมากกว่า:
เลือก
u.UpdateID,
r.RevisionNumber,
r.RevisionID,
lp.ชื่อเรื่อง,
pr.ExplicitlyDeployable เป็น ED
pr.UpdateType,
pr.CreationDate
จาก
tb อัปเดตคุณ
ภายในเข้าร่วม tbRevision r บน u.LocalUpdateID = r.LocalUpdateID
ภายในเข้าร่วม tbProperty pr บน pr.RevisionID = r.RevisionID
เข้าร่วมภายใน tbLocalizedPropertyForRevision lpr บน r.RevisionID = lpr.RevisionID
เข้าร่วมภายใน tbLocalizedProperty lp บน lpr.LocalizedPropertyID = lp.LocalizedPropertyID
ที่ไหน
lpr.LanguageID = 1033
และ r.RevisionID ใน (
เลือก
t1.RevisionID
จาก
tbBundleAll t1
ภายในเข้าร่วม tbBundleAtLeastOne t2 บน t1.BundledID=t2.BundledID
ที่ไหน
t2.RevisionID ใน (เลือก dbo.tbXml.RevisionID จาก dbo.tbXml
เข้าร่วมภายใน dbo.tbProperty บน dbo.tbXml.RevisionID = dbo.tbProperty.RevisionID
โดยที่ ISNULL(datalength(dbo.tbXml.RootElementXmlCompressed), 0) > 50000) และ ishidden=0 และ pr.ExplicitlyDeployable=1)
--------------------------------------------- ---------------------------------------------
7) หากมีการอัพเดต เราจะปฏิเสธด้วยเคอร์เซอร์ต่อไปนี้:
ประกาศ @UpdateID nvarchar(100)
ประกาศ @msg nvarchar(100)
สร้างตาราง #Updates (UpdateID nvarchar(100))
แทรกลงใน #Updates (UpdateID)
เลือก
u.UpdateID
จาก
tb อัปเดตคุณ
ภายในเข้าร่วม tbRevision r บน u.LocalUpdateID = r.LocalUpdateID
ภายในเข้าร่วม tbProperty pr บน pr.RevisionID = r.RevisionID
เข้าร่วมภายใน tbLocalizedPropertyForRevision lpr บน r.RevisionID = lpr.RevisionID
เข้าร่วมภายใน tbLocalizedProperty lp บน lpr.LocalizedPropertyID = lp.LocalizedPropertyID
ที่ไหน
lpr.LanguageID = 1033
และ r.RevisionID ใน (
เลือก
t1.RevisionID
จาก
tbBundleAll t1
ภายในเข้าร่วม tbBundleAtLeastOne t2 บน t1.BundledID=t2.BundledID
ที่ไหน
t2.RevisionID ใน (เลือก dbo.tbXml.RevisionID จาก dbo.tbXml
เข้าร่วมภายใน dbo.tbProperty บน dbo.tbXml.RevisionID = dbo.tbProperty.RevisionID
โดยที่ ISNULL(datalength(dbo.tbXml.RootElementXmlCompressed), 0) > 50000) และ ishidden=0 และ pr.ExplicitlyDeployable=1)
เคอร์เซอร์ประกาศ UC
สำหรับ
เลือก UpdateID จาก #Updates
เปิด UC
ดึงข้อมูลถัดไปจาก UC
เข้าสู่ @UpdateID
ในขณะที่(@@FETCH_STATUS > -1)
BEGIN SET @msg = 'กำลังปฏิเสธ' + @UpdateID
RAISERROR(@msg,0,1) พร้อม EXEC spDeclineUpdate @updateID=@UpdateID,@adminName=N'mach14\administrator',@failIfReplica=1
ดึงข้อมูลถัดไปจาก UC เข้าสู่ @UpdateID END
ปิด UC
จัดสรร UC
วางตาราง #Update
--------------------------------------------- --------------------------------------------
8) การปฏิเสธการอัปเดตไดรเวอร์:-
ใช้ SUSDB
ไป
เลือก UpdateTypeID จาก tbUpdateType โดยที่ Name = 'Driver'
ไป
ลบออกจาก tbrevisionlanguage โดยที่ revisionid in (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId in (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbProperty โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbLocalizedPropertyForRevision โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbFileForRevision โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbInstalledUpdateSufficientForPrerequisite โดยที่ prerequisiteid in (เลือก Prerequisiteid จาก tbPreRequisite โดยที่ revisionid in (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId in (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629')))
ลบออกจาก tbPreRequisite โดย revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbDeployment โดย revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbXml โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbPreComputedLocalizedProperty โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbDriver โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbFlattenedRevisionInCategory โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbRevisionInCategory โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbMoreInfoURLForRevision โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'))
ลบออกจาก tbRevision โดยที่ LocalUpdateId อยู่ (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629')
ลบออกจาก tbUpdateSummaryForAllComputers โดยที่ LocalUpdateId อยู่ (เลือก LocalUpdateId จาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629')
ลบออกจาก tbUpdate โดยที่ UpdateTypeID = 'D2CB599A-FA9F-4AE9-B346-94AD54EE0629'
9) ลบการอัปเดตที่ซ่อนอยู่:
เลือก * จาก tbUpdate โดยที่ isHidden = 1
อย
ลบออกจาก tbrevisionlanguage โดยที่ revisionid in (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId in (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbProperty โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbLocalizedPropertyForRevision โดยที่ revisionid in (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId in (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1 ))
ลบออกจาก tbFileForRevision โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1 ))
ลบออกจาก tbInstalledUpdateSufficientForPrerequisite โดยที่ prerequisiteid in (เลือก Prerequisiteid จาก tbPreRequisite โดยที่ revisionid in (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId in (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1 )))
ลบออกจาก tbPreRequisite โดยที่ revisionid in (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId in (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1 ))
ลบออกจาก tbDeployment โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId in (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1 ))
ลบออกจาก tbXml โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1 ))
ลบออกจาก tbPreComputedLocalizedProperty โดยที่ revisionid in (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId in (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1 ))
ลบออกจาก tbDriver โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbFlattenedRevisionInCategory โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbRevisionInCategory โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbMoreInfoURLForRevision โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbBundleAtLeastOne โดยที่บันเดิลใน (เลือกบันเดิลจาก tbBundleAll โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1)))
ลบออกจาก tbBundleAll โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbSecurityBulletinForRevision โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbKBArticleForRevision โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbRevisionSupersedesUpdate โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbBundleAtLeastOne โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbEulaProperty โดยที่ revisionid ใน (เลือก revisionid จาก tbRevision โดยที่ LocalUpdateId ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1))
ลบออกจาก tbRevision โดยที่ LocalUpdateId อยู่ (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1)
ลบออกจาก tbUpdateSummaryForAllComputers โดยที่ LocalUpdateId อยู่ (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1)
ลบออกจาก tbInstalledUpdateSufficientForPrerequisite โดยที่ LocalUpdateId อยู่ใน (เลือก LocalUpdateId จาก tbUpdate โดยที่ ishidden=1)
ลบออกจาก tbUpdate โดยที่ ishidden = 1
--------------------------------------------- --------------------------------------------- --------------------------
จากนั้นเปิดคอนโซล WSUS และไปที่ Options\Server Cleanup Wizard
และเรียกใช้ตัวช่วยสร้างทีละตัว