- 入门指南
- 要求
- 最佳实践
- 安装
- 正在更新
- 身份服务器
- High Availability Add-On
维护注意事项
请务必保持 Orchestrator 数据库整洁,以便在日常操作和升级期间获得流畅的体验。
为此,我们建议您使用下面列出的其中一个脚本定期清理旧数据,还可以选择在其他数据库操作允许的情况下,将清理操作安排在方便的时间执行。
您可以从 Customer Portal 下载 Orchestrator 数据库维护脚本。
我们建议您对 SQL Server 数据库实施定期备份,例如每周完整备份或每日增量备份。
此外,我们建议您使用在该位置使用脚本创建的 DatabaseBackup 存储程序。
以下脚本将替换以前的所有数据库清理脚本。这些脚本能够完成所有必要的维护任务,并且可以根据需要进行配置。
先决条件
CreateOrchestratorCleanupObjects.sql
脚本需要满足以下条件:
-
您必须有权在 Orchestrator 数据库的上下文中访问存档数据库。
-
您必须能够使用由三部分组成的名称访问存档,例如
Archive.dbo.QueueItemsTableArchive
。
如何使用它
CreateOrchestratorCleanupObjects.sql
SQL 脚本以创建以下对象:
-
存储执行日志的
dbo.__CleanupLog
表。 -
dbo.GetOrCreateArchiveTable
过程,用于创建或返回存档表。 -
dbo.RunOrchestratorCleanup
过程,用于执行删除旧数据的操作,也可以选择存档旧数据的操作。
dbo.RunOrchestratorCleanup
以完成清理。
您还可以使用 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';
这适用于无法使用 SQL 脚本的情况。
PowerShell 脚本与 Powershell 5.1 兼容,并且可以与 Azure 自动化 Runbook 一起使用。
先决条件
RunOrchestratorCleanup.ps1
脚本必须能够与以下连接字符串通信:
-
SourceConnectionString
- 这是 Orchestrator 数据库连接字符串。 -
DestinationConnectionString
- 这是存档数据库连接字符串。请注意,必须提前创建和设置存档数据库。
它创建的对象
-
存储执行日志的
dbo.__CleanupLog
表。 -
dbo.__CleanupIds
表,用于存储需要清理的临时批次 ID。
限制
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 参数
参数 |
说明 |
可能的值 |
---|---|---|
|
在一次运行期间允许脚本对所有表执行的最大分钟数。 |
必须大于 1。 |
|
包含要删除的数据的表格名称。 |
示例:
QueueItems 。 |
|
在一次运行期间允许脚本针对特定表格执行的最大分钟数。 重要提示:
您在此处设置的时间有时可能会超出几分钟。 除此之外,
totalRunMaxMinutes 优先,并且将始终强制执行,即使您将此参数设置为 -1 也是如此。
|
-1 :脚本的执行时间不限(分钟数)。
0 :不会为该特定表执行脚本。
>0 (即您选择的数字):脚本将执行的最大分钟数。
|
|
包含要删除的数据的列的 ID。 |
示例:
QueueItems 表中的 Id
|
|
这因数据类型而异。 它与
daysOld 结合使用。
|
示例:适用于
QueueItems 的 CreationTime |
|
适用于筛选器的任何有效 SQL 语句。 这可以留空。 |
示例:
Status IN (2, 3, 4, 5, 6) 。这包含在我们推荐的 XML 文件中。
|
daysOld |
允许您保留一定天数的数据。 这与
dateTimeColumn 结合使用。
|
这必须设置为最小值
2 。
示例:将此参数设置为
5 会保留 5 天前的所有数据。
|
|
要在一次迭代中删除的表格行数。 重要提示:
这不适用于定义了外键的表格。 |
示例:如果将
QueueItems 表的参数设置为 50 ,则系统会从该特定表中删除 50 个项目。
|
forceCascade |
用于对定义了外键的表格执行脚本。 重要提示:
示例已在必要时对表格使用
forceCascade 。因此,您无需更改它。
|
0 :不级联。
1 :级联。例如,为 QueueItems 表设置此选项将同时处理 QueueItemEvents 和 QueueItemComments 表。
|
shouldArchive |
允许您选择是否要存档数据。 |
0 :不存档。
1 :存档。
|
功能 | 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 用于复制数据。 没有为存档和删除执行单个事务。 |