Abonnieren

UiPath Automation Suite

Die Anleitung für die UiPath Automation Suite

Durchführen einer Datenbankwartung

Es ist wichtig, dass Sie Ihre Datenbanken frei von Stördaten halten. Hierfür empfehlen wir Folgendes:

Verwenden der SQL Server-Wartungslösung


SQL Server Maintenance Solution is a set of scripts that enable you to run backups, integrity checks, and index and statistics maintenance on all editions of Microsoft SQL Server, starting with the 2005 version. Please see this GitHub project for more information.

Backing up the database


Wir empfehlen, dass Sie reguläre Sicherungen der SQL Server-Datenbank implementieren, beispielsweise wöchentliche Sicherungen oder tägliche inkrementelle Sicherungen.

Additionally, we recommend using the DatabaseBackup stored procedure that is created using the script at this location.

Deleting old data periodically


Gemeinsame Suite-Funktionen

Erstellen Sie eine separate Datenbank, in der Sie Elemente speichern, bevor Sie sie löschen. Diese Datenbank fungiert als Archiv für die Elemente, die Sie möglicherweise aus bestimmten Gründen speichern müssen, z. B. Audits.

  1. Erstellen Sie eine neue Datenbank mit beispielsweise dem Namen UiPathArchives:
create database UiPathArchives
  1. Erstellen Sie die folgenden Sicherungstabellen:
    2.1. ArchiveAuditEvent mit der gleichen Struktur wie die AuditEvent-Tabelle:
SELECT * INTO [UiPathArchives].[dbo].[ArchiveAuditEvent] from [accountmanagementdb].[adt].[AuditEvent] where 1 = 2
  1. Archiven Sie die Daten:
    3.1. Archivieren Sie die Prüfungsdatensätze
DECLARE @NumberOfDaysToKeep INT
DECLARE @CurrentDate DATETIME

-- Specify the number of days
SET @NumberOfDaysToKeep = 60
-- Archive the list of audit event records that you want to delete
SET @CurrentDate = GetDate()
BEGIN TRANSACTION
INSERT INTO [UiPathArchives].[dbo].[ArchiveAuditEvent]
SELECT
[Id],[CreatedOn],[Version],[OrganizationId],[Source],[Category],[Action],[IsUserEvent],
[UserId],[FullName],[Email],[DetailsVersion],[Details],[OperationId]
FROM [adt].[AuditEvent]
WHERE DateDiff(day, CreatedOn, @CurrentDate) > @NumberOfDaysToKeep
-- Delete the audit events
DELETE FROM [adt].[AuditEvent]
WHERE EXISTS (SELECT 1 FROM [UiPathArchives].[dbo].[ArchiveAuditEvent] WHERE Id = [adt].[AuditEvent].[Id])
COMMIT TRANSACTION

Alte Daten werden in diese Archive kopiert, bevor sie gelöscht werden, wenn die unten genannte Abfrage verwendet wird.

  1. Löschen Sie Daten aus der Tabelle.

🚧

Wichtig!

Passen sie die folgenden Skripts an Ihre Umgebung an, bevor Sie sie ausführen.

3.1. Prüfungsereignisse

declare @NumberOfDaysToKeep int
declare @CurrentDate datetime

