SQLServer⾃动化运维系列——批量执⾏SQL脚本
(PowerShell)
需求描述
⼀般在⽣产环境中,在投产的情况下,需要批量的来执⾏SQL脚本⽂件,来完成整个投产,如果投产⽂件⽐较多的情况下,⽆疑这是⼀个⽐较痛苦的过程,所以本篇通过PowerShell脚本来批量完成。
监控脚本
<#批量执⾏SQL脚本⽂件#>
<#===========================================#>
$serverInstance="WUXUEL1"
$Database="111"
#$userName="sa"shell最简单脚本
#$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的计划任务去执⾏调度。
以上两种⽅式都⽐较简单,⽹上资料很多,⼤家⾃⾏查阅。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。