Orchestrator
2022.10
False
横幅背景图像
Orchestrator 安装指南
上次更新日期 2024年3月4日

维护注意事项

请务必保持 Orchestrator 数据库整洁,以便在日常操作和升级期间获得流畅的体验。

为此,我们建议您使用下面列出的其中一个脚本定期清理旧数据,还可以选择在其他数据库操作允许的情况下,将清理操作安排在方便的时间执行。

重要提示:

您可以从 Customer Portal 下载 Orchestrator 数据库维护脚本。

备份数据库

开始之前,我们建议对 SQL Server 数据库实施定期备份,例如每周完整备份或每日增量备份。

此外,我们建议您使用在该位置使用脚本创建的 DatabaseBackup 存储程序。

数据库清理

以下脚本将替换以前的所有数据库清理脚本。这些脚本能够完成所有必要的维护任务,并且可以根据需要进行配置。

重要提示:

您可以从 Customer Portal 下载 Orchestrator 数据库维护脚本。

SQL 脚本

先决条件

运行 CreateOrchestratorCleanupObjects.sql 脚本需要满足以下条件:
  • 您必须有权在 Orchestrator 数据库的上下文中访问存档数据库。

  • 您必须能够使用由三部分组成的名称访问存档,例如 Archive.dbo.QueueItemsTableArchive

如何使用它

1. 运行 CreateOrchestratorCleanupObjects.sql SQL 脚本以创建以下对象:
  • 存储执行日志的 dbo.__CleanupLog 表。
  • dbo.GetOrCreateArchiveTable 过程,用于创建或返回存档表。
  • dbo.RunOrchestratorCleanup 过程,用于执行删除旧数据的操作,也可以选择存档旧数据的操作。
2. 使用计划 XML 配置文件执行 dbo.RunOrchestratorCleanup 以执行清理。有关 XML 文件的详细信息,请参阅下面的计划清理部分。
备注:

您还可以使用 SQL Server 代理来执行清理。

脚本示例

DECLARE @cleanupConfigXml XML = 
'<CleanupConfig totalRunMaxMinutes="180">
	<Table name="QueueItems" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="Status IN (2, 3, 4, 5, 6)" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="1" />
</CleanupConfig>';

EXEC dbo.RunOrchestratorCleanup 
@cleanupConfigXml = @cleanupConfigXml,
@archiveDatabaseName = 'OrchestratorArchive';DECLARE @cleanupConfigXml XML = 
'<CleanupConfig totalRunMaxMinutes="180">
	<Table name="QueueItems" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="Status IN (2, 3, 4, 5, 6)" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="1" />
</CleanupConfig>';

EXEC dbo.RunOrchestratorCleanup 
@cleanupConfigXml = @cleanupConfigXml,
@archiveDatabaseName = 'OrchestratorArchive';

PowerShell 脚本

这适用于无法使用 SQL 脚本的情况。

备注:

PowerShell 脚本与 Powershell 5.1 兼容,并且可以与 Azure 自动化 Runbook 一起使用。

先决条件

RunOrchestratorCleanup.ps1 脚本必须能够与以下连接字符串通信:
  • SourceConnectionString - 这是 Orchestrator 数据库连接字符串。
  • DestinationConnectionString - 这是存档数据库连接字符串。请注意,必须提前创建和设置存档数据库。

它创建的对象

  • 存储执行日志的 dbo.__CleanupLog 表。
  • dbo.__CleanupIds 表,用于存储需要清理的临时批次 ID。

限制

该脚本将打开两个连接:一个连接到 Orchestrator 数据库(通过 SourceConnectionString),另一个连接到存档数据库(通过 DestinationConnectionString)。因此,不涉及实际的事务,因为系统会将数据从 Orchestrator 复制到存档,然后将其从 Orchestrator 中删除。

这意味着,如果在两个操作之间的任何位置引发异常,导致重新执行脚本,则可能会再次复制相同的数据,从而导致存档数据库中出现重复项。

但是,由于在存档数据库中未强制执行唯一性,因此这不会导致任何问题。

脚本示例