-- Specify the number of days
SET @NumberOfDaysToKeep = 60
-- Create temporary table with the list of audit event records that you want to delete
SET @CurrentDate = GetDate()
SELECT
[Id],[CreatedOn],[Version],[OrganizationId],[Source],[Category],[Action],[IsUserEvent],
[UserId],[FullName],[Email],[DetailsVersion],[Details],[OperationId]
INTO #TempAuditRecordsToDelete
FROM [adt].[AuditEvent]
WHERE DateDiff(day, CreatedOn, @CurrentDate) > @NumberOfDaysToKeep
-- Review the audit event records to be deleted
SELECT * FROM #TempAuditRecordsToDelete
-- Delete the audit events
BEGIN TRANSACTION
DELETE FROM [adt].[AuditEvent]
WHERE EXISTS (SELECT 1 FROM #TempAuditRecordsToDelete WHERE Id = [adt].[AuditEvent].[Id])
DROP TABLE #TempAuditRecordsToDelete
COMMIT TRANSACTION

Identity Server

Erstellen Sie eine separate Datenbank, in der Sie Elemente speichern, bevor Sie sie löschen. Diese Datenbank fungiert als Archiv für die Elemente, die Sie möglicherweise aus bestimmten Gründen speichern müssen, z. B. Audits.

  1. Erstellen Sie eine neue Datenbank mit beispielsweise dem Namen UiPathIdentityArchives:
create database UiPathIdentityArchives
  1. Erstellen Sie die folgenden Sicherungstabellen:
    2.1. ArchiveLoginAttempts mit der gleichen Struktur wie die UserLoginAttempts-Tabelle:
select * into [UiPathIdentityArchives].[dbo].[ArchiveUserLoginAttempts] from [UiPath].[dbo].[UserLoginAttempts] where 1=2

Alte Daten werden in diese Archive kopiert, bevor sie gelöscht werden, wenn die unten genannte Abfrage verwendet wird.

  1. Löschen Sie Daten aus der Tabelle.

🚧

Wichtig!

Passen sie die folgenden Skripts an Ihre Umgebung an, bevor Sie sie ausführen.

3.1. Anmeldungsversuche von Benutzern

Um Anmeldeversuche zu löschen, die älter als 60 Tage sind, verwenden Sie z. B. die Abfrage unten. Dies kann manuell oder geplant in einem SQL Server-Auftrag ausgeführt werden.

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
if OBJECT_ID('[UiPathIdentityArchives].[dbo].[UserLoginAttemps]') = NULL 
  begin select * into [UiPathIdentityArchives].[dbo].[UserLoginAttemps] from [identity].UserLoginAttempts where 1=2 end
begin transaction
  set identity_insert [UiPathIdentityArchives].[dbo].[UserLoginAttemps] on
  insert into [UiPathIdentityArchives].[dbo].[UserLoginAttemps] ([Id],[PartitionId],[UserId],[UserNameOrEmailAddress],[ClientIpAddress],[ClientName],[BrowserInfo],[Result],[CreationTime],[AuthenticationProvider],[PartitionName])
    select [Id],[PartitionId],[UserId],[UserNameOrEmailAddress],[ClientIpAddress],[ClientName],[BrowserInfo],[Result],[CreationTime],[AuthenticationProvider],[PartitionName]
      from [identity].UserLoginAttempts where DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
  delete from [identity].UserLoginAttempts where DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
commit transaction

Orchestrator

Erstellen Sie eine separate Datenbank, in der Sie Elemente speichern, bevor Sie sie löschen. Diese Datenbank fungiert als Archiv für die Elemente, die Sie möglicherweise aus bestimmten Gründen speichern müssen, z. B. Audits.

  1. Erstellen Sie eine neue Datenbank mit beispielsweise dem Namen UiPathOrchestratorArchives:
create database UiPathOrchestratorArchives
  1. Erstellen Sie die folgenden Sicherungstabellen:
    2.1. ArchiveLogs mit der gleichen Struktur wie die Logs-Tabelle:
select * into [UiPathOrchestratorArchives].[dbo].[ArchiveLogs] from [UiPath].[dbo].[Logs] where 1=2

2.2. ArchiveQueueItems, ArchiveQueueItemEvents und ArchiveQueueItemComments mit der gleichen Struktur wie die Tabellen QueueItems, QueueItemsEvents und QueueItemsComments:

select * into [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItems] from
[UiPath].[dbo].[QueueItems] where 1=2
select * into [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItemEvents] from [UiPath].[dbo].[QueueItemEvents] where 1=2
select * into [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItemComments] from [UiPath].[dbo].[QueueItemComments] where 
1=2

2.3. ArchiveRobotLogs mit der gleichen Struktur wie die RobotLogs‑Tabelle:

select * into [UiPathOrchestratorArchives].[dbo].[ArchiveRobotLicenseLogs] from [UiPath].[dbo].[RobotLicenseLogs] where 1=2

2.4. TenantNotificationsArchive und UserNotificationsArchive mit der gleichen Struktur wie die TenantNotifications- und UserNotifications-Tabellen:

select * into [UiPathOrchestratorArchives].[dbo].[ArchiveTenantNotifications] from
[UiPath].[dbo].[TenantNotifications] where 1=2
select * into [UiPathOrchestratorArchives].[dbo].[ArchiveUserNotifications] from [UiPath].[dbo].[UserNotifications] where 1=2

2.5. ArchiveJobs mit der gleichen Struktur wie die Jobs-Tabelle:

select * into [UiPathOrchestratorArchives].[dbo].[ArchiveJobs] from [UiPath].[dbo].[Jobs] where 1=2

2.5. ArchiveAuditLogs und ArchiveAuditLogEntities mit der gleichen Struktur wie die AuditLog- und AuditLogEntities-Tabellen:

select * into [UiPathOrchestratorArchives].[dbo].[ArchiveAuditLogs] from
[UiPath].[dbo].[AuditLogs] where 1=2
select * into [UiPathOrchestratorArchives].[dbo].[ArchiveAuditLogEntities] from [UiPath].[dbo].[AuditLogEntities] where 1=2

2.6. ArchiveTasks mit der gleichen Struktur wie die Tasks-Tabelle:

select * into [UiPathOrchestratorArchives].[dbo].[ArchiveTasks] from [UiPath].[dbo].[Tasks] where 1=2

Alte Daten werden in diese Archive kopiert, bevor sie gelöscht werden, wenn unten genannte Abfragen verwendet werden.

  1. Löschen Sie Daten aus den Tabellen.

🚧

Wichtig!

Passen sie die folgenden Skripts an Ihre Umgebung an, bevor Sie sie ausführen.

3.1. Warteschlangenobjekte

Um erfolgreich verarbeitete Warteschlangenelemente und zugehörige Ereignisse und Kommentare von (status = 3) zu löschen, die älter als 60 Tage sind, verwenden Sie z. B. folgende Abfrage unten. Optional können Sie eine where-Klausel für TenantId beifügen.

Dies kann manuell oder geplant in einem SQL Server-Job ausgeführt werden.

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
-- create temp table with list of IDs that we want to delete
select ID as IdToDelete into #TempDeletedIds from QueueItems
where status=3
-- and TenantId = 1
-- and ReviewStatus != 0
and DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
-------------------- QueueItemEvents
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItemEvents] on
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItemEvents]
([Id],[TenantId],[OrganizationUnitId],[QueueItemId],[TimeStamp],[IsDeleted],[DeleterUserId],[DeletionTime],[Action],[UserId],[Status],[ReviewStatus],[ReviewerUserId],[CreationTime],[CreatorUserId])
select
[Id],[TenantId],[OrganizationUnitId],[QueueItemId],[TimeStamp],[IsDeleted],[DeleterUserId],[DeletionTime],[Action],[UserId],[Status],[ReviewStatus],[ReviewerUserId],[CreationTime],[CreatorUserId]
from [UiPath].[dbo].[QueueItemEvents]
where Exists (select 1 from #TempDeletedIds where IdToDelete = QueueItemId)
delete from [UiPath].[dbo].[QueueItemEvents]
where Exists (select 1 from #TempDeletedIds where IdToDelete = QueueItemId)
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItemEvents] off
-------------------- QueueItemComments
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItemComments] on
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItemComments]
([Id],[TenantId],[OrganizationUnitId],[QueueItemId],[Text],[IsDeleted],[DeleterUserId],[DeletionTime],[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId])
select
[Id],[TenantId],[OrganizationUnitId],[QueueItemId],[Text],[IsDeleted],[DeleterUserId],[DeletionTime],[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId]
from [UiPath].[dbo].[QueueItemComments]
where Exists (select 1 from #TempDeletedIds where IdToDelete = QueueItemId)
delete from [UiPath].[dbo].[QueueItemComments]
where Exists (select 1 from #TempDeletedIds where IdToDelete = QueueItemId)
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItemComments] off
-------------------- QueueItems
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItems] on
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItems]
([Id],[Priority],[QueueDefinitionId],[Key],[Status],[IsDeleted],[DeleterUserId],[DeletionTime],[ReviewStatus],[RobotId],[StartProcessing],[EndProcessing],[SecondsInPreviousAttempts],[AncestorId],[RetryNumber],[SpecificData],[TenantId],[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId],[DeferDate],[DueDate],[Progress],[Output],[OrganizationUnitId],[RowVersion],[ProcessingExceptionType],[HasDueDate],[Reference],[ReviewerUserId],[ProcessingExceptionReason],[ProcessingExceptionDetails],[ProcessingExceptionAssociatedImageFilePath],[ProcessingExceptionCreationTime],[CreatorJobId],[ExecutorJobId],[AnalyticsData],[RiskSlaDate]
)
select
[Id],[Priority],[QueueDefinitionId],[Key],[Status],[IsDeleted],[DeleterUserId],[DeletionTime],[ReviewStatus],[RobotId],[StartProcessing],[EndProcessing],[SecondsInPreviousAttempts],[AncestorId],[RetryNumber],[SpecificData],[TenantId],[LastModificationTime],[LastModifierUserId],
[CreationTime],[CreatorUserId],[DeferDate],[DueDate],[Progress],[Output],[OrganizationUnitId],NULL,[ProcessingExceptionType],[HasDueDate],[Reference],[ReviewerUserId],[ProcessingExceptionReason],[ProcessingExceptionDetails],[ProcessingExceptionAssociatedImageFilePath],[ProcessingExceptionCreationTime],[CreatorJobId],[ExecutorJobId],[AnalyticsData],[RiskSlaDate]
from [UiPath].[dbo].[QueueItems]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[QueueItems].[Id])
delete from [UiPath].[dbo].[QueueItems]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[QueueItems].[Id])
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveQueueItems] off
drop table #TempDeletedIds
commit transaction

