-
sql语句大全之批量备份数据库脚本(PowerShell版)
开始
昨天备份一个数据库拿来测试,发现备份后的文件非常大。后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能。
现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly).
备份数据库(完整备份)脚本
(注:开初编写这脚本的目的是能批量备份数据库,提高工作效率,后面提到的还原数据库脚本也是如此。)
复制代码
<#=====================================================================#>
##备份数据库(完整备份)V2.0 Andy 2017-4-13 增加了设置压缩备份,和是否使用复制备份功能
##备份数据库(完整备份)V1.0 Andy
##
##
[string]$serverInstance="IP\InstanceName"
[string]$userName="Login"
[string]$password="Password"
[string]$Path="\\xxx.xxx.xxx.xxx\xxxBackup"
[string]$DBList="dbname" #(选填)数据库列表,数据库之间使用','隔开,留空表示所有数据库
[bool]$CopyOnly=$true; #为 True,仅复制备份;否则不是仅复制备份,而是平常备份序列的一部分
[int32]$CompressionOption=1 #1 启动压缩 ,2 禁用压缩
[bool]$AddBackupTime= 1 #(选填) 备份文件名是否加备份时间,格式为:_yyyyMMddHHmmss
<#=====================================================================#>
[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
[string]$DBName=""
[datetime]$StartTime=Get-Date
$Path=$Path+$(If($($Path.Split("\"))[-1] -eq "" ){""} Else {"\"})
$ServerConnection =new-object "Microsoft.SqlServer.Management.Common.ServerConnection" $serverInstance,$userName, $password
Clear-Host #清除控制台的内容
#--------------------------------------
#检查备份数据库清单
#--------------------------------------
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
}
}
#1. 连接实例
Try
{
$ServerConnection.Connect()
}
Catch
{
Write-Host "无法连接到数据库实例:$serverInstance" -ForegroundColor Red
}
#2. 判断备份路径是否正确
[bool]$PathExists=Test-Path $Path
if ($PathExists -eq $false)
{
Write-Host "无效的路径:$Path" -ForegroundColor Red
}
#3. 备份数据库
if ($ServerConnection.IsOpen -and $PathExists -eq $true)
{
Try
{
$Server=new-object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection
$Backup=new-object "Microsoft.SqlServer.Management.Smo.Backup"
[string]$strDate =if($AddBackupTime -eq $true){Get-Date -Format "_yyyyMMddHHmmss"}else{""}
$Backup.Action=[Microsoft.SqlServer.Management.SMO.BackupActionType]::Database
$Backup.Incremental =$false
$Backup.CompressionOption=$CompressionOption;
$Backup.CopyOnly=$CopyOnly;
foreach ($DB in $Server.Databases | Select-Object -Property Name,IsSystemObject | Where-Object -FilterScript {$_.IsSystemObject -eq $false})
{
$DBName=$DB.Name
if (CheckDB($DBName) -eq $true ) #判断$DBName是否在备份数据库列表中
{
$Backup.Database =$DBName
$Backup.Devices.Clear()
$Backup.Devices.AddDevice($Path+$DBName+$strDate+".bak",[Microsoft.SqlServer.Management.Smo.DeviceType]::File)
$Backup.SqlBackupAsync($Server) #异步处理备份
Write-Host "正在备份 $DBName ... ..." -BackgroundColor Blue -ForegroundColor White
$Backup.Wait() #等待备份完成才继续
Write-Host "完成备份 $DBName . " -BackgroundColor Green
}
}
[TimeSpan]$Times = (Get-Date) - $StartTime
[String]$Str=if($Times.Hours -eq 0){""}else{$Times.Hours.ToString()+ " 小时 "}
$Str+=if($Times.Minutes -eq 0){""}else{$Times.Minutes.ToString()+" 分钟 "}
$Str+=if($Times.Seconds -eq 0){""}else{$Times.Seconds.ToString()+" 秒 "}
Write-Host "备份总耗时: $Str"
}
Catch
{
Write-Error $_
Write-Host "在备份 $DB 过程中发生错误." -ForegroundColor Red
}
}
复制代码
调用例子
压缩后备份文件只有1G多。
还原数据库可以参考《PowerShell应用之-批量还原数据库(支持完整,差异,事务日志)》
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式