.\RunOrchestratorCleanup 
-SourceConnectionString "Data Source=.;Initial Catalog=UiPath;User ID=sa;Password=******" 
-DestinationConnectionString "Data Source=.;Initial Catalog=<OrchestratorArchive>;User ID=sa;Password=******" 
-CleanupConfigXml '<CleanupConfig totalRunMaxMinutes="180"><Table name="QueueItems" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="Status IN (2, 3, 4, 5, 6)" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="1" /></CleanupConfig>'.\RunOrchestratorCleanup 
-SourceConnectionString "Data Source=.;Initial Catalog=UiPath;User ID=sa;Password=******" 
-DestinationConnectionString "Data Source=.;Initial Catalog=<OrchestratorArchive>;User ID=sa;Password=******" 
-CleanupConfigXml '<CleanupConfig totalRunMaxMinutes="180"><Table name="QueueItems" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="Status IN (2, 3, 4, 5, 6)" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="1" /></CleanupConfig>'

计划清理

您可以选择要从数据库中清理哪些数据、清理时间以及每次运行的清理活动时长等。

为此,请将以下 XML 文件与 SQL 或 PowerShell 脚本一起使用。它已预先配置我们推荐的参数,但如果您需要更高级的功能,可以编辑它。在编辑脚本之前,请确保您了解每个参数的作用,否则可能会产生严重后果。

<CleanupConfig totalRunMaxMinutes="180">
    <Table name="QueueItems" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="Status IN (2, 3, 4, 5, 6)" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="1" />
    <Table name="Jobs" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="State IN (4, 5, 6)" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="1" />        
    <Table name="Logs" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="TimeStamp" additionalFilter="" daysOld="90" batchSize="1000" forceCascade="0" shouldArchive="1" />
    <Table name="AuditLogs" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="ExecutionTime" additionalFilter="" daysOld="365" batchSize="25" forceCascade="1" shouldArchive="1" />
    
    <Table name="Tasks" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="DeletionTime" additionalFilter="IsDeleted = 1" daysOld="180" batchSize="10" forceCascade="0" shouldArchive="1" />
    <Table name="QueueProcessingRecords" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="ProcessingTime" additionalFilter="ReportType != -1" daysOld="30" batchSize="1000" forceCascade="0" shouldArchive="0" />
    <Table name="Sessions" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="ReportingTime" additionalFilter="" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="0" />    
    
    <Table name="RobotLicenseLogs" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="StartDate" additionalFilter="" daysOld="180" batchSize="1000" forceCascade="0" shouldArchive="0" />    
    <Table name="UserNotifications" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="" daysOld="90" batchSize="1000" forceCascade="0" shouldArchive="0" />
    <Table name="TenantNotifications" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="" daysOld="90" batchSize="1000" forceCascade="0" shouldArchive="0" />    
    <Table name="Ledger" runMaxMinutes="-1" idColumn="LedgerId" dateTimeColumn="CreationTime" additionalFilter="" daysOld="7" batchSize="1000" forceCascade="0" shouldArchive="0" />
    <Table name="LedgerDeliveries" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="LastUpdatedTime" additionalFilter="" daysOld="7" batchSize="1000" forceCascade="0" shouldArchive="0" />
    <Table name="__CleanupLog" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="ExecutionTimeUtc" additionalFilter="" daysOld="7" batchSize="1000" forceCascade="0" shouldArchive="0" />
</CleanupConfig><CleanupConfig totalRunMaxMinutes="180">
    <Table name="QueueItems" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="Status IN (2, 3, 4, 5, 6)" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="1" />
    <Table name="Jobs" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="State IN (4, 5, 6)" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="1" />        
    <Table name="Logs" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="TimeStamp" additionalFilter="" daysOld="90" batchSize="1000" forceCascade="0" shouldArchive="1" />
    <Table name="AuditLogs" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="ExecutionTime" additionalFilter="" daysOld="365" batchSize="25" forceCascade="1" shouldArchive="1" />
    
    <Table name="Tasks" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="DeletionTime" additionalFilter="IsDeleted = 1" daysOld="180" batchSize="10" forceCascade="0" shouldArchive="1" />
    <Table name="QueueProcessingRecords" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="ProcessingTime" additionalFilter="ReportType != -1" daysOld="30" batchSize="1000" forceCascade="0" shouldArchive="0" />
    <Table name="Sessions" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="ReportingTime" additionalFilter="" daysOld="180" batchSize="50" forceCascade="1" shouldArchive="0" />    
    
    <Table name="RobotLicenseLogs" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="StartDate" additionalFilter="" daysOld="180" batchSize="1000" forceCascade="0" shouldArchive="0" />    
    <Table name="UserNotifications" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="" daysOld="90" batchSize="1000" forceCascade="0" shouldArchive="0" />
    <Table name="TenantNotifications" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="CreationTime" additionalFilter="" daysOld="90" batchSize="1000" forceCascade="0" shouldArchive="0" />    
    <Table name="Ledger" runMaxMinutes="-1" idColumn="LedgerId" dateTimeColumn="CreationTime" additionalFilter="" daysOld="7" batchSize="1000" forceCascade="0" shouldArchive="0" />
    <Table name="LedgerDeliveries" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="LastUpdatedTime" additionalFilter="" daysOld="7" batchSize="1000" forceCascade="0" shouldArchive="0" />
    <Table name="__CleanupLog" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="ExecutionTimeUtc" additionalFilter="" daysOld="7" batchSize="1000" forceCascade="0" shouldArchive="0" />