3.2. Protokollierte Meldungen

Es wird empfohlen, protokollierte Meldungen zu löschen, die älter als 60 Tage sind. Die folgende Beispielabfrage löscht alte Meldungen mit dem Level Info und älter als 60 Tage. Passen Sie die Abfrage an Ihre Anforderungen an, indem Sie den Parameter @NumberOfDaysToKeep anpassen oder where-Klauseln für Level und TenantId hinzufügen.

📘

Hinweis:

Wenn Sie die gelöschten Protokolle nicht archivieren möchten, entfernen Sie einfach die Kopierklausel:
insert into [ArchiveLogs] select from [Logs].

Dies kann manuell oder geplant in einem SQL Server-Job ausgeführt werden.

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveLogs] on
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveLogs]
([Id],[OrganizationUnitId],[TenantId],[TimeStamp],[Level],[WindowsIdentity]
,[ProcessName],[JobKey],[RobotName],[Message],[RawMessage],[MachineId],[UserKey],[HostMachineName])
select
[Id],[OrganizationUnitId],[TenantId],[TimeStamp],[Level],[WindowsIdentity]
,[ProcessName],[JobKey],[RobotName],[Message],[RawMessage],[MachineId],[UserKey],[HostMachineName]
from [UiPath].[dbo].[Logs]
where 1=1
-- and level = 2
/*
  0 = Verbose, 1 = Trace, 2 = Info,
  3 = Warn, 4 = Error, 5 = Fatal
*/
-- and TenantId = 1 -- default tenant
and DateDiff(day, TimeStamp, GetDate()) > @NumberOfDaysToKeep
delete from [UiPath].[dbo].[Logs]
where 1=1
-- and level = 2
/*
  0 = Verbose, 1 = Trace, 2 = Info,
  3 = Warn, 4 = Error, 5 = Fatal
*/
-- and TenantId = 1 -- default tenant
and DateDiff(day, TimeStamp, GetDate()) > @NumberOfDaysToKeep
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveLogs] off
commit transaction

