欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
!!! PowerShell應用之-批量還原數據庫(支持完整,差異,事務(wù)日志)

直接切入主題,今天我們繼續來(lái)描述PowerShell的一個(gè)應用,實(shí)現批量還原SQL Server數據庫,可以支持SQL Server 2005\2008數據庫。在本章中,我們將涉及到幾個(gè)要點(diǎn):

  • Microsoft.SqlServer.Management.Smo.Restore類(lèi)
  • System.Data.DataTable類(lèi)
  • PowerShell中的函數(Function)
  • PowerShell命令Get-Unique

 

 

Microsoft.SqlServer.Management.Smo.Restore類(lèi)


 

在PowerShell要實(shí)現還原SQL Server數據庫,我們需要應用到Microsoft.SqlServer.Management.Smo.Restore類(lèi)。它為我們提供了豐富的還原數據庫過(guò)程需要的各種屬性和方法。首先,提供一份數據庫備份文件,我們要還原它,我們需要知道備份文件的標頭信息(backup header information),和備份文件里組成(數據文件&日志文件)(the database and log files contained in the backup set)

要是在SQL Server Management Studio(SSMS)里,直接可以調用Transact-SQL:

use master
go
Restore Headeronly From Disk='E:\DBBackup\myDB2008_20111107_01.trn'
Restore filelistonly From Disk='E:\DBBackup\myDB2008_20111107_01.trn'

在執行結果的第一個(gè)記錄集中,我們可以找到對當前還原有用的信息,如DatabaseName,DackupType,Position,BackupStartDate。

第二個(gè)記錄集,可以找出數據庫myDB2008由兩個(gè)數據文件”myDB2008” & “myDB20082”和一個(gè)日志文件”myDB2008_log”組成。還描述有各文件的物理存儲位置,文件類(lèi)型,文件ID等信息。

要是我們想在PowerShell中通過(guò)Restore類(lèi)獲得類(lèi)似信息,需要通過(guò)Restore類(lèi)提供的兩個(gè)方法ReadBackupHeaderReadFileList .這兩個(gè)方法都是會(huì )返回一個(gè)DataTable對象。 存在著(zhù)備份文件的標頭信息和文件組成信息。

e.g.

$serverInstance="WINSERVER01\SQL2008DE01" 
$userName="sa"
$password="sql20081"

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("System.Data") | Out-Null

$ServerConnection =new-object "Microsoft.SqlServer.Management.Common.ServerConnection" $serverInstance,$userName, $password
$Server=new-object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection
$Restore=new-object "Microsoft.SqlServer.Management.Smo.Restore"

$Restore.Devices.AddDevice("E:\DBBackup\myDB2008_20111107_01.trn", [Microsoft.SqlServer.Management.Smo.DeviceType]::File)

$Read=$Restore.ReadBackupHeader($Server)
$FileRead=$Restore.ReadFileList($Server)

$Read | Format-Table -AutoSize -Wrap -Property DatabaseName,BackupType,BackupStartDate,Position
$FileRead | Format-Table -AutoSize -Wrap -Property LogicalName,PhysicalName,Type,FileId

 

我們在代碼中看到有一行:”$Restore.Devices.AddDevice("E:\DBBackup\myDB2008_20111107_01.trn", [Microsoft.SqlServer.Management.Smo.DeviceType]::File)”描述添加備份文件到當前的還原對象$Restore中,這樣我們才可以使用方法ReadBackupHeaderReadFileList讀取對應的信息。如果一個(gè)文件里面含有多個(gè)備份,當我們只需要讀取某一個(gè)備份文件的標頭信息、文件組成信息,就要先設置$Restore的屬性FileNumber。系統預設屬性FileNumber為0,方法ReadBackupHeader會(huì )讀取所有文件,方法ReadFileList會(huì )默認讀取第1個(gè)備份的文件組成內容。

e.g.

 

