Published on

November 5, 2022

Автоматизация резервного копирования и сжатия SQL Server с помощью PowerShell

В современном цифровом мире данные являются одним из самых ценных активов для любой организации. Важно иметь надежную стратегию резервного копирования, чтобы обеспечить безопасность и доступность данных. В этой статье мы рассмотрим, как автоматизировать процесс резервного копирования и сжатия баз данных SQL Server с помощью PowerShell.

Проверка целостности базы данных SQL Server и резервного копирования

Перед выполнением резервного копирования необходимо проверить целостность базы данных SQL Server. Это можно сделать с помощью команды DBCC CHECKDB, которая проверяет согласованность и целостность базы данных. После успешной проверки целостности можно приступить к процессу резервного копирования.


-- Проверка целостности
DBCC CHECKDB

-- Установка динамической строки даты
DECLARE @savestring VARCHAR(250) = 'I:\Backups\Data2017_' + CONVERT(VARCHAR(12),GETDATE(),112) +'.BAK'

-- Резервное копирование
BACKUP DATABASE Data2017
TO DISK = @savestring

-- Проверка резервного файла
RESTORE VERIFYONLY
FROM DISK = @savestring
    

Рекомендуется регулярно выполнять проверку целостности, особенно для критических баз данных, где потеря данных неприемлема. Пропуск проверки целостности может привести к обнаружению поврежденных резервных копий баз данных, что приведет к значительной потере данных.

Сжатие файлов резервной копии базы данных SQL Server

После завершения резервного копирования можно приступить к сжатию файлов резервной копии. PowerShell предоставляет удобный способ архивирования файлов с использованием класса System.IO.Compression.FileSystem. Мы можем создать функцию PowerShell, которая принимает путь к файлу резервной копии, папку назначения и общие ресурсы, куда будут скопированы файлы zip.


Function ZipCopy-BAKs {
    Param(
        [Parameter(Mandatory=$true)][string]$filepath
        , [Parameter(Mandatory=$true)][string]$store
        , [Parameter(Mandatory=$true)][string]$share1
        , [Parameter(Mandatory=$false)][string]$share2
    )
    Process
    {
        $zip = (Get-Date).ToString("yyyyMMdd") + ".zip"

        if (Test-Path $store) { Remove-Item $store -Recurse -Force }
        New-Item -ItemType Directory -Path $store

        $allbakfiles = Get-ChildItem $filepath -Filter *.Bak | Where-Object { $_.CreationTime -gt (Get-Date).AddHours(-12) }

        foreach ($bakfile in $allbakfiles)
        {
            Copy-Item -Path $bakfile.FullName -Destination $store
        }

        Add-Type -AssemblyName System.IO.Compression.FileSystem
        [System.IO.Compression.ZipFile]::CreateFromDirectory($store,"$share1$zip")
        if ($share2) { [System.IO.Compression.ZipFile]::CreateFromDirectory($store,"$share2$zip") }

        Remove-Item $store -Recurse -Force
    }
}

ZipCopy-BAKs -filepath "I:\backups\" -store "I:\backups\store\" -share1 "H:\backups\bakshare\" -share2 "G:\backups\bakshare\"
    

Вышеуказанная функция PowerShell создает zip-файл с текущей датой и временем в качестве имени файла. Она копирует последние файлы резервной копии из указанного пути файла во временную папку хранения. Затем она использует класс System.IO.Compression.FileSystem для создания zip-файла из временной папки хранения и копирует его в указанные общие ресурсы. Наконец, она удаляет временную папку хранения для очистки файлов.

Автоматизируя этот процесс, вы можете обеспечить регулярное архивирование и копирование резервных копий SQL Server в безопасные места, обеспечивая дополнительный уровень защиты для ваших данных.

Заключение

Автоматизация процесса резервного копирования и сжатия баз данных SQL Server является важным условием для поддержания целостности и доступности данных. С помощью PowerShell вы можете легко создавать сценарии для проверки базы данных, выполнения резервного копирования и сжатия файлов резервной копии. Следуя этим bewt практикам, вы можете обеспечить безопасность и доступность ваших ценных данных.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.