3.3. RobotLicense-Protokolle

Es wird empfohlen, die Elemente in der Tabelle RobotLicenseLogs zu löschen, die älter als 60 Tage sind. In der folgenden Beispielabfrage werden Elemente gelöscht, die älter als 60 Tage sind. Passen Sie die Abfrage an Ihre Anforderungen an, indem Sie den Parameter @NumberOfDaysToKeep ändern oderwhere-Klauseln für TenantId hinzufügen.

📘

Hinweis:

Wenn Sie die gelöschten Protokolle nicht archivieren möchten, entfernen Sie einfach die Kopierklausel:
insert into [ArchiveRobotLicenseLogs] select from [RobotLicenseLogs].

Dies kann manuell oder geplant in einem SQL Server-Job ausgeführt werden.

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveRobotLicenseLogs] on
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveRobotLicenseLogs]
([Id],[RobotId],[StartDate],[EndDate],[RobotType],[TenantId],[Scope],[Key],[Slots],
[LicenseKey],[Properties],[ErrorCode],[JobKey])
select
[Id],[RobotId],[StartDate],[EndDate],[RobotType],[TenantId],[Scope],[Key],[Slots],
[LicenseKey],[Properties],[ErrorCode],[JobKey]
from [UiPath].[dbo].[RobotLicenseLogs]
where EndDate is not null
-- and TenantId = 1 -- default tenant
and DateDiff(day, EndDate, GetDate()) > @NumberOfDaysToKeep
delete from [UiPath].[dbo].[RobotLicenseLogs]
where EndDate is not null
-- and TenantId = 1 -- default tenant
and DateDiff(day, EndDate, GetDate()) > @NumberOfDaysToKeep
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveRobotLicenseLogs] off
commit transaction