基本了解方法Restore類(lèi)中的方法ReadBackupHeaderReadFileList,我們接下來(lái)的就要實(shí)現如何還原數據庫,在Restore類(lèi)提供有一個(gè)還原數據庫的方法SqlRestore。

e.g.

$serverInstance="WINSERVER01\SQL2008DE01" 
$userName="sa"
$password="sql20081"

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("System.Data") | Out-Null

$ServerConnection =new-object "Microsoft.SqlServer.Management.Common.ServerConnection" $serverInstance,$userName, $password
$Server=new-object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection
$Restore=new-object "Microsoft.SqlServer.Management.Smo.Restore"

$Restore.Devices.AddDevice("E:\DBBackup\test.bak", [Microsoft.SqlServer.Management.Smo.DeviceType]::File)

$Restore.Database="test"
$Restore.FileNumber=1
$Restore.ReplaceDatabase=$true
$Restore.Script($Server)
$Restore.SqlRestore($Server)

調用方法$Restore.FileNumber=1 #備份文件編號,當一個(gè)備份文件包含多個(gè)備份的時(shí)候,需要設置哪一個(gè)文件編號,不然系統會(huì )默認還原文件編號為1的備份。
$Restore.ReplaceDatabase=$true #是否覆蓋現有數據庫

代碼$Restore.Script($Server),只是顯示出還原的Transact-SQL語(yǔ)句。當然還有其他的屬性,如

$Restore.Action 描述還原的是數據庫還是日志,默認是數據庫.

$Restore.KeepReplication 描述是否保留復制設置。默認保留。

$Restore.NoRecovery 描述指定不發(fā)生回滾。從而使前滾按順序在下一條語(yǔ)句中繼續進(jìn)行。如,當還原(完整+差異) 或還原(完整+事務(wù)日志),需要設置。

 

有些時(shí)候我們還原數據庫,碰到一些應用程序正在使用要還原的數據庫。那么我們需要先終止對應的進(jìn)程,不然還原會(huì )報錯。在Restore類(lèi)沒(méi)有提供終止進(jìn)程的方法,需要借助Server類(lèi)的方法KillAllProcesses來(lái)刪除某一數據庫的所有進(jìn)程。

e.g.

$Server.KillAllProcesses($Restore.Database)

 

 

System.Data.DataTable類(lèi)


 

在前面我們說(shuō)到Restore類(lèi)的方法ReadBackupHeaderReadFileList能返回一個(gè)DataTable對象,我們在后面的例子中會(huì )使用到DataTable對象,來(lái)存儲備份的標頭信息和文件組成信息。

e.g.


[System.Reflection.Assembly]::LoadWithPartialName("System.Data") | Out-Null

$ReadBackupHeader=New-Object "System.Data.DataTable"
$ReadBackupHeader.Columns.Add("DatabaseName","String") |Out-Null
$ReadBackupHeader.Columns.Add("BackupType","Int16") |Out-Null
$ReadBackupHeader.Columns.Add("BackupStartDate","DateTime") |Out-Null
$ReadBackupHeader.Columns.Add("BakFile","String") |Out-Null
$ReadBackupHeader.Columns.Add("NoRecovery","Boolean") |Out-Null
$ReadBackupHeader.Columns.Add("Position","Int16") |Out-Null


$ReadFileList=New-Object "System.Data.DataTable"
$ReadFileList.Columns.Add("DatabaseName","String") |Out-Null
$ReadFileList.Columns.Add("LogicalName","String") |Out-Null
$ReadFileList.Columns.Add("PhysicalName","String") |Out-Null
$ReadFileList.Columns.Add("Type","String") |Out-Null
$ReadFileList.Columns.Add("FileId","Int16") |Out-Null
$ReadFileList.Columns.Add("BakFile","String") |Out-Null
$ReadFileList.Columns.Add("FileNumber","Int16") |Out-Null

定義$ReadBackupHeaderd對象來(lái)存儲Restore類(lèi)的方法ReadBackupHeader返回的結果集。定義$ReadFileList對象來(lái)存儲Restore類(lèi)的方法ReadFileList返回的結果集。后面的實(shí)際例子我們還將應用到增加和刪除行的方法.

#增加行
$newRow=$ReadBackupHeader.NewRow()
$newRow["DatabaseName"]="myDB"
$newRow["BackupType"]=2
$newRow["BackupStartDate"]="2011-11-8"
$newRow["BakFile"]=""
$newRow["NoRecovery"]=$true
$newRow["Position"]=1
$ReadBackupHeader.Rows.Add($newRow)
$ReadBackupHeader.AcceptChanges()

#顯示行
$ReadBackupHeader | Format-Table -AutoSize -Wrap

#刪除行
$ReadBackupHeader.Rows[0].Delete()
$ReadBackupHeader.AcceptChanges()

#顯示行
$ReadBackupHeader | Format-Table -AutoSize -Wrap

代碼中有兩行“$ReadBackupHeader.AcceptChanges()”描述結束編輯狀態(tài)。

提示,引用MSDN對AcceptChanges方法的描述:在調用 AcceptChanges 時(shí),EndEdit 方法被隱式調用,以便終止任何編輯。 如果行的 RowState 原來(lái)是“Added”或“Modified”,則 RowState 將變成“Unchanged”。 如果 RowState 是“刪除”,則該行將被移除。

PowerShell中的函數(Function)


 

在本章中將應用到PowerShell中的Function。這里將應用到兩種用法:

function <名稱(chēng)> {

begin {<處理語(yǔ)句列表>}

process {<處理語(yǔ)句列表>}

end {<處理語(yǔ)句列表>}

}

e.g.

$DBList="DBA,DBB,DBC"

Function CheckDB
{
Param([String]$DBvar)

Begin
{
[Boolean]$CheckResult=$false
}
Process
{
If($DBList -eq "")
{
$CheckResult=$true
}
Else
{
Foreach($x In $DBList.Split(","))
{
If($x -eq $DBvar)
{
$CheckResult=$true
Break
}
}
}
}
End
{
Return $CheckResult
}
}

CheckDB 'A'

函數checkDB,主要是檢查輸入的$DBvar 是否在清單$DBList中。存在的時(shí)候返回True,不存在的時(shí)候返回False,有一種特殊的需求就是當$DBList為””的時(shí)候。后面的實(shí)際例子將會(huì )應用到這個(gè)函數。

函數的另外一種簡(jiǎn)單應用就是,不含Begin{},Process{},End{}部份,如

function <name> {

param ([type]$parameter1[,[type]$parameter2])

<statement list>

}

Function fn_UpdateRow
{
Param([string]$DatabaseName,[int32]$row)
$ReadBackupHeader.Rows[$row]["DatabaseName"]=$DatabaseName
$ReadBackupHeader.AcceptChanges()
}
$ReadBackupHeader | Format-Table -AutoSize -Wrap

fn_UpdateRow -DatabaseName "Test" -row 0
$ReadBackupHeader | Format-Table -AutoSize -Wrap

這里定義一函數fn_UpdateRow實(shí)現更新DataTable對象$ReadBackupHeader中的”DatabaseName”值。這里函數只作為處理過(guò)程,不返回任何值。

 

 

PowerShell命令Get-Unique


 

前面,我們使用DataTable對象$ReadBackupHeader暫存備份的標頭信息,當我們要還原一個(gè)目錄下面的所有備份文件,會(huì )把各個(gè)數據庫備份的標頭信息,暫存至$ReadBackupHeader中,再遍歷各個(gè)數據庫進(jìn)行還原。這里遍歷數據庫過(guò)程我們將應用到命令Get-Unique,過(guò)濾掉重復的數據庫名稱(chēng)。

e.g.