</CleanupConfig>

即使一次运行只能清理一个或几个表格的一部分,后续运行也将继续清理,直到脚本处理完所有积压工作为止。因此,累积的积压工作量不要超过脚本的处理能力,这一点很重要。如果发生这种情况,请考虑安排脚本更频繁地运行。

清理 XML 参数

参数

说明

可能的值

totalRunMaxMinutes

在一次运行期间允许脚本对所有表执行的最大分钟数。

必须大于 1。

name

包含要删除的数据的表格名称。

示例: QueueItems

runMaxMinutes

在一次运行期间允许脚本针对特定表格执行的最大分钟数。

重要提示:

您在此处设置的时间有时可能会超出几分钟。

除此之外,totalRunMaxMinutes 优先,并且将始终强制执行,即使您将此参数设置为 -1 也是如此。
-1:脚本的执行时间不限(分钟数)。
0:不会为该特定表执行脚本。
>0 (即您选择的数字):脚本将执行的最大分钟数。

idColumn

包含要删除的数据的列的 ID。

示例:QueueItems 表中的 Id

dateTimeColumn

这因数据类型而异。

它与 daysOld 结合使用。
示例:适用于 QueueItemsCreationTime

additionalFilter

适用于筛选器的任何有效 SQL 语句。

这可以留空。

示例:Status IN (2, 3, 4, 5, 6)。这包含在我们推荐的 XML 文件中。
daysOld

允许您保留一定天数的数据。

这与 dateTimeColumn 结合使用。
这必须设置为最小值 2
示例:将此参数设置为 5 会保留 5 天前的所有数据。

batchSize

要在一次迭代中删除的表格行数。

重要提示:

这不适用于定义了外键的表格。

示例:如果将 QueueItems 表的参数设置为 50,则系统会从该特定表中删除 50 个项目。
forceCascade

用于对定义了外键的表格执行脚本。

重要提示:
示例已在必要时对表格使用 forceCascade。因此,您无需更改它。
0:不级联。
1:级联。例如,为 QueueItems 表设置此选项将同时处理 QueueItemEventsQueueItemComments 表。
shouldArchive

允许您选择是否要存档数据。

0:不存档。
1:存档。

SQL 和 PowerShell 脚本的比较

功能

SQL 脚本PowerShell 脚本
清理 XML

它们都使用“计划清理”部分中描述的逻辑。

执行日志

它们都会创建 dbo.__CleanupLogs 表来存储执行日志。
您可以使用 SELECT * FROM dbo.__CleanupLog WHERE ExecutionId = '<execution_id>' ORDER BY Id 查询执行的日志。
您可以使用 SELECT * FROM dbo.__CleanupLog WHERE ExecutionId = '<execution_id>' AND IsError = 1 检查执行是否包含错误。
每次执行这些脚本时都会生成 ExecutionId 参数。

存档表格

存档表不包含任何索引、外键或身份列。

时间戳类型列不会存档。

存档表格名称

这些名称遵循相同的逻辑,并且包含基于表架构的字符串。

待存档/删除的 ID 批次

存储在临时表中。

存储在 dbo.__CleanupIds 表中。

Transaction

在此期间,系统会存档和删除数据。对每个批次执行一个事务。

批处理大小,即要处理的表格行数,通过 batchSize 参数在 XML 文件中定义。

SqlbulkCopy 用于复制数据。

没有为存档和删除执行单个事务。

Elasticsearch

Orchestrator 每月为每个租户保留一个索引。在 Elasticsearch 中保留旧索引,即使它们未在搜索或报告中使用,也可能会影响其性能(内存消耗)。因此,建议删除旧索引。

  • 备份数据库
  • 数据库清理
  • SQL 脚本
  • PowerShell 脚本
  • 计划清理
  • SQL 和 PowerShell 脚本的比较
  • Elasticsearch

此页面是否有帮助?

获取您需要的帮助
了解 RPA - 自动化课程
UiPath Community 论坛
Uipath 白色徽标
信任与安全
© 2005-2024 UiPath. All rights reserved.