پاکسازی لیست Nintex workflow history و جدول dbo workflowprogress

نحوه پاکسازی لیست Nintex workflow history  بزرگ (اطلاعات قدیمی یا غیر الزامی)

اگر بیش از 5000 رکورد در لیست Nintex workflow history شما وجود دارد ممکن است نیاز به بررسی گزینه های دیگر برای پاکسازی این موارد داشته باشید زیرا ممکن است GUI عملیات پاکسازی را با شکست مواجه کند.

  • روش اول : پاکسازی لیست History

استفاده از    NWAdmin.exe –o PurgeHistoryListData

NWAdmin.exe به عنوان بخشی از نصب Nintex شما گنجانده شده است. در اینجا مثالی با استفاده از PurgeHistoryListData آورده شده است:

SharePoint 2013 Management Shell:

NWAdmin.exe –o PurgeHistoryListData -siteUrl http://yoursite.com/ -lastActivityBefore 2014-07-01 00:00 -state SELECT STATE

برای پاکسازی لیست Nintex workflow history ، وضعیت درحال اجرا، تکمیل، لغو،خطا یا همه وضعیت را مشخص کنید .  اگر –State خاموش باشد پیش فرض گزینه تکمیل می باشد.

از “-state All”  استفاده نکنید. فقط ورک فلوهای تکمیل شده را که نیازی به مرور سابقه آنها ندارید پاک کنید. اگر نمونه داده های در حال اجرا را حذف کنید دیگر قادر به ادامه نخواهد بود.

برای بدست آوردن قالب صحیح برای سوئیچ های -lastActivityBefore  و -lastActivityBeforeUTC  از این دستور در Power-Shell استفاده کنید:

Get-Date -Format -s

توجه داشته باشید:
PurgeHistoryListData باید برای هر سایت در مجموعه سایت شما که از گردش کار Nintex استفاده می کند،  اجرا شود. با استفاده از اسکریپت زیر می توانید سایتهایی را که دارای لیست های بزرگ history هستند در Sharepoint farm خود شناسایی کنید:

Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue
#Lists with values higher than threshold will be returned
[int]$threshold = 200
function Get-SPListCollection {
PARAM
(
[Parameter(ValueFromPipeline=$true)] [Microsoft.SharePoint.SPWeb] $SPWeb
)
BEGIN {
  }
END {
}
PROCESS {
  $SPWeb.Lists
  $SPWeb = $null
  [GC]::Collect()
}
}
$(Get-SPWebApplication) | Get-SPSite -Limit ALL | Get-SPWeb -Limit ALL | Get-SPListCollection | WHERE {$_.BaseTemplate -eq "WorkflowHistory"} | where {$_.ItemCount -ge $threshold} | FL ParentWeb, Title, ItemCount

اطلاعات بیشتر در مورد دستورات و سوئیچ های NWAdmin.exe  را  می توان در لیک زیر یافت:

اگر رویکرد   NWAdmin.exe PurgeHistoryListData نتواند آیتم ها را پاک کند، می توانید اسکریپت PowerShell را در زیر امتحان کنید.

  • روش دوم : پاکسازی لیست History

با استفاده از PowerShell  برای پاکسازی لیست Nintex workflow history می توانید اسکریپت را در اینجا بیابید:

این اسکریپت از صفحه بندی و فهرست بندی استفاده می کند تا به طور خاص هر آیتم را هدف قرار داده و آن را حذف کند. صفحه بندی کمک می کند تا با حذف تعداد x آیتم در یک زمان قبل از استراحت و شروع به کار دوباره، ترافیک  سرور SqL کاهش دهید. فهرست بندی Indexing امکان هدف قرار دادن آیتم ها را فراهم می کند بدون آنکه عملکرد بالا از شمارش کوئری and/or مجموعه بزرگی از آیتم ها باشد.

نحوه پاک کردن داده های جدول بزرگ dbo.WorkflowProgress

