文章出處
文章列表
需求描述
一般在生產環境中,在投產的情況下,需要批量的來執行SQL腳本文件,來完成整個投產,如果投產文件比較多的情況下,無疑這是一個比較痛苦的過程,所以本篇通過PowerShell腳本來批量完成。
監控腳本
<#批量執行SQL腳本文件#> <#===========================================#> $serverInstance="WUXUEL1" $Database="111" #$userName="sa" #$password="password01!" $ScriptPath="C:\powershell\SQLTest\" $ScriptList=" " <#===========================================#> $n="`n" $r="`r" While ($ScriptList.IndexOf($n) -gt 0) {$ScriptList=$ScriptList.Replace($n,";")} While ($ScriptList.IndexOf($r) -gt 0) {$ScriptList=$ScriptList.Replace($r,";")} While ($ScriptList.IndexOf(" ") -gt 0) {$ScriptList=$ScriptList.Replace(" ","")} While ($ScriptList.IndexOf(",") -gt 0) {$ScriptList=$ScriptList.Replace(",","")} If ($ScriptList.IndexOf(".sql") –le 0) { $ScriptList="" [System.IO.DirectoryInfo]$DirectoryInfo=New-Object System.IO.DirectoryInfo $ScriptPath | Sort-Object foreach( $f In ($DirectoryInfo.GetFiles("*.sql"))) { $ScriptList=$ScriptList+";"+$f.Name } } Try { [void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.ConnectionInfo') |out-null $ServerConnection =new-object Microsoft.SqlServer.Management.Common.ServerConnection #$serverInstance,$userName, $password $ServerConnection.ConnectionString = "Data Source=$serverInstance;Initial Catalog=$Database;Integrated Security=True" try { $ServerConnection.BeginTransaction() Write-Host "BeginTransaction ." [System.Text.StringBuilder]$Sql="" Foreach($File In $ScriptList.Split(";")) { if($File -ne "") { Write-Host $ScriptPath$File " ...start" $Sql=$Sql.AppendLine(([System.Io.File]::OpenText($ScriptPath+$File)).ReadToEnd()) $ServerConnection.ExecuteNonQuery($Sql)|out-null $Sql="" Write-Host $ScriptPath$File " ...OK!" } } $ServerConnection.CommitTransaction() Write-Host "CommitTransaction ." } Catch { If ($ServerConnection.TransactionDepth -gt 0) { $ServerConnection.RollBackTransaction() Write-Host "RollBackTransaction ." } Write-Error $_ } } Catch { Write-Error $_ }
其中涉及到幾個參數需要配置:
1、批量文件的根目錄路徑
2、此腳本支持兩種驗證方式:用戶驗證 & Windows驗證,根據需要自己確定
執行完成報告如下:
當然,最重要的就是,如果執行過程中,某一個腳本出錯的問題解決,其實只需要標示出錯誤的文件名稱和錯誤的信息就可以。
根據需要,自行調整腳本,調整至正確,然后重新執行此腳本就可以了。
調度腳本
有時候我們部署一般都安排窗口期,這也就意味著需要在夜間某個定時時間去執行該腳本的部署。
為了解決這個問題,Powershell提供了兩種基本的調度方式:
1、通過SQL Server的agent建立相應的Job定時的去執行,以完成部署。
2、通過Windows的計劃任務去執行調度。
以上兩種方式都比較簡單,網上資料很多,大家自行查閱。
文章列表
全站熱搜