3.4. Bereinigung von TenantNotifications/UserNotifications

Es wird empfohlen, die Elemente, die älter als 60 Tage sind, in Ihren TenantNotifications- und UserNotifications-Tabellen zu löschen. In der folgenden Beispielabfrage werden Elemente gelöscht, die älter als 60 Tage sind. Passen Sie die Abfrage an Ihre Anforderungen an, indem Sie den Parameter @NumberOfDaysToKeep ändern oder where-Klauseln für TenantId hinzufügen.

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
-- create a temp table with list of IDs that we want to delete
select ID as IdToDelete into #TempDeletedIds from TenantNotifications
where 1=1
-- and TenantId = 1
and DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
-------------------- UserNotifications
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveUserNotifications]
([Id],[UserId],[TenantNotificationId],[State],[CreationTime],[TenantId])
select
[Id],[UserId],[TenantNotificationId],[State],[CreationTime],[TenantId]
from [UiPath].[dbo].[UserNotifications]
where Exists (select 1 from #TempDeletedIds where IdToDelete = TenantNotificationId)
delete from [UiPath].[dbo].[UserNotifications]
where Exists (select 1 from #TempDeletedIds where IdToDelete = TenantNotificationId)
-------------------- TenantNotifications
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveTenantNotifications]
([Id],[TenantId],[NotificationName],[Data],[DataTypeName],[EntityTypeName],
[EntityTypeAssemblyQualifiedName],[EntityId],[Severity],[CreationTime],[CreatorUserId])
select
[Id],[TenantId],[NotificationName],[Data],[DataTypeName],[EntityTypeName]
,[EntityTypeAssemblyQualifiedName],[EntityId],[Severity],[CreationTime],[CreatorUserId]
from [UiPath].[dbo].[TenantNotifications]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[TenantNotifications].[Id])
delete from [UiPath].[dbo].[TenantNotifications]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[TenantNotifications].[Id])
drop table #TempDeletedIds
commit transaction

3.5 Bereinigung von Aufträgen

Es wird empfohlen, die Elemente in der Tabelle Jobs zu löschen, die älter als 60 Tage sind. In der folgenden Beispielabfrage werden Elemente gelöscht, die älter als 60 Tage sind. Passen Sie die Abfrage an Ihre Anforderungen an, indem Sie den Parameter @NumberOfDaysToKeep ändern oderwhere-Klauseln für TenantId hinzufügen.

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveJobs] on
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveJobs]
([Id],[TenantId],[Key],[StartTime],[EndTime],[State],[RobotId],[ReleaseId]
,[Source],[BatchExecutionKey],[Info],[IsDeleted],[DeleterUserId],[DeletionTime]
,[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId]
,[OrganizationUnitId],[StartingScheduleId],[Type],[InputArguments],[OutputArguments],[HostMachineName],[PersistenceId],[ResumeVersion],[SuspendBlobType],[PersistenceLocationVersion],[StopStrategy],[ReleaseVersionId],[EntryPointPath],[JobPriority],[RuntimeType],[MachineId],[RequiresUserInteraction],[ServiceUserName],[ResumeTime],[Reference])
select
[Id],[TenantId],[Key],[StartTime],[EndTime],[State],[RobotId],[ReleaseId]
,[Source],[BatchExecutionKey],[Info],[IsDeleted],[DeleterUserId],[DeletionTime]
,[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId]
,[OrganizationUnitId],[StartingScheduleId],[Type],[InputArguments],[OutputArguments],[HostMachineName],[PersistenceId],[ResumeVersion],[SuspendBlobType],[PersistenceLocationVersion],[StopStrategy],[ReleaseVersionId],[EntryPointPath],[JobPriority],[RuntimeType],[MachineId],[RequiresUserInteraction],[ServiceUserName],[ResumeTime],[Reference]
from [UiPath].[dbo].[Jobs]
where 1=1
-- and State = 5
/*
  0 = Pending, 1 = Running, 2 = Stopping, 3 = Terminating, 4 = Faulted, 
  5 = Successful, 6 = Stopped, 7 = Suspended, 8 = Resumed
*/
-- and TenantId = 1 -- default tenant
and DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
delete from [UiPath].[dbo].[jobs]
where 1=1
-- and State = 5
/*
  0 = Pending, 1 = Running, 2 = Stopping, 3 = Terminating, 4 = Faulted, 
  5 = Successful, 6 = Stopped, 7 = Suspended, 8 = Resumed
*/
-- and TenantId = 1 -- default tenant
and DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
set identity_insert [UiPathOrchestratorArchives].[dbo].[Archivejobs] off
commit transaction

3.6 Bereinigung von AuditLogs und AuditLogEntities

Es wird empfohlen, die Elemente, die älter als 60 Tage sind, in Ihren AuditLogs- und AuditLogEntities-Tabellen zu löschen. In der folgenden Beispielabfrage werden Elemente gelöscht, die älter als 60 Tage sind. Passen Sie die Abfrage an Ihre Anforderungen an, indem Sie den Parameter @NumberOfDaysToKeep ändern oder where-Klauseln für TenantId hinzufügen.

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
-- create temp table with list of IDs that we want to delete
select ID as IdToDelete into #TempDeletedIds from AuditLogs
where 1=1
-- and TenantId = 1
and DateDiff(day, ExecutionTime, GetDate()) > @NumberOfDaysToKeep
-------------------- AuditLogEntities
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveAuditLogEntities] on
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveAuditLogEntities]
([Id],[EntityName],[EntityId],[AuditLogId],[CustomData],[Action],[TenantId])
select
[Id],[EntityName],[EntityId],[AuditLogId],[CustomData],[Action],[TenantId]
from [UiPath].[dbo].[AuditLogEntities]
where Exists (select 1 from #TempDeletedIds where IdToDelete = AuditLogId)
delete from [UiPath].[dbo].[AuditLogEntities]
where Exists (select 1 from #TempDeletedIds where IdToDelete = AuditLogId)
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveAuditLogEntities] off
-------------------- AuditLogs
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveAuditLogs] on
insert into [UiPathOrchestratorArchives].[dbo].[ArchiveAuditLogs]
([Id],[TenantId],[UserId],[ServiceName],[MethodName],[Parameters],[ExecutionTime],[ExecutionDuration]
,[ClientIpAddress],[ClientName],[BrowserInfo],[Exception],[ImpersonatorUserId],[ImpersonatorTenantId]
,[CustomData],[Action],[Component],[DisplayName],[Version],[EntityId],[Discriminator],[ReturnValue],[IsGlobal])
select
[Id],[TenantId],[UserId],[ServiceName],[MethodName],[Parameters],[ExecutionTime],[ExecutionDuration]
,[ClientIpAddress],[ClientName],[BrowserInfo],[Exception],[ImpersonatorUserId],[ImpersonatorTenantId]
,[CustomData],[Action],[Component],[DisplayName],[Version],[EntityId],[Discriminator],[ReturnValue],[IsGlobal]
from [UiPath].[dbo].[AuditLogs]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[AuditLogs].[Id])
delete from [UiPath].[dbo].[AuditLogs]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[AuditLogs].[Id])
set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveAuditLogs] off
drop table #TempDeletedIds
commit transaction

3.7 Bereinigung von Aktionen

Es wird empfohlen, die abgeschlossenen und vorläufig gelöschten Elemente, die älter als 60 Tage sind, in der Tasks-Tabelle zu löschen.
Actions are stored in the Tasks table.
Deletion through UI marks the items as soft-deleted in the Tasks table.

Die folgende Beispielabfrage löscht abgeschlossene Elemente (Status = 2), die älter als 60 Tage sind, sowie vorläufig gelöschte Elemente (IsDeleted = 1).
Passen Sie die Abfrage an Ihre Anforderungen an, indem Sie den Parameter @NumberOfDaysToKeep ändern oder where-Klauseln für TenantId oder OrganizationUnitId hinzufügen.

📘

Hinweis:

Wenn Sie die gelöschten Aufgaben nicht archivieren möchten, entfernen Sie die Anweisung insert into [ArchiveTasks] select from [Tasks].

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
    set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveTasks] on
    insert into [UiPathOrchestratorArchives].[dbo].[ArchiveTasks] ([Id],[Title],[Priority],[Status],[AssignedToUserId],[FormLayout],[Data],[Action],[Type],[TenantId],[OrganizationUnitId],
    [LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId],[IsDeleted],[DeleterUserId],[DeletionTime],[TaskCatalogId],[IsCompleted],[ExternalTag])
    select
    [Id],[Title],[Priority],[Status],[AssignedToUserId],[FormLayout],[Data],[Action],[Type],[TenantId],[OrganizationUnitId],
    [LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId],[IsDeleted],[DeleterUserId],[DeletionTime],[TaskCatalogId],[IsCompleted],[ExternalTag] 
    from [UiPath].[dbo].[Tasks] 
    where 1=1 
    and ((IsDeleted = 1 and DateDiff(day, DeletionTime, GetDate()) > @NumberOfDaysToKeep)
    or (Status = 2
    /*
      0 = Unassigned, 1 = Pending, 2 = Completed
    */
    -- and TenantId = 1 -- default tenant
    -- and OrganizationUnitId = 1 -- switch to the OrganizationUnit for which you want to delete
    and DateDiff(day, LastModificationTime, GetDate()) > @NumberOfDaysToKeep))
    
    delete from [UiPath].[dbo].[Tasks]
    where 1=1 
    and ((IsDeleted = 1 and DateDiff(day, DeletionTime, GetDate()) > @NumberOfDaysToKeep)
    or (Status = 2
    /*
      0 = Unassigned, 1 = Pending, 2 = Completed
    */
    -- and TenantId = 1 -- default tenant
    -- and OrganizationUnitId = 1 -- switch to the OrganizationUnit for which you want to delete
    and DateDiff(day, LastModificationTime, GetDate()) > @NumberOfDaysToKeep))
    set identity_insert [UiPathOrchestratorArchives].[dbo].[ArchiveTasks] off
commit transaction

3.8. Bereinigung von Ledger

Es wird empfohlen, die Elemente, die älter als 7 Tage sind, in Ihren Ledger- und LedgerDeliveries-Tabellen zu löschen. In der folgenden Beispielabfrage werden Elemente gelöscht, die älter als 7 Tage sind, und eine Batchgröße von 1.000 Einträgen angewendet.

Dies kann manuell oder geplant in einem SQL Server-Job ausgeführt werden.

-- Ledger table cleanup
PRINT 'Starting maintenance on [Ledger] table.'

DECLARE @daysToKeep INT
DECLARE @batchSize INT
SET @daysToKeep = 7
SET @batchSize =  1000
DECLARE @currentDate DATETIME
SET @currentDate = GETDATE()
DECLARE @rowsToDelete INT

SET @rowsToDelete =
    (SELECT COUNT(*)
    FROM [dbo].[Ledger]
    WHERE [CreationTime] < @currentDate-@daysToKeep)

DECLARE @rowsToKeep INT
SET @rowsToKeep =
    (SELECT COUNT(*)
    FROM [dbo].[Ledger]
    WHERE [CreationTime] >= @currentDate-@daysToKeep)

PRINT 'Rows to delete:' + CAST(@rowsToDelete AS VARCHAR)
PRINT 'Rows to keep:'+ CAST(@rowsToKeep AS VARCHAR)