اگر در جدول Nintex dbo.WorkflowProgress  خود 5000.000 یا بیشتر رکورد دارید، باید به پیرایش برخی از رکوردها بپردازید.

می توانید با استفاده از گزینه های زیر این کار را انجام دهید.

هشدار :
پاک کردن dbo.WorkflowProgress را  فقط بعد از پاکسازی لیست Nintex workflow history انجام هید. انجام ندادن این کار، از پاک کردن آیتم ها موجود در لیست history با استفاده از دستور ” PurgeHistoryListData  ” جلوگیری می کند، مگر اینکه از کلید “-clearall” استفاده شود.

نحوه پاک کردن جدول dbo.WorkflowProgress  روش اول :

  • با استفاده از NWAdmin.exe –o PurgeWorkflowData

در اولین مرحله توصیه  می کنیم  از دستور NWAdmin.exe استفاده کنید. در اینجا مثالی با استفاده از عملیات PurgeWorkflowData آورده  شده است:

NWAdmin.exe -o PurgeWorkflowData -state SELECT STATE -url http://yoursite.com -lastActivityBeforeLocal 2014-07-01T00:00:00

برای حذف آیتم های لیست History برای گردشهای کاری، وضعیت درحال اجرا، تکمیل، لغو،خطا یا همه وضعیت را مشخص کنید .  اگر –State خاموش باشد گزینه پیش فرض “تکمیل” می باشد.

از “-state All”  استفاده نکنید. فقط ورک فلوهای تکمیل شده را که نیازی به مرور سابقه آنها ندارید پاک کنید. اگر نمونه داده های در حال اجرا را حذف کنید دیگر قادر به ادامه نخواهد بود.

نحوه پاک کردن جدول dbo.WorkflowProgress  روش دوم :

  •  استفاده از اسکریپت SQL برای پاکسازی سوابق

اگر NWAdmin.exe –o PurgeWorkflowData نتواند سوابق را از جدول dbo.WorkflowProgress پاک کند، توصیه بعدی ما استفاده از اسکریپت SQL زیر است:

در ابتدا شما نیاز به جمع آوری SiteID برای مجموعه سایت هایی که می خواهید داده ها را از آنها پاک کنید، دارید.برای این کار دستور Power-Shell زیر را اجرا کنید:

Get-SPSite -limit all | SELECT URL, ID, RootWeb

سپس عبارت زیر را برای بازیابی تعداد سوابق باقیمانده در هر مجموعه سایت اجرا کنید:

SQL :

SELECT COUNT (*)as RecordsPerSiteCollection,I.SiteID
FROM WorkflowInstance I 
inner join WorkflowProgress P
ON I.InstanceID = P.InstanceID 
--WHERE siteid = 'YOUR SITE COLLECTION GUID' --Update to your Site Collection ID
GROUP BY I.SiteID
ORDER BY COUNT(I.SiteID)
DESC
GO

در اینجا مثالی از خروجی این اسکریپت آورده شده است:

برای پاک کردن سوابق برای یک مجموعه سایت خاص با آخرین فعالیت قبل از تاریخ 01-07-2014 (فیلترهای بیشتر را در پایین از جمله انجام پاکسازی در هر سایت مشاهده کنید):

DECLARE @return_value int
EXEC @return_value = [dbo].[PurgeWorkflowData]
@SiteID='YOUR SITE COLLECTION GUID', --Update to your Site Collection ID
@LastActivityDate = '2014-07-01' --Setting lastworkflowactivity time, this is actions executed older than the date specified
SELECT 'Return Value' = @return_value
GO

برای محدود کردن اطلاعات حذف شده، می توانید از یک یا چند پارامتر زیر نیز استفاده کنید:

@workflowname <Exact Name of workflow>
@listid <GUID>
@state <##>--Running = 2, Completed = 4, Cancelled = 8, Error = 64
@instanceid <GUID>
@webid <GUID> --Site/Sub Site
@siteid <GUID> --Site Collection
@itemid <GUID>
@lastActivityDate <Date of last activity execution>
@initiator <UserName>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *