Score:1

แก้ไขแล้ว: แก้ไขการล้างข้อมูลบนเซิร์ฟเวอร์ WSUS หยุดทำงานเมื่อลบการอัปเดตที่ไม่จำเป็น

ธง jp

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
และเรียกใช้ตัวช่วยสร้างทีละตัว
Michael Hampton avatar
cz flag
[โพสต์ความรู้ของคุณเอง](/help/self-answer) เป็นเรื่องปกติ แต่ควรจัดรูปแบบเป็นคำถามและคำตอบ โดยมีคำถามด้านบนและคำตอบด้านล่าง
BitWrangler avatar
jp flag
ข้อสังเกต. โพสต์แรก

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา