A segurança dos backups é um dos principais pilares na administração de bancos de dados. Ter uma cópia externa garante a recuperação dos dados em caso de falhas. Neste artigo, vamos demonstrar como configurar o backup do SQL Server utilizando o Rclone para enviar os arquivos para um bucket da Oracle Cloud.
Criando o Bucket na Oracle Cloud
- Acesse a Oracle Cloud: https://cloud.oracle.com
- Navegue até a seção de Armazenamento e crie um Bucket

3. Salve o namespace gerado, pois ele será necessário para configuração

Gerando as Chaves de Acesso
- Acesse a Oracle Cloud e crie uma Secret Key e Access Key


Anote a Secret Key no momento da geração, pois não será exibida novamente

Instalando e Configurando o Rclone no Windows
1. Download do Rclone
Baixe a versão mais recente do Rclone para Windows: https://rclone.org/downloads/

2. Configuração Inicial do Rclone
- Abra o Prompt de Comando (CMD)
- Digite
rclone.exe config
e siga os passos abaixo:- Escolha n para criar uma nova configuração
- Nomeie a configuração como oci_s3
- Escolha
s3
como tipo de armazenamento - Selecione Other como provedor
- Escolha
1
para inserir manualmente as credenciais - Insira sua Access Key e Secret Key
- Informe a região (exemplo:
sa-saopaulo-1
) - Configure o endpoint no formato:
https://NAMESPACE.compat.objectstorage.REGION.oraclecloud.com
- O restante da configuração pode manter default, apenas pressionando enter.

3. Teste a sua configuração

Criando o Script PowerShell para Backup Automático
Agora que o Rclone está configurado, podemos criar um script PowerShell para automatizar o backup e o envio para a Oracle Cloud.
Exemplo de Script PowerShell:
Este script tem como entrada:
- backupFolder : Para o local onde está o backup
- RcloneConfig: Onde está o config do Rclone, caso deseje mudar.
- bucketName: Caminho do Bucket a ser criado
- remote: Qual configuração irá utilizar do Rclone, lembra aquele oci_s3?
- logDir: Diretorio de logs.
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# Diretório de backup
$backupFolder = "K:\BACKUPS\LOG"
$RcloneConfig = "C:\zabbix\scripts\rclone.conf"
# Nome do bucket na OCI
$bucketName = "BACKUP-MSSQL-OCI/LOG"
# Nome do remote configurado no Rclone
$remote = "oci_s3"
# Diretório de logs
$logDir = "C:\zabbix\scripts\logs"
# Criar diretório de logs se não existir
if (!(Test-Path -Path $logDir)) {
New-Item -ItemType Directory -Path $logDir | Out-Null
}
# Criar nome do log por dia
$logFile = "$logDir\backup_LOG_$(Get-Date -Format 'yyyyMMdd_HHmm').log"
# Data e hora atual
$date = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Write-Output "[$date] Iniciando verificação e sincronização..." | Out-File -Append -Encoding utf8 $logFile
# Função para verificar se um arquivo está em uso
function Test-FileInUse {
param([string]$filePath)
try {
$file = [System.IO.File]::Open($filePath, 'Open', 'Read', 'None')
if ($file) { $file.Close() }
return $false # Arquivo não está em uso
} catch {
return $true # Arquivo está em uso
}
}
# Definir os diretórios do dia atual e do dia anterior
$today = Get-Date -Format 'yyyyMMdd'
$yesterday = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
$todayDir = Join-Path $backupFolder $today
$yesterdayDir = Join-Path $backupFolder $yesterday
# Lista de diretórios válidos
$validDirs = @()
if (Test-Path $todayDir) { $validDirs += $todayDir }
if (Test-Path $yesterdayDir) { $validDirs += $yesterdayDir }
# Criar uma lista de arquivos prontos para upload
$filesToSync = @()
foreach ($dir in $validDirs) {
Get-ChildItem -Path $dir -Recurse -File | ForEach-Object {
$filePath = $_.FullName
if (-not (Test-FileInUse $filePath)) {
$filesToSync += $filePath
} else {
Write-Output "[$date] Ignorando (arquivo ainda em uso): $filePath" | Out-File -Append -Encoding utf8 $logFile
}
}
}
# Se houver arquivos prontos, enviar para o OCI
if ($filesToSync.Count -gt 0) {
Write-Output "[$date] Enviando $( $filesToSync.Count ) arquivos para OCI..." | Out-File -Append -Encoding utf8 $logFile
# Criar diretório no bucket
$bucketPathToday = "$remote`:$bucketName/$today"
$bucketPathYesterday = "$remote`:$bucketName/$yesterday"
# Enviar arquivos com Rclone
if (Test-Path $todayDir) {
& "C:\Program Files\Rclone\rclone.exe" copy "$todayDir" "$bucketPathToday" --config "$RcloneConfig" --progress --transfers 8 --checkers 16 --fast-list --log-file="$logFile" --log-level DEBUG
}
if (Test-Path $yesterdayDir) {
& "C:\Program Files\Rclone\rclone.exe" copy "$yesterdayDir" "$bucketPathYesterday" --config "$RcloneConfig" --progress --transfers 8 --checkers 16 --fast-list --log-file="$logFile" --log-level DEBUG
}
Write-Output "[$date] Sincronização concluída!" | Out-File -Append -Encoding utf8 $logFile
} else {
Write-Output "[$date] Nenhum arquivo disponível para sincronização." | Out-File -Append -Encoding utf8 $logFile
}
Agendando o Backup no SQL Server Agent
- Abra o SQL Server Management Studio (SSMS)
- Navegue até SQL Server Agent > Jobs
- Abra o Job de Backup que é necessário criar o upload.
- Escolha CmdExec como tipo de comando e insira o script acima (Ajustado ao seu ambiente).
- Insira a chamada do script powershell
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "C:\scripts\furushima_send_oci_log.ps1"
- Defina um agendamento adequado (diário, horário, etc.)

E Então…. estão nossos backups feito upload para o OCI S3, de forma automatizada pós backup! 🙂