DECLARE @rowsDeleted INT
SET @rowsDeleted = 1
WHILE (@rowsDeleted > 0)
BEGIN
    DELETE TOP(@batchSize) [dbo].[Ledger] WHERE [CreationTime] < @currentDate-@daysToKeep
     OPTION (MAXDOP 1)

    SET @rowsDeleted = @@ROWCOUNT

    SET @rowsToDelete = IIF (@rowsToDelete > @batchSize, @rowsToDelete - @batchSize, 0)

    PRINT 'Deleted ' + CAST(@rowsDeleted AS VARCHAR)+' rows. Remaining to delete:' + CAST(@rowsToDelete AS VARCHAR)
END

--LedgerDeliveries table cleanup
PRINT 'Starting maintenance on [LedgerDeliveries] table.'
SET @rowsToDelete =
    (SELECT COUNT(*)
    FROM [dbo].[LedgerDeliveries]
    WHERE [LastUpdatedTime] < @currentDate-@daysToKeep)
SET @rowsToKeep =
    (SELECT COUNT(*)
    FROM [dbo].[LedgerDeliveries]
    WHERE [LastUpdatedTime] >= @currentDate-@daysToKeep)
PRINT 'Rows to delete:' + CAST(@rowsToDelete AS VARCHAR)
PRINT 'Rows to keep:'+ CAST(@rowsToKeep AS VARCHAR)

SET @rowsDeleted = 1
WHILE (@rowsDeleted > 0)
BEGIN
    DELETE TOP(@batchSize) [dbo].[LedgerDeliveries] WHERE [LastUpdatedTime] < @currentDate-@daysToKeep
     OPTION (MAXDOP 1)

    SET @rowsDeleted = @@ROWCOUNT
    SET @rowsToDelete = IIF (@rowsToDelete > @batchSize, @rowsToDelete - @batchSize, 0)

    PRINT 'Deleted ' + CAST(@rowsDeleted AS VARCHAR)+' rows. Remaining to delete:' + CAST(@rowsToDelete AS VARCHAR)
END

📘

Hinweis:

Sie können das Bereinigungsintervall und die Anzahl der zu löschenden Einträge anpassen, indem Sie die Werte von den Variablen @daysToKeep und @batchSize ändern.

3.9. Elasticsearch

Orchestrator speichert einen Index für jeden Mandanten, für jeden Monat. Wenn Sie alte Indizes in Elasticsearch beibehalten, auch wenn diese nicht in Suchen oder Berichten verwendet werden, kann dies die Leistung (Speicherbedarf) beeinträchtigen. Es wird daher empfohlen, alte Indizes zu löschen.

3.10 Sitzungen

We recommend deleting unattended sessions with [ReportingTime] older than 60 days in your Sessions table. The example query below deletes items older than 60 days. Adapt the query to your needs, changing the @daysToKeep parameter or adding where clauses for TenantId

Dies kann manuell oder geplant in einem SQL Server-Job ausgeführt werden.

DECLARE @daysToKeep INT = 60

BEGIN TRANSACTION
    SELECT s.[Id] 
    INTO #tempTable 
    FROM [dbo].[Sessions] s 
    LEFT JOIN [dbo].[RobotLicenses] rl ON rl.[SessionId] = s.[Id] AND rl.[Scope] > 1 
    LEFT JOIN [dbo].[ProcessScheduleMachineRobots] p ON p.[SessionId] = s.[Id] 
    WHERE s.[ReportingTime] < GETUTCDATE()-@daysToKeep 
    AND s.[RobotId] IS NULL 
    AND rl.[Id] IS NULL 
    AND p.[Id] IS NULL 
    -- AND s.[TenantId] = 1 -- default tenant
    ORDER BY s.[Id] asc 
    
    DELETE rl  
    FROM [dbo].[RobotLicenses] rl 
    INNER JOIN #tempTable t ON t.[Id] = rl.[SessionId]
    
    DELETE s  
    FROM [dbo].[Sessions] s 
    INNER JOIN #tempTable t ON t.[Id] = s.[Id]
    
    DROP TABLE #tempTable
COMMIT TRANSACTION

Aktualisiert vor 7 Monaten


Durchführen einer Datenbankwartung


Auf API-Referenzseiten sind Änderungsvorschläge beschränkt

Sie können nur Änderungen an dem Textkörperinhalt von Markdown, aber nicht an der API-Spezifikation vorschlagen.