Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 1
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 2
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 3
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 4
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 5
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"
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à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"
Hì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("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.Incremental = 1
$fil=new-object "Microsoft.SqlServer.Management.Smo.BackupDeviceItem"
$fil.DeviceType='File'
$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
)
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.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
Hì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
Hì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("Microsoft.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+ "_"+ [DateTime]::Today.ToString("yyyy_MM_dd")+$extenstion)
$bck.Devices.Add($fil)
$bck.Database=$DatabaseName
$bck.SqlBackup($srv)
write-host $text1 of $Databasename done
Hì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.
Hì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.
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 7
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 8
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 9
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 10
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 11