#遍歷數據庫    
Foreach( $db In $(Foreach($Row In $ReadBackupHeader.rows){$Row["DatabaseName"]}) | Sort-Object | Get-Unique )
{
#還原數據庫過(guò)程
}

其中“$(Foreach($Row In $ReadBackupHeader.rows){$Row["DatabaseName"]})”返回的是一個(gè)Array對象。

 

實(shí)際例子


 

 

View Code

 

 

上面腳本能實(shí)現的是,在一個(gè)目錄下存在著(zhù)各個(gè)數據庫的完整、差異、事務(wù)日志備份文件,可以根據設置“還原至時(shí)間點(diǎn)”還原某一個(gè)時(shí)間點(diǎn)的數據庫。支持一個(gè)備份文件包含多個(gè)備份,支持自定義還原數據庫清單。以上的腳本在PowerShell 2.0 + SQL Server2005+WinXP 和PowerShell 2.0 + SQL Server2008 R2+Windows Server 2008 R2 測試通過(guò)。

 

小結


 

本章我們描述了PowerShell2.0的一個(gè)應用,批量還原數據庫,支持完整、差異、事務(wù)日志備份文件,并對其中的一些知識要點(diǎn)提取出來(lái)說(shuō)明,讓我們對PowerShell 2.0 有進(jìn)一步的了解。在真實(shí)中,一些時(shí)候,特別是要在數據庫后臺批量處理一些任務(wù),我們發(fā)覺(jué)PowerShell能為我們帶來(lái)許多的方便。當然了,這里只是取1個(gè)批量的還原的例子,在實(shí)際的應用中,我們也許會(huì )碰到比當前例子更為復雜的情況,如頁(yè)面還原、段落還原、聯(lián)機還原等??筛鶕囟ǖ膱?chǎng)景,修改或編寫(xiě)更為復雜的腳本。直接切入主題,今天我們繼續來(lái)描述PowerShell的一個(gè)應用,實(shí)現批量還原SQL Server數據庫,可以支持SQL Server 2005\2008數據庫。在本章中,我們將涉及到幾個(gè)要點(diǎn):

  • Microsoft.SqlServer.Management.Smo.Restore類(lèi)
  • System.Data.DataTable類(lèi)
  • PowerShell中的函數(Function)
  • PowerShell命令Get-Unique

 

 

Microsoft.SqlServer.Management.Smo.Restore類(lèi)


 

在PowerShell要實(shí)現還原SQL Server數據庫,我們需要應用到Microsoft.SqlServer.Management.Smo.Restore類(lèi)。它為我們提供了豐富的還原數據庫過(guò)程需要的各種屬性和方法。首先,提供一份數據庫備份文件,我們要還原它,我們需要知道備份文件的標頭信息(backup header information),和備份文件里組成(數據文件&日志文件)(the database and log files contained in the backup set)

要是在SQL Server Management Studio(SSMS)里,直接可以調用Transact-SQL:

use master
go
Restore Headeronly From Disk='E:\DBBackup\myDB2008_20111107_01.trn'
Restore filelistonly From Disk='E:\DBBackup\myDB2008_20111107_01.trn'

在執行結果的第一個(gè)記錄集中,我們可以找到對當前還原有用的信息,如DatabaseName,DackupType,Position,BackupStartDate。

第二個(gè)記錄集,可以找出數據庫myDB2008由兩個(gè)數據文件”myDB2008” & “myDB20082”和一個(gè)日志文件”myDB2008_log”組成。還描述有各文件的物理存儲位置,文件類(lèi)型,文件ID等信息。

要是我們想在PowerShell中通過(guò)Restore類(lèi)獲得類(lèi)似信息,需要通過(guò)Restore類(lèi)提供的兩個(gè)方法ReadBackupHeaderReadFileList .這兩個(gè)方法都是會(huì )返回一個(gè)DataTable對象。 存在著(zhù)備份文件的標頭信息和文件組成信息。

e.g.

