Bây giờ hãy giả dụ nữa là chúng ta muốn thực hiện một backup đầy đủ cho cơ sở dữ liệu vào thư mục c:\test.. Hình 1.0 Kịch bản này sẽ tạo một backup đầy đủ của cơ sở dữ liệu MyDatabase v
Trang 1Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 6
Nguồn : quantrimang.com
The MAK
Trong phần 6 này, chúng tôi sẽ giới thiệu tiếp cho các bạn cách sử dụng PowerShell và các kịch bản để backup cơ sở dữ liệu
Phương pháp 1
Hãy giả dụ rằng chúng ta có một cơ sở dữ liệu ‘MyDatabase’ trên máy chủ
‘HOME’ Bây giờ hãy giả dụ nữa là chúng ta muốn thực hiện một backup đầy đủ
cho cơ sở dữ liệu vào thư mục c:\test
Thực thi lần lượt từng lệnh cmdlet một Tham khảo hình 1.0
[System.Reflection.Assembly]::LoadWithPartialName
("Microsoft.SqlServer.Smo") | out-null
[System.IO.Directory]::CreateDirectory("C:\test") | out-null
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server"
"HOME"
$bck=new-object "Microsoft.SqlServer.Management.Smo.Backup"
$bck.Action = 'Database'
$fil=new-object
"Microsoft.SqlServer.Management.Smo.BackupDeviceItem"
$fil.DeviceType='File'
$fil.Name=[System.IO.Path]::Combine("C:\test", "MyDatabase" +".bak")
$bck.Devices.Add($fil)
$bck.Database="MyDatabase"
$bck.SqlBackup($srv)
write-host "Backup of MyDatabase done"
Trang 2Hình 1.0
Kịch bản này sẽ tạo một backup đầy đủ của cơ sở dữ liệu MyDatabase vào thư mục c:\test như hình bên dưới (Tham khảo hình 1.1)
Hình 1.1
Phương pháp 2
Hãy giả dụ rằng chúng ta có một cơ sở dữ liệu ‘MyDatabase’ trên máy chủ
‘HOME’ và muốn thực hiện một backup bản ghi Transaction của các cơ sở dữ
liệu vào thư mục c:\test Thực hiện các lệnh cmdlet dưới đây, lần lượng từng
lệnh một (tham khảo hình 1.2)
[System.Reflection.Assembly]::LoadWithPartialName
("Microsoft.SqlServer.Smo") | out-null
[System.IO.Directory]::CreateDirectory("C:\test") | out-null
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server"
"HOME"
$bck=new-object "Microsoft.SqlServer.Management.Smo.Backup"
$bck.Action = 'Log'
$fil=new-object
"Microsoft.SqlServer.Management.Smo.BackupDeviceItem"
$fil.DeviceType='File'
$fil.Name=[System.IO.Path]::Combine("C:\test", "MyDatabase" +".trn")
$bck.Devices.Add($fil)
$bck.Database="MyDatabase"
$bck.SqlBackup($srv)
write-host "Log Backup of MyDatabase done"
Trang 3Hình 1.2 Kịch bản này sẽ thực hiện một backup bản ghi Transaction của cơ sở dữ liệu MyDatabase vào thư mục c:\test, như thể hiện trong hình bên dưới (tham khảo hình 1.3)
Hình 1.3
Phương pháp 3
Hãy giả dụ rằng chúng ta có một cơ sở dữ liệu ‘MyDatabase’ trên máy chủ
‘HOME’ và muốn thực hiện một backup Differential cho các cơ sở dữ liệu vào
thư mục c:\test Thực hiện theo các lệnh dưới đây, lần lượt từng lệnh một (tham khảo hình 1.4)
[System.Reflection.Assembly]::LoadWithPartialName("Microsof t.SqlServer.Smo") | out-null
[System.IO.Directory]::CreateDirectory("C:\test") | out-null
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server"
"HOME"
$bck=new-object "Microsoft.SqlServer.Management.Smo.Backup"
$bck.Incremental = 1
$fil=new-object
"Microsoft.SqlServer.Management.Smo.BackupDeviceItem"
$fil.DeviceType='File'
Trang 4$fil.Name=[System.IO.Path]::Combine("C:\test", "MyDatabase" +".diff")
$bck.Devices.Add($fil)
$bck.Database="MyDatabase"
$bck.SqlBackup($srv)
write-host "Differential Backup of MyDatabase done"
Hình 1.4
Kịch bản này sẽ thực hiện backup Differential của cơ sở dữ liệu MyDatabase vào thư mục c:\test như hình bên dưới (tham khảo hình 1.5)
Hình 1.5
Phương pháp 4
Bây giờ chúng ta hãy nối phương pháp 1, phương pháp 2 và phương pháp 3 thành một kịch bản PowerShell sẽ lấy tên Server, tên Database, kiểu Backup và thư mục Folder với tư cách là các tham số để nó dễ dàng được thực hiện một cách tự động Tạo kịch bản Backup.ps1 dưới đây trong thư mục C:\PS (tham khảo hình 1.6, 1.7)
param (
[string] $ServerName,
[string] $DatabaseName,
[string] $Backuptype ,
[string] $BackupPath
Trang 5)
[System.Reflection.Assembly]::LoadWithPartialName("Microsof t.SqlServer.Smo") | out-null
[System.IO.Directory]::CreateDirectory($BackupPath) | out-null
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server"
"$servername"
$bck=new-object "Microsoft.SqlServer.Management.Smo.Backup"
if ($Backuptype -eq "FULL")
{
$bck.Action = 'Database'
$extenstion=".BAK"
$text1="Full Backup "
}
if ($Backuptype -eq "TRAN")
{
$bck.Action = 'Log'
$extenstion=".LOG"
$text1="Transactional Log Backup "
}
if ($Backuptype -eq "DIFF")
{
$bck.Incremental = 1
$extenstion=".DIFF"
$text1="Differential Backup "
}
$fil=new-object
"Microsoft.SqlServer.Management.Smo.BackupDeviceItem"
$fil.DeviceType='File'
$fil.Name=[System.IO.Path]::Combine($BackupPath,
$DatabaseName+$extenstion)
$bck.Devices.Add($fil)
$bck.Database=$DatabaseName
$bck.SqlBackup($srv)
write-host $text1 of $Databasename done
Trang 6Hình 1.6
Hình 1.7
Bây giờ chúng ta hãy thực thi kịch bản PowerShell ở trên với các tham số dưới đây (tham khảo hình 1.8)
./backup.ps1 HOME MyDatabase FULL C:\test
./backup.ps1 HOME MyDatabase DIFF C:\test
./backup.ps1 HOME MyDatabase TRAN C:\test
Trang 7Hình 1.8 Thực thi kịch bản ở trên cho kết quả dưới đây (tham khảo hình 1.8 và 1.9)
Hình 1.9
Phương pháp 5
Hãy giả dụ rằng chúng ta cần bổ sung thêm tem Datevào với tên file khi thực hiện backup bằng kịch bản ở trên
Để thực hiện điều đó, bạn hãy cập nhật kịch bản với đoạn mã dưới đây (tham khảo hình 2.0)
param (
[string] $ServerName,
[string] $DatabaseName,
[string] $Backuptype ,
[string] $BackupPath
)
[System.Reflection.Assembly]::LoadWithPartialName("Microsof t.SqlServer.Smo") | out-null
[System.IO.Directory]::CreateDirectory($BackupPath) | out-null
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server"
"$servername"
$bck=new-object "Microsoft.SqlServer.Management.Smo.Backup"
Trang 8if ($Backuptype -eq "FULL")
{
$bck.Action = 'Database'
$extenstion=".BAK"
$text1="Full Backup "
}
if ($Backuptype -eq "TRAN")
{
$bck.Action = 'Log'
$extenstion=".LOG"
$text1="Transactional Log Backup "
}
if ($Backuptype -eq "DIFF")
{
$bck.Incremental = 1
$extenstion=".DIFF"
$text1="Differential Backup "
}
$fil=new-object
"Microsoft.SqlServer.Management.Smo.BackupDeviceItem"
$fil.DeviceType='File'
$fil.Name=[System.IO.Path]::Combine($BackupPath,
$DatabaseName+ "_"+
[DateTime]::Today.ToString("yyyy_MM_dd")+$extenstion)
$bck.Devices.Add($fil)
$bck.Database=$DatabaseName
$bck.SqlBackup($srv)
write-host $text1 of $Databasename done
Trang 9Hình 2.0
Lúc này chúng ta hãy thực thi kịch bản PowerShell ở trên với các tham số dưới đây (tham khảo hình 2.1)
./backup.ps1 HOME\SQLExpress Admin FULL C:\test
./backup.ps1 HOME\SQLExpress Admin DIFF C:\test
./backup.ps1 HOME\SQLExpress Admin TRAN C:\test
Lưu ý: HOME\SQLExpress là một ví dụ được đặt tên của sql server trên host
HOME;
Admin là tên cơ sở dữ liệu
Thực thi kịch bản ở trên cho kết quả như hình 2.1 và 2.2
Trang 10Hình 2.1
Hình 2.2
Kết luận
Phần 6 của loạt bài này chúng tôi đã minh chứng cho các bạn cách sử dụng PowerShell và kịch bản PowerShell để thực hiện một backup hoàn chỉnh - Full Backup, Transaction Log backup và Differential backup đối với cơ sở dữ liệu với tên file đã được dán tem ngoài