NEWS

[POWERSHELL] Script sao lưu backup và nén database sqlserver

[POWERSHELL] Script sao lưu backup và nén database sqlserver
Đăng bởi: Thảo Meo - Lượt xem: 3798 08:28:14, 01/04/2021C#   In bài viết

Xin chào các bạn, bài viết hôm nay mình chia sẻ đến cho các bạn Script Powershell dùng để Sao lưu backup database Sqlserver một cách nhanh chóng chỉ cần một click.

Công việc backup database thường thì các bạn sẽ sử dụng Sqlserver Management Studio để backup.

Và khi backup database thường xuyên thì chúng ta sẽ mất rất nhiều thao tác.

Trên PowerShell có cung cấp cho chúng ta các lệnh làm việc với Database Sqlserver.

Giúp chúng ta Backup và nén file một cách dễ dàng và nhanh chóng.

backup_database_powershell

Script backup database Powershell:

#Import SQL Module
Import-Module SQLPS

#Create Variables
$Server = "LOCALHOST"
$Database = "anson1"
$BackupFolder = "C:Backup"
$BackupTemp = "C:Backup" #Added so you don't get old backup zips included in the current backup
$DT = Get-Date -Format MM-dd-yyyy
$FilePath = "$($BackupTemp)$($Database)_db_$($dt).bak"


#Call SQL Command
Backup-SqlDatabase -ServerInstance $Server -Database $Database -BackupFile $FilePath

#Zip the backup (BAK) that is created
Add-Type -Assembly "System.IO.Compression.FileSystem";
[System.IO.Compression.ZipFile]::CreateFromDirectory($BackupTemp, "$($BackupFolder)$($Database)_db_$($DT).zip");

#Remove THIS .bak file to save space
##$ThisBak=(Get-Date).AddDays(-7).ToString("MM-dd-yyy")
Remove-Item $FilePath

#Remove Old ZIP backup Files.  Our retention is 7 days
$OldFile=(Get-Date).AddDays(-7).ToString("MM-dd-yyy")
Remove-Item "$($BackupFolder)$($Database)_db_$($OldFile).zip"

Script Restore Database Sqlserver:

$server = 'localhost'
$dbname = 'anson1'
$diffpath = "C:BACKUP"

    # The following backup file names are based on dates and therefore dynamic
$dir = $diffpath + "anson1_db_04-01-2021.bak"
if ($fullbkupfile = Get-ChildItem -Path $dir | Sort-Object LastWriteTime -Descending | Select-Object -First 1) 
{}
else { Return } # Exit the script because the main backup file cannot be reached.

# Check to see whether a differential backup is available
$dir = $diffpath + "anson1_db_04-01-2021.bak"
$diffbkupfile = (Get-ChildItem -Path $dir | Sort-Object LastWriteTime -Descending | Select-Object -First 1)
if ($diffbkupfile.LastWriteTime -gt $fullbkupfile.LastWriteTime)  {}
else {
    $diffbkupfile = NULL;
    Write-Host "Differential file is older than the FULL backup... ignoring`n`n`n"    
}


$query = 'Use [Master]
GO
ALTER DATABASE ' + $dbname + ' SET OFFLINE WITH ROLLBACK IMMEDIATE'
Invoke-Sqlcmd -ServerInstance $server -Query $query

if ($diffbkupfile) {
    Write-Host "Restoring file:" + $fullbkupfile
    Restore-SqlDatabase -ServerInstance $server -Database $dbname -BackupFile  $fullbkupfile -ReplaceDatabase `
        -NoRecovery | Out-Null
    Write-Host "Restoring file:" +  $diffbkupfile
    Restore-SqlDatabase -ServerInstance $server -Database $dbname -BackupFile  $diffbkupfile -ReplaceDatabase `
         | Out-Null   
} else {  # There is no differential backup - only a FULL backup present for restore
    Write-Host "Restoring file:" + $fullbkupfile
    Restore-SqlDatabase -ServerInstance $server -Database $dbname -BackupFile  $fullbkupfile -ReplaceDatabase `
        | Out-Null
}

Các bạn chỉnh sửa các thông tin trong script để thực hiện nhé các bạn.

Thanks for watching!

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[POWERSHELL] Script sao lưu backup và nén database sqlserver
Đăng bởi: Thảo Meo - Lượt xem: 3798 08:28:14, 01/04/2021C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.