$serverInstance="WINSERVER01\SQL2008DE01" 
$userName="sa"
$password="sql20081"

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("System.Data") | Out-Null

$ServerConnection =new-object "Microsoft.SqlServer.Management.Common.ServerConnection" $serverInstance,$userName, $password
$Server=new-object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection
$Restore=new-object "Microsoft.SqlServer.Management.Smo.Restore"

$Restore.Devices.AddDevice("E:\DBBackup\myDB2008_20111107_01.trn", [Microsoft.SqlServer.Management.Smo.DeviceType]::File)

$Read=$Restore.ReadBackupHeader($Server)
$FileRead=$Restore.ReadFileList($Server)

$Read | Format-Table -AutoSize -Wrap -Property DatabaseName,BackupType,BackupStartDate,Position
$FileRead | Format-Table -AutoSize -Wrap -Property LogicalName,PhysicalName,Type,FileId

 

我們在代碼中看到有一行:”$Restore.Devices.AddDevice("E:\DBBackup\myDB2008_20111107_01.trn", [Microsoft.SqlServer.Management.Smo.DeviceType]::File)”描述添加備份文件到當前的還原對象$Restore中,這樣我們才可以使用方法ReadBackupHeaderReadFileList讀取對應的信息。如果一個(gè)文件里面含有多個(gè)備份,當我們只需要讀取某一個(gè)備份文件的標頭信息、文件組成信息,就要先設置$Restore的屬性FileNumber。系統預設屬性FileNumber為0,方法ReadBackupHeader會(huì )讀取所有文件,方法ReadFileList會(huì )默認讀取第1個(gè)備份的文件組成內容。

e.g.

 

基本了解方法Restore類(lèi)中的方法ReadBackupHeaderReadFileList,我們接下來(lái)的就要實(shí)現如何還原數據庫,在Restore類(lèi)提供有一個(gè)還原數據庫的方法SqlRestore。

e.g.

$serverInstance="WINSERVER01\SQL2008DE01" 
$userName="sa"
$password="sql20081"

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("System.Data") | Out-Null

$ServerConnection =new-object "Microsoft.SqlServer.Management.Common.ServerConnection" $serverInstance,$userName, $password
$Server=new-object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection
$Restore=new-object "Microsoft.SqlServer.Management.Smo.Restore"

$Restore.Devices.AddDevice("E:\DBBackup\test.bak", [Microsoft.SqlServer.Management.Smo.DeviceType]::File)

$Restore.Database="test"
$Restore.FileNumber=1
$Restore.ReplaceDatabase=$true
$Restore.Script($Server)
$Restore.SqlRestore($Server)

調用方法$Restore.FileNumber=1 #備份文件編號,當一個(gè)備份文件包含多個(gè)備份的時(shí)候,需要設置哪一個(gè)文件編號,不然系統會(huì )默認還原文件編號為1的備份。
$Restore.ReplaceDatabase=$true #是否覆蓋現有數據庫

代碼$Restore.Script($Server),只是顯示出還原的Transact-SQL語(yǔ)句。當然還有其他的屬性,如

$Restore.Action 描述還原的是數據庫還是日志,默認是數據庫.

$Restore.KeepReplication 描述是否保留復制設置。默認保留。

$Restore.NoRecovery 描述指定不發(fā)生回滾。從而使前滾按順序在下一條語(yǔ)句中繼續進(jìn)行。如,當還原(完整+差異) 或還原(完整+事務(wù)日志),需要設置。

 

有些時(shí)候我們還原數據庫,碰到一些應用程序正在使用要還原的數據庫。那么我們需要先終止對應的進(jìn)程,不然還原會(huì )報錯。在Restore類(lèi)沒(méi)有提供終止進(jìn)程的方法,需要借助Server類(lèi)的方法KillAllProcesses來(lái)刪除某一數據庫的所有進(jìn)程。

e.g.

$Server.KillAllProcesses($Restore.Database)

 

 

System.Data.DataTable類(lèi)


 

