- 入门指南
- 要求
- 最佳实践
- 安装
- 正在更新
- 身份服务器
- High Availability Add-On
维护注意事项
请务必保持 Orchestrator 数据库整洁,以便在日常操作和升级期间获得流畅的体验。
为此,我们建议您使用下面列出的其中一个脚本定期清理旧数据,还可以选择在其他数据库操作允许的情况下,将清理操作安排在方便的时间执行。
您可以从 Customer Portal 下载 Orchestrator 数据库维护脚本。
备份数据库
我们建议您对 SQL Server 数据库实施定期备份,例如每周完整备份或每日增量备份。
Additionally, we recommend you to use the DatabaseBackup stored procedure that is created using the script at this location.
数据库清理
以下脚本将替换以前的所有数据库清理脚本。这些脚本能够完成所有必要的维护任务,并且可以根据需要进行配置。
SQL 脚本
先决条件
运行 CreateOrchestratorCleanupObjects.sql 脚本需要满足以下条件:
- 您必须有权在 Orchestrator 数据库的上下文中访问存档数据库。
- 您必须能够使用由三部分组成的名称访问存档,例如
Archive.dbo.QueueItemsTableArchive。
如何使用它
- 运行
CreateOrchestratorCleanupObjects.sqlSQL 脚本以创建以下对象:
- 存储执行日志的
dbo.__CleanupLog表。 dbo.GetOrCreateArchiveTable过程,用于创建或返回存档表。dbo.RunOrchestratorCleanup过程,用于执行删除旧数据的操作,也可以选择存档旧数据的操作。
- Execute
dbo.RunOrchestratorCleanupwith the scheduling XML configuration file to perform the cleanup.
您还可以使用 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 结合使用。 | 示例:适用于 QueueItems 的 CreationTime |
additionalFilter | 适用于筛选器的任何有效 SQL 语句。 这可以留空。 | 示例:Status IN (2, 3, 4, 5, 6)。这包含在我们推荐的 XML 文件中。 |
daysOld | 允许您保留一定天数的数据。 这与 dateTimeColumn 结合使用。 | 这必须设置为最小值 2。示例:将此参数设置为 5 会保留 5 天前的所有数据。 |
batchSize | 要在一次迭代中删除的表格行数。 这不适用于定义了外键的表格。 | 示例:如果将 QueueItems 表的参数设置为 50,则系统会从该特定表中删除 50 个项目。 |
forceCascade | 用于对定义了外键的表格执行脚本。 示例已在必要时对表格使用 forceCascade。因此,您无需更改它。 | 0:不级联。1:级联。例如,为 QueueItems 表设置此选项将同时处理 QueueItemEvents 和 QueueItemComments 表。 |
shouldArchive | 允许您选择是否要存档数据。 | 0:不存档。1:存档。 |
SQL 和 PowerShell 脚本的比较
| 功能 | SQL 脚本 | PowerShell 脚本 |
|---|---|---|
| 清理 XML |
They both use the logic described in the Scheduling the cleanup section. | |
|
执行日志 |
它们都会创建 您可以使用 您可以使用 每次执行这些脚本时都会生成 | |
|
存档表格 |
存档表不包含任何索引、外键或身份列。 Timestamp type columns are not archived. | |
| 存档表格名称 |
这些名称遵循相同的逻辑,并且包含基于表架构的字符串。 | |
| 待存档/删除的 ID 批次 |
存储在临时表中。 |
存储在 |
|
Transaction |
在此期间,系统会存档和删除数据。对每个批次执行一个事务。 批处理大小,即要处理的表格行数,通过 |
SqlBulkCopy is used to copy the data. 没有为存档和删除执行单个事务。 |
Elasticsearch
Orchestrator 每月为每个租户保留一个索引。在 Elasticsearch 中保留旧索引,即使它们未在搜索或报告中使用,也可能会影响其性能(内存消耗)。因此,建议删除旧索引。