# [Nível 3] Relatórios Avançados e Manutenção de Banco de Dados **Público Alvo:** SysAdmin / Gestão **Ferramenta:** PowerShell (EMS) --- ## 1. Relatórios de Uso e População ### Contagem de Usuários por Banco de Dados (Cliente) Como o ambiente é multi-tenant separado por Database, este comando mostra quantos usuários cada cliente tem. ```powershell Get-Mailbox -ResultSize Unlimited | Group-Object -Property Database | Select-Object Name, Count, @{n='Size(GB)';e={"{0:N2}" -f ($_.Group | ForEach-Object {(Get-MailboxStatistics $_.Identity).TotalItemSize.Value.ToGB()} | Measure-Object -Sum).Sum}} | Sort-Object Count -Descending ``` _Este comando pode demorar um pouco pois calcula o tamanho total._ ### Contagem de Usuários por Domínio de E-mail Se você mistura clientes no mesmo banco, agrupe pelo domínio do e-mail: ```powershell Get-Mailbox -ResultSize Unlimited | Group-Object -Property @{E={$_.EmailAddresses | Where-Object {$_ -like "SMTP:*"} | ForEach-Object {$_.Split("@")[1]} | Select-Object -First 1}} | Select-Object Name, Count | Sort-Object Count -Descending ``` ### Relatório de Caixas "Gigantes" (Top 20) Identificar quem está consumindo mais espaço. ```powershell Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | Select-Object -First 20 DisplayName, @{n='Size(GB)';e={$_.TotalItemSize.Value.ToGB()}}, Database ``` --- ## 2. Manutenção de Logs e Espaço em Disco ### Truncamento de Logs (Log Truncation) Os logs de transação (`.log`) do Exchange crescem infinitamente até que um **Backup Full** seja realizado. **NUNCA APAGUE ARQUIVOS .LOG MANUALMENTE.** Isso corrompe o banco. **Procedimento Correto:** 1. Execute sua ferramenta de backup (Veeam, Windows Server Backup) com suporte a VSS/Exchange. 2. Ao finalizar o backup com sucesso, o Exchange apaga os logs antigos automaticamente. **Procedimento de Emergência (Disco Cheio): Habilitar Circular Logging** Se o disco de logs encher e o banco desmontar: 1. Hablite o Circular Logging (apaga logs assim que escritos no DB). ```powershell Set-MailboxDatabase "NOME_DO_BANCO" -CircularLoggingEnabled $true ``` 2. Desmonte e Monte o banco para aplicar (Gera downtime de segundos/minutos). ```powershell Dismount-Database "NOME_DO_BANCO" -Confirm:$false Mount-Database "NOME_DO_BANCO" ``` 3. **Importante:** Desabilite assim que resolver o espaço e fizer backup, pois o Circular Logging impede recuperação "point-in-time". ### Backup Manual via Linha de Comando (Wbadmin) Como o servidor é Core, não há "wbadmin.msc". Use o comando abaixo para realizar um Backup Full (VSS Real) que trunca os logs corretamente. 1. **Instalar o Recurso (se não tiver):** ```powershell Install-WindowsFeature Windows-Server-Backup ``` 2. **Identificar os Volumes:** Use `Get-Volume` para saber onde estão seus Logs (ex: E:) e onde salvará o backup (ex: F: ou Share de Rede). 3. **Executar Backup VSS Full:** Este comando faz backup do volume E: (Logs/DB), salva em F: (Backup), e marca como VSS Full para limpar os logs. ```cmd wbadmin start backup -backupTarget:F: -include:E: -vssFull -quiet ``` _Nota: Substitua E: e F: pelas letras corretas._ **Se falhar:** Verifique se o disco de destino tem espaço ou se o serviço `Volume Shadow Copy` está rodando. --- ## 3. Importação e Exportação (PST) ### Pré-requisitos 1. O usuário que roda o comando precisa de permissão explicita: ```powershell New-ManagementRoleAssignment -Role "Mailbox Import Export" -User "DOMINIO\Administrador" ``` _Feche e abra o PowerShell após rodar isso._ 2. É obrigatório usar um caminho de rede (UNC) compartilhado (ex: `\\SRVCGDVIEXCH001\PSTs`), mesmo que esteja no próprio servidor. O serviço `Exchange Trusted Subsystem` precisa de permissão de Leitura/Gravação nessa pasta. ### Exportar Caixa para PST ```powershell New-MailboxExportRequest -Mailbox "usuario" -FilePath "\\172.16.150.150\share\usuario.pst" ``` ### Importar PST para Caixa ```powershell New-MailboxImportRequest -Mailbox "usuario" -FilePath "\\172.16.150.150\share\backup_antigo.pst" ``` ### Acompanhar o Andamento ```powershell Get-MailboxExportRequest | Get-MailboxExportRequestStatistics # ou Get-MailboxImportRequest | Get-MailboxImportRequestStatistics ``` ### Limpar Requisições Concluídas O Exchange não limpa o histórico sozinho. ```powershell Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest -Confirm:$false ```