- Introdução
- Requisitos
- Melhores práticas
- Instalação
- Atualizando
- Servidor de Identidade
- Solução de problemas de erros de inicialização
Guia de instalação do Orchestrator
É importante manter seu banco de dados do Orchestrator limpo e organizado, para ter uma experiência tranquila durante operações do dia a dia, bem como durante atualizações.
Você não precisa atualizar ou substituir esses scripts toda vez que o Orchestrator é atualizado. Elas continuarão a funcionar conforme o esperado em todas as versões do Orchestrator.
Para fazer isso, recomendamos que você use um dos scripts descritos abaixo para limpar regularmente dados antigos, com a opção de agendar sua execução em horários convenientes para você, desde que suas outras ações de banco de dados permitam isso.
Você pode baixar os scripts de manutenção de banco de dados do Orchestrator do Customer Portal.
Fazendo backup do banco de dados
Antes de começar, recomendamos implementar backups regulares do banco de dados SQL Server, como backups incrementais semanais ou diários.
Além disso, recomendamos o uso do procedimento armazenado DatabaseBackup que é criado usando o script neste local.
Limpeza de banco de dados
Os scripts a seguir substituem qualquer e todos os scripts de limpeza de banco de dados anteriores. Eles cobrem todas as tarefas de manutenção necessárias e podem ser configurados conforme necessário.
- Você pode baixar os scripts de manutenção de banco de dados do Orchestrator do Customer Portal.
SQL script
Pré-requisitos
Isso é o que você precisa para poder executar o script
- Você deve ter acesso ao banco de dados de arquivo a partir do contexto de seu banco de dados do Orchestrator.
- Você deve poder acessar o arquivo usando nomes de 3 partes, como
Archive.dbo.QueueItemsTableArchive" id="1"/>.
Como usá-lo
- Execute o script SQL
CreateOrchestratorCleanupObjects.sqlpara criar os seguintes objetos:
- A tabela
dbo.__CleanupLog" id="1"/>, que abriga os logs de execução. - O procedimento
dbo.GetOrCreateArchiveTable" id="1"/>, que cria ou retorna a tabela de arquivo. - O procedimento
dbo.RunOrchestratorCleanup" id="1"/>, que executa a exclusão e, opcionalmente, o arquivamento de dados antigos.
- Execute
dbo.RunOrchestratorCleanupcom o arquivo de configuração XML de agendamento para executar a limpeza. Para obter detalhes sobre o arquivo XML, consulte a seção Agendamento da limpeza .Observação:Você também pode usar o agente SQL Server para executar a limpeza.
Exemplo de script
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';
script do powershell
Isso é apropriado para situações em que você não pode usar o script SQL.
O script PowerShell é compatível com o Powershell 5.1 e pode ser usado com runbooks de Automação do Azure.
Pré-requisitos
O script RunOrchestratorCleanup.ps1 deve poder se comunicar com essas duas strings de conexão:
SourceConnectionString" id="1"/> - essa é a string de conexão de banco de dados do Orchestrator. DestinationConnectionString" id="1"/> - essa é a string de conexão de banco de dados de arquivo. Observe que o banco de dados de arquivo deve ser criado e configurado com antecedência.
Objetos que ele cria
- A tabela
dbo.__CleanupLog" id="1"/>, que abriga os logs de execução. - A tabela
dbo.__CleanupIds" id="1"/>, que armazena um lote temporário de IDs que precisam ser limpos.
Limitações
O script abre duas conexões: uma ao banco de dados do Orchestrator (por meio de SourceConnectionString) e uma ao banco de dados de arquivo (por meio de DestinationConnectionString). Dessa forma, nenhuma transação real está envolvida, pois os dados são copiados do Orchestrator para o arquivo, após o qual são excluídos do Orchestrator. Isso significa que, se uma exceção for gerada em qualquer lugar entre as duas ações, fazendo com que o script seja reexecutado, os mesmos dados podem ser copiados novamente, levando a duplicatas no banco de dados de arquivo. No entanto, como a exclusividade não é aplicada no banco de dados de arquivo, isso não leva a problemas.
Exemplo de script
.\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>'
Agendamento da limpeza
Você pode escolher quais dados limpar de seu banco de dados, quando e por quanto tempo a atividade de limpeza deve ser feita para cada execução, entre outras. Para fazer isso, use o seguinte arquivo XML com o script SQL ou PowerShell. Ele é pré-configurado com nossos parâmetros recomendados, mas você pode editá-lo se quiser funcionalidades mais avançadas. Certifique-se de entender o que cada parâmetro faz antes de editar o script, pois isso pode ter consequências graves.
<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="Assets" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="DeletionTime" additionalFilter="IsDeleted = 1" daysOld="120" batchSize="50" forceCascade="1" 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="Assets" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="DeletionTime" additionalFilter="IsDeleted = 1" daysOld="120" batchSize="50" forceCascade="1" shouldArchive="0" />
<Table name="__CleanupLog" runMaxMinutes="-1" idColumn="Id" dateTimeColumn="ExecutionTimeUtc" additionalFilter="" daysOld="7" batchSize="1000" forceCascade="0" shouldArchive="0" />
</CleanupConfig>
Mesmo que uma execução consiga limpar parcialmente uma ou algumas tabelas, as execuções subsequentes continuarão a limpeza, até que o script atinja todo o backlog. Portanto, é importante que você não accumule um backlog maior do que o script pode lidar. Se isso acontecer, considere agendar o script para ser executado com mais frequência.
Parâmetros do XML de limpeza
| Parâmetro | Explicação | Valores possíveis |
|---|---|---|
|
| O número máximo de minutos que o script pode executar para todas as tabelas durante uma execução. | Deve ser maior que 1. |
|
| O nome da tabela que contém os dados que você deseja excluir. | Exemplo: QueueItems |
|
| O número máximo de minutos que o script pode executar para uma tabela específica durante uma execução. O tempo que você define aqui às vezes pode ser executado por mais alguns minutos. totalRunMaxMinutes tem precedência e sempre será aplicada, mesmo se você definir esse parâmetro como -1 . | -1 : o script será executado por um número ilimitado de minutos. 0 : o script não será executado para essa tabela específica. >0 (ou seja, um número escolhido por você): o número máximo de minutos que o script executará. |
|
| O ID da coluna que contém os dados que você deseja excluir. | Exemplo: |
|
| Isso difere dependendo do tipo de dados. daysOld . | Exemplo: |
|
| Qualquer instrução SQL válida para um filtro. Isso pode ser deixado vazio. | Exemplo: Status IN (2, 3, 4, 5, 6). Isso está incluído no arquivo XML recomendado por nós. |
daysOld | Permite que você mantenha um certo número de dias de dados. dateTimeColumn . | Deve ser definido como um mínimo de 2 . Exemplo: definir esse parâmetro como 5 mantém todos os dados com 5 dias de idade. |
|
| O número de linhas de tabela a serem excluídas em uma iteração. Isso não é usado para tabelas em que chaves estrangeiras são definidas. | Exemplo: configurar esse parâmetro como |
forceCascade | Permite que você execute o script para tabelas em que chaves estrangeiras são definidas. forceCascade para as tabelas em que é necessário. Portanto, você não precisa alterá-lo. | 0 : não em cascata. 1 : cascata. Por exemplo, definir essa opção para a tabela QueueItems processará as tabelas QueueItemEvents e QueueItemComments . |
shouldArchive | Permite que você escolha se deseja arquivar os dados. | 0 : não arquivar. 1 : arquivar. |
Scripts SQL e PowerShell comparados
| Recurso | SQL script | script do powershell |
|---|---|---|
| XML de limpeza | Ambos usam a lógica descrita na seção Agendamento da limpeza. | |
| Log de execução | Ambos criam uma tabela dbo.__CleanupLogs para armazenar os logs da execução. Você pode consultar os logs de uma execução usando SELECT * FROM dbo.__CleanupLog WHERE ExecutionId = '<execution_id>' ORDER BY Id . Você pode verificar se uma execução continha erros usando SELECT * FROM dbo.__CleanupLog WHERE ExecutionId = '<execution_id>' AND IsError = 1 . O parâmetro ExecutionId é gerado com cada execução de qualquer um desses scripts. | |
| Tabela de arquivo | A tabela de arquivo não contém índices, chaves estrangeiras ou colunas de identificação. As colunas do tipo Carimbo de data/hora não são arquivadas. | |
| Nome da tabela de arquivo | Os nomes seguem a mesma lógica e incluem uma string baseada no esquema de tabela. | |
| Lote de IDs a serem arquivados/excluídos | Armazenado em uma tabela temporária. | Armazenado na tabela |
| Transaction | Uma única transação é executada para cada lote, durante o qual os dados são arquivados e excluídos. | SqlBulkCopy é usado para copiar os dados. Não há nenhuma transação única executada para arquivamento e exclusão. |
Elasticsearch
O Orchestrator mantém um índice para cada tenant, para cada mês. Manter índices antigos no Elasticsearch, mesmo que eles não sejam usados em pesquisas ou relatórios, pode afetar seu desempenho (consumo de memória). Como resultado, é recomendável excluir índices antigos.