在前面我們說(shuō)到Restore類(lèi)的方法ReadBackupHeaderReadFileList能返回一個(gè)DataTable對象,我們在后面的例子中會(huì )使用到DataTable對象,來(lái)存儲備份的標頭信息和文件組成信息。

e.g.


[System.Reflection.Assembly]::LoadWithPartialName("System.Data") | Out-Null

$ReadBackupHeader=New-Object "System.Data.DataTable"
$ReadBackupHeader.Columns.Add("DatabaseName","String") |Out-Null
$ReadBackupHeader.Columns.Add("BackupType","Int16") |Out-Null
$ReadBackupHeader.Columns.Add("BackupStartDate","DateTime") |Out-Null
$ReadBackupHeader.Columns.Add("BakFile","String") |Out-Null
$ReadBackupHeader.Columns.Add("NoRecovery","Boolean") |Out-Null
$ReadBackupHeader.Columns.Add("Position","Int16") |Out-Null


$ReadFileList=New-Object "System.Data.DataTable"
$ReadFileList.Columns.Add("DatabaseName","String") |Out-Null
$ReadFileList.Columns.Add("LogicalName","String") |Out-Null
$ReadFileList.Columns.Add("PhysicalName","String") |Out-Null
$ReadFileList.Columns.Add("Type","String") |Out-Null
$ReadFileList.Columns.Add("FileId","Int16") |Out-Null
$ReadFileList.Columns.Add("BakFile","String") |Out-Null
$ReadFileList.Columns.Add("FileNumber","Int16") |Out-Null

定義$ReadBackupHeaderd對象來(lái)存儲Restore類(lèi)的方法ReadBackupHeader返回的結果集。定義$ReadFileList對象來(lái)存儲Restore類(lèi)的方法ReadFileList返回的結果集。后面的實(shí)際例子我們還將應用到增加和刪除行的方法.

#增加行
$newRow=$ReadBackupHeader.NewRow()
$newRow["DatabaseName"]="myDB"
$newRow["BackupType"]=2
$newRow["BackupStartDate"]="2011-11-8"
$newRow["BakFile"]=""
$newRow["NoRecovery"]=$true
$newRow["Position"]=1
$ReadBackupHeader.Rows.Add($newRow)
$ReadBackupHeader.AcceptChanges()

#顯示行
$ReadBackupHeader | Format-Table -AutoSize -Wrap

#刪除行
$ReadBackupHeader.Rows[0].Delete()
$ReadBackupHeader.AcceptChanges()

#顯示行
$ReadBackupHeader | Format-Table -AutoSize -Wrap

代碼中有兩行“$ReadBackupHeader.AcceptChanges()”描述結束編輯狀態(tài)。

提示,引用MSDN對AcceptChanges方法的描述:在調用 AcceptChanges 時(shí),EndEdit 方法被隱式調用,以便終止任何編輯。 如果行的 RowState 原來(lái)是“Added”或“Modified”,則 RowState 將變成“Unchanged”。 如果 RowState 是“刪除”,則該行將被移除。

PowerShell中的函數(Function)


 

在本章中將應用到PowerShell中的Function。這里將應用到兩種用法:

function <名稱(chēng)> {

begin {<處理語(yǔ)句列表>}

process {<處理語(yǔ)句列表>}

end {<處理語(yǔ)句列表>}

}

e.g.

$DBList="DBA,DBB,DBC"

Function CheckDB
{
Param([String]$DBvar)

Begin
{
[Boolean]$CheckResult=$false
}
Process
{
If($DBList -eq "")
{
$CheckResult=$true
}
Else
{
Foreach($x In $DBList.Split(","))
{
If($x -eq $DBvar)
{
$CheckResult=$true
Break
}
}
}
}
End
{
Return $CheckResult
}
}

CheckDB 'A'

