# [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
```
