Microsoft 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"
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("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'
$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("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