PowerShell Kullanarak Backup Dosyalarını Taşımak

MSSQL üzerinde yaptığımız bakım işlemlerini otomatize etmek için hem File System’de (dosya sistemi) hem de SQL Server’da işlem yapabilecek kolay anlaşılır ve manipüle edilebilir bir dil kullanmak çok yarar sağlamaktadır.

Bu tarz işlemler için gerek işlem kolaylığı gerekse kütüphane fazlalığı ayrıca SQL Server üzerinden çalıştırılabiliyor oluşu sebebi ile PowerShell uygun bir tercihdir.

Backup Dosyalarının Neden Taşınması Gerekebilir ?

  • Güvenlik sebebi ile backup alındıktan sonra dışardan erişimin kısıtlı olduğu bir sunucuya taşınması gerekebilir.
  • Disaster’dan korunma sebebi ile backup dosyasının birden fazla yerde kopyası oluşturulması gerekebilir.
  • Backup dosyasının kullanılabilir olduğundan %100 emin olmak için başka bir sunucuya restore edilmek istenebilir.
  • DBCC kontrollerini gerçekleştirmek için production (canlı) üzerinde yük oluşmaması adına backup dosyası başka bir sunucuya kopyalanıp restore edildikten sonra orada DBCC çalıştırılabilir.
  • Test/Dev ortamlarının güncellenmesi için belirli aralıklarla production backup’ının taşınması gerekebilir.

Not: Taşıma işlemleri manuel olarakta yapılabilir ancak PowerShell işlemlerimizi otomatize etmemiz için gereklidir.

Powershell SQL Server da Job yapısı kullanılarak taşıma işlemleri otomatize edilebilir.

Bir dosyanın taşınamsı için gerekli PowerShell kodu;

$SourceFileList = Get-ChildItem Microsoft.PowerShell.Core\FileSystem::\\Dbbackup\dbadb |Select Name
$SourceFilePath = "\\Dbbackup\dbadb\"
$DestinationFilePath = "Z:\Backup\"
$TransferFileList = $SourceFileList | Sort -Property Name -Descending | select -First (1)
$FullPath = $SourceFilePath + $TransferFileList.Name


Copy-Item -path Microsoft.PowerShell.Core\FileSystem::$FullPath -Destination Microsoft.PowerShell.Core\FileSystem::$DestinationFilePath -Force

Bu kodu kullanırken dikkat edilmesi gereken Source ve Destination sunucularının hangisinde çalıştırılacak ise FilePath‘ler yazılırken ona göre düzenlenmelidir.

Örneğin yukarıdaki kod Destination‘da kullanılacak şekilde yazılmıştır.

Birden fazla dosyanın taşınması için gerekli PowerShell kodu;

$SourceFolderList = Get-ChildItem Microsoft.PowerShell.Core\FileSystem::R:\LogBackup
$SourceFolderPath = "R:\LogBackup\"

Foreach ($SourceFolderName in $SourceFolderList.Name)
{
    $SourceFullList = $SourceFolderPath + $SourceFolderName
    $SourceFileList = Get-ChildItem Microsoft.PowerShell.Core\FileSystem::$SourceFullList |Select Name,LastWritetime
    $DestinationPath = "\\Dbbackup\log\" +$SourceFolderName
    $DestinationList = Get-ChildItem Microsoft.PowerShell.Core\FileSystem::$DestinationPath |Select Name,LastWriteTime
    $TransferList = $SourceFileList | Where {$_.LastWritetime -NotIn($DestinationList.LastWritetime)}


    Foreach ($FileName in $TransferList.Name)
    {
        $FullPath = $SourceFolderPath + $SourceFolderName +"\"+ $FileName
        Copy-Item -path Microsoft.PowerShell.Core\FileSystem::$FullPath -Destination Microsoft.PowerShell.Core\FileSystem::$DestinationPath -Force
    }
}

Yukarıdaki kodda birden fazla klasör içerisindeki birden fazla dosyanın taşınması için gerkenler yazılmıştır.

Kodun çalışma mantığı ; dosyaların kopyalanacağı yerde(destination) bulunmayan dosyaları kopyalamaktır. Burada kullanılan filtreleme tarih (LastWritetime) üzerindedir .

Yukarıdaki kod bloğu Log Backup dosyalarını yedeklemek için kullanılmaktadır. Source sunucuda çalışacak şekilde düzenlenmiştir.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s