IBM FileNet P8, Version 5.2.1            

Deleting a sweep job fails when there are a large number of sweep result records

Attempts to delete a bulk move content job, a retention update job, a thumbnail generation job, or a custom sweep job fails when the job has a large number of sweep result records associated with it.

Large numbers of sweep results can occur when a sweep job that is configured with the sweep mode set to Preview is run and when the filter expression and target class resolve to a large set of affected objects. Large numbers of sweep results can also occur when the sweep job is configured to record failures and the operation that is associated with the sweep job generates a high percentage of errors.

Symptoms

The system fails to respond for several minutes or more when you attempt to delete a sweep job, after which an error results. If the operation is started from the Content Platform Engine administration console, the progress indicator remains on the screen for an extended period, followed by an error window that signals that the operation failed.
The error window contains the following message:
FNRAC100BE
The object_name object was not deleted.
Explanation: You do not have the necessary permissions to delete this object.
User Response: Refresh the object and try again, or contain your user administrator to modify the object permissions.

Exception Details:
com.filenet.api.exception.EngineRuntimeException: 
FNRCD0009E: DB_ERROR: The database access failed with the following error: ErrorCode -964, 
Message 'DB2 SQL Error: SQLCODE=-964, SQLSTATE=57011, SQLERRMC=null, DRIVER=4.3.111' 
Unable to delete object {7F9B0D66-AE60-4AE4-AB7E-098190BFCECF} in enum property SweepResults. 
failedBatchItem=0 errorStack={
at com.filenet.engine.persist.PersisterBase.doDeletionAction(PersisterBase.java:2036)
at com.filenet.engine.persist.IndependentPersister.preDelete(IndependentPersister.java:1308)
at com.filenet.engine.persist.IndependentPersister.preExecuteChange(IndependentPersister.java:610)
at com.filenet.engine.persist.SubscribablePersister.preExecuteChange(SubscribablePersister.java:226)
at com.filenet.engine.persist.SweepPersister.preExecuteChange(SweepPersister.java:101)
at com.filenet.engine.persist.SweepJobPersister.preExecuteChange(SweepJobPersister.java:47)
... (remainder of stack trace truncated for brevity)

Causes

The lifetime of sweep result objects is dependent on the parent sweep job object to which they belong. Thus, deleting a sweep job object also requires deleting all related sweep result objects, and all the deletions must occur within the context of a single transaction. The application server transaction coordinator enforces a global time limit for all transactions and terminates and rolls back any transaction that runs longer than the established limit. Such timeouts can occur when you delete a sweep job that has a large number of sweep result objects. This results in the entire transaction being rolled back, causing all deletions to fail. The definition of "large number" depends on the setting of the global transaction time limit for the system in question and its capacity, but a good bench mark figure is in the range of 10,000 or more sweep results for a single sweep job.

Resolving the problem

The solution to this problem is to delete the sweep result records in one or more separate operations before you delete the parent sweep job. There are two possible approaches to this solution. The first is to use the administration console to delete the sweep result objects manually. This can be accomplished by navigating to the sweep result tab for the sweep job object that you want to delete, selecting a subset of the sweep result objects, and clicking Delete. Repeat this process until all the sweep result objects are deleted, or until a sufficient number are deleted to allow the parent sweep job to be deleted without exceeding the transaction timeout limit.

Deleting sweep result objects manually can be a long and tedious process and is often not practical when there are many sweep result objects to delete. An alternative is to use a disposal policy to delete the sweep results.

Use the following settings when you create the disposal policy:
  • Target Class = Job Sweep Result
  • Sweep mode = Normal
  • Filter Expression = "ControllingObject = OBJECT('{BD4BE72E-C4F9-4F24-B8B5-F1627AEF6573}')"

The Globally Unique Identifier (GUID) that appears in the previous example expression is for illustration purposes only. It must be replaced by the unique identifier of the sweep job that you intend to delete. You can get this identifier from the properties tab of the sweep job you want to delete.

Important: Disposal policies operate with elevated privileges, and extreme caution must be exercised to avoid deleting objects unintentionally. An incorrect setting for the target class or the filter expression might result in accidentally deleting objects that you do not intend to delete.

After the disposal policy completes at least one full sweep iteration and the current processed object count is greater than or equal to the number of sweep result objects, the sweep job can be deleted. The disposal policy can also be deleted at this time.



Last updated: March 2016
p8pct046.htm

© Copyright IBM Corporation 2016.