
For the Orphan instances to clean, please follow the below process.
Script is located here: https://github.com/souravmahato7/SQL/blob/SCORCH/SCORCH_Orphan_Data_Purge.sql
1. Take full backup of Orchestrator database.
– Need to stop the Runbook services on the Runbook servers.
2. Execute below SQL queries to check tables (Policyinstances, Objectinstances, Objectinstancedata, Events, Policy_publish_queue) :
Select Count(*) From POLICYINSTANCES WITH (NOLOCK)
Select Count(*) From OBJECTINSTANCES WITH (NOLOCK)
Select Count(*) From OBJECTINSTANCEDATA WITH (NOLOCK)
Select Count(*) From EVENTS WITH (NOLOCK)
Select Count(*) From POLICY_PUBLISH_QUEUE WITH (NOLOCK)
3. Execute below SQL queries to clean tables (Policyinstances, Objectinstances, Objectinstancedata, Events, Policy_publish_queue) if you see large number of rows in above SQL queries:
DELETE FROM POLICY_PUBLISH_QUEUE
GO
TRUNCATE TABLE EVENTS
TRUNCATE TABLE OBJECTINSTANCEDATA
TRUNCATE TABLE OBJECTINSTANCES
DELETE FROM POLICYINSTANCES
GO
4. After above query is executed successfully, execute below mentioned query to disable “Logging” for all Runbooks:
Before that I would suggest to take a note of all the policies for which logging is enabled. Please run the below query to get the details.
Select * from POLICIES where LogCommonData = 1
Select * from POLICIES where LogSpecificData = 1
Now you can run the below query to disable the logging.
update POLICIES set LogCommonData = 0 where LogCommonData = 1
update POLICIES set LogSpecificData = 0 where LogSpecificData = 1
5. After successful execution of above query, execute below SQL query to check orphaned Runbook instances:
Select
pinst.[UniqueID],
pinst.[PolicyID]
from
[dbo].[POLICYINSTANCES] AS pinst, [dbo].[POLICY_REQUEST_HISTORY] AS prq
where
pinst.[PolicyID] = prq.[PolicyID] AND
pinst.[SeqNumber] = prq.[SeqNumber] AND
pinst.[TimeEnded] IS NULL AND
prq.[Active] = 0
6. If output of above query is not blank, stop all running runbooks using below query:
use orchestrator
go
-- This section will cancel all active or pending jobs
DECLARE @JobId UNIQUEIDENTIFIER
DECLARE job_cursor CURSOR FOR
SELECT Id FROM [Microsoft.SystemCenter.Orchestrator.Runtime.Internal].Jobs
WHERE StatusId < 2
OPEN job_cursor
FETCH NEXT FROM job_cursor INTO @JobId
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC [Microsoft.SystemCenter.Orchestrator.Runtime].CancelJob @JobId, 'S-1-5-500'
FETCH NEXT FROM job_cursor INTO @JobId
END
CLOSE job_cursor
DEALLOCATE job_cursor
GO
7. After stopping all running runbooks, execute below query to clear orphaned runbook instances:
exec [Microsoft.SystemCenter.Orchestrator.Runtime.Internal].[ClearOrphanedRunbookInstances]
8. Run below SQL query to do log purging:
DECLARE @Completed bit
SET @Completed = 0
WHILE @Completed = 0 EXEC sp_CustomLogCleanup @Completed OUTPUT, @FilterType=1,@XEntries=0
9. Now, we need to check if orchestrator maintenance operation has been executed recently, for that use below SQL query:
SELECT
[m].[Name],
[m].[IsEnabled],
[m].[IntervalInSeconds],
[m].[LastExecutionTime]
FROM [Orchestrator].[Microsoft.SystemCenter.Orchestrator.Maintenance].[MaintenanceTasks] [m]
10. If output of above query states that maintenance operations have not executed recently, follow below procedure to execute maintenance operations:
a. Execute below SQL query:
ALTER QUEUE [Microsoft.SystemCenter.Orchestrator.Maintenance].MaintenanceServiceQueue WITH STATUS = ON
b. After above query, execute below query:
TRUNCATE TABLE [Microsoft.SystemCenter.Orchestrator.Internal].AuthorizationCache
c. After above query, execute below query:
EXEC [Microsoft.SystemCenter.Orchestrator.Maintenance].[EnqueueRecurrentTask] @taskName = 'Statistics'
EXEC [Microsoft.SystemCenter.Orchestrator.Maintenance].[EnqueueRecurrentTask] @taskName = 'Authorization'
EXEC [Microsoft.SystemCenter.Orchestrator.Maintenance].[EnqueueRecurrentTask] @taskName = 'ClearAuthorizationCache'
11. Execute below query again to check if maintenance operations are now executed recently:
SELECT
[m].[Name],
[m].[IsEnabled],
[m].[IntervalInSeconds],
[m].[LastExecutionTime]
FROM [Orchestrator].[Microsoft.SystemCenter.Orchestrator.Maintenance].[MaintenanceTasks] [m]
Note: Now we should see latest date.
12. Now you can again Enable the logging which were disable in step 4.
update POLICIES set LogCommonData = 1 where UniqueID in (‘XX0,’ XX1’,’ XX2)
update POLICIES set LogSpecificData = 1 where UniqueID in (‘XX0,’ XX3’,’ XX24)