函數checkDB,主要是檢查輸入的$DBvar 是否在清單$DBList中。存在的時(shí)候返回True,不存在的時(shí)候返回False,有一種特殊的需求就是當$DBList為””的時(shí)候。后面的實(shí)際例子將會(huì )應用到這個(gè)函數。

函數的另外一種簡(jiǎn)單應用就是,不含Begin{},Process{},End{}部份,如

function <name> {

param ([type]$parameter1[,[type]$parameter2])

<statement list>

}

Function fn_UpdateRow
{
Param([string]$DatabaseName,[int32]$row)
$ReadBackupHeader.Rows[$row]["DatabaseName"]=$DatabaseName
$ReadBackupHeader.AcceptChanges()
}
$ReadBackupHeader | Format-Table -AutoSize -Wrap

fn_UpdateRow -DatabaseName "Test" -row 0
$ReadBackupHeader | Format-Table -AutoSize -Wrap

這里定義一函數fn_UpdateRow實(shí)現更新DataTable對象$ReadBackupHeader中的”DatabaseName”值。這里函數只作為處理過(guò)程,不返回任何值。

 

 

PowerShell命令Get-Unique


 

前面,我們使用DataTable對象$ReadBackupHeader暫存備份的標頭信息,當我們要還原一個(gè)目錄下面的所有備份文件,會(huì )把各個(gè)數據庫備份的標頭信息,暫存至$ReadBackupHeader中,再遍歷各個(gè)數據庫進(jìn)行還原。這里遍歷數據庫過(guò)程我們將應用到命令Get-Unique,過(guò)濾掉重復的數據庫名稱(chēng)。

e.g.

#遍歷數據庫    
Foreach( $db In $(Foreach($Row In $ReadBackupHeader.rows){$Row["DatabaseName"]}) | Sort-Object | Get-Unique )
{
#還原數據庫過(guò)程
}

其中“$(Foreach($Row In $ReadBackupHeader.rows){$Row["DatabaseName"]})”返回的是一個(gè)Array對象。

 

實(shí)際例子


 

 

View Code

 

 

上面腳本能實(shí)現的是,在一個(gè)目錄下存在著(zhù)各個(gè)數據庫的完整、差異、事務(wù)日志備份文件,可以根據設置“還原至時(shí)間點(diǎn)”還原某一個(gè)時(shí)間點(diǎn)的數據庫。支持一個(gè)備份文件包含多個(gè)備份,支持自定義還原數據庫清單。以上的腳本在PowerShell 2.0 + SQL Server2005+WinXP 和PowerShell 2.0 + SQL Server2008 R2+Windows Server 2008 R2 測試通過(guò)。

 

小結


 

本章我們描述了PowerShell2.0的一個(gè)應用,批量還原數據庫,支持完整、差異、事務(wù)日志備份文件,并對其中的一些知識要點(diǎn)提取出來(lái)說(shuō)明,讓我們對PowerShell 2.0 有進(jìn)一步的了解。在真實(shí)中,一些時(shí)候,特別是要在數據庫后臺批量處理一些任務(wù),我們發(fā)覺(jué)PowerShell能為我們帶來(lái)許多的方便。當然了,這里只是取1個(gè)批量的還原的例子,在實(shí)際的應用中,我們也許會(huì )碰到比當前例子更為復雜的情況,如頁(yè)面還原、段落還原、聯(lián)機還原等??筛鶕囟ǖ膱?chǎng)景,修改或編寫(xiě)更為復雜的腳本。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
SQL SERVER學(xué)習(三)——SQL Server 數據庫的自動(dòng)備份和刪除,以及bak文件的還原_sql server 自動(dòng)備份
SQLSERVER2008數據庫增量備份還原方式
用Sql Server 2000的數據庫備份來(lái)還原Sql Server 2005中的數據庫...
SQLSERVER 2005數據庫備份、還原及數據恢復圖文教程
SQLServer 事務(wù)日志傳送
sqlserver update或者Delete誤操作恢復方法
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久