批量备份数据库脚本(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应用之-批量还原数据库(支持完整,差异,事务日志)》

批量备份数据库脚本(PowerShell版)的更多相关文章
- mysqldump 备份数据库脚本
创建备份数据库脚本mysql_backup.sh,内容如下: #!/bin/bash export PATH=/bin:/usr/bin:/usr/local/bin TODAY=`date +&qu ...
- SQL Server批量备份数据库
--批量备份数据库201911 --开启文件夹权限 GO SP_CONFIGURE RECONFIGURE GO SP_CONFIGURE RECONFIGURE GO DECLARE ), ), ) ...
- sql server 批量备份数据库
很多时候,我们都需要将数据库进行备份,当服务器上数据库较多时,不可能一个数据库创建一个定时任务进行备份,这时,就需要进行批量的数据库备份操作,好了,废话不多说,具体实现语句如下: --开启文件夹权限 ...
- sql server 批量备份数据库及删除N天前的备份数据
很多时候,我们都需要将数据库进行备份,当服务器上数据库较多时,不可能一个数据库创建一个定时任务进行备份,这时,就需要进行批量的数据库备份操作,好了,废话不多说,具体实现语句如下: 1 2 3 4 5 ...
- windows server 定期备份数据库脚本
将以下文件保存为.bat脚本,在计划任务中添加定时任务运行此脚本即可.脚本中的备份目录,数据库目录和压缩文件目录请自行修改. @echo off rem 当前路径切换到备份数据库目录 cd D:\wa ...
- Rehat一键安装mysql脚本和备份数据库脚本
Rehat一键安装mysql脚本 ##说明:适用,Rehat 5 6 7 1.运行状态,运行成功输出mysql临时密码 2.代码如下 #!/bin/bash #获取系统信息 sudo cat /etc ...
- 如何使用Navicat备份数据库脚本
Navicat是一个实用的工具,可以用来备份数据库(Oracle.MySQL.SQLServer)脚本. 备份步骤如下: 1.打开已建立的数据库连接,鼠标右键点击,选择[转储SQL文件]->[结 ...
- php 备份数据库脚本
<?php// 备份数据库$host = "localhost";$user = "root"; //数据库账号$password = "123 ...
- 使用mysqldump自动备份数据库脚本
每天利用计划任务在凌晨1点自动执行,备份zabbix的数据库至本地的/backup/mysql_backup目录 #!/bin/sh DUMP=/usr/bin/mysqldump OUT_DIR=/ ...
随机推荐
- Codeforces 853B Jury Meeting (差分+前缀和)
<题目链接> 题目大意: 有$ n(n<=1e5)$个城市和一个首都(0号城市),现在每个城市有一个人,总共有$ m (m<=1e5)$次航班,每个航班要么从首都起飞,要么飞到 ...
- Django之视图函数总结
Django之视图函数总结 HttpRequest与HttpResponse http请求中产生两个核心对象: HttpRequest对象:用户请求相关的所有信息(对象) HttpResponse对象 ...
- 003.Ansible基础使用
一 Ansible命令用法 Ansible命令行执行方式有:Ad-Hoc.Ansible-playbook两种,Web方式其官方提供付费产品Tower.Ad-Hoc主要用于临时命令的执行,Ansibl ...
- 语音VLAN异常流量分析
现象描述:有线网络里,接入层交换机上,凡是被划入语音vlan的端口,都会呈现出相同的流量表现,而且瞬间流量都很大,30 - 40 MB级别,对有线网络的稳定性有很大的影响. 设备型号: IP 电话:A ...
- 前端之html、css
一.什么是前端 前端即网站前台部分,运行在PC端.移动端等浏览器上展现给用户浏览的网页.前端技术一般分为前端设计和前端开发,前端设计一般可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括基 ...
- BZOJ.2006.[NOI2010]超级钢琴(贪心 堆)
BZOJ 洛谷 思路和BZOJ3784一样,用前缀和+堆维护.做那题吧,不赘述啦. (没错我就是水一个AC) //54620kb 1060ms #include <queue> #incl ...
- BZOJ.3551.[ONTAK2010]Peaks加强版(Kruskal重构树 主席树)
题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. 强制在线. \ ...
- (文件操作)Android相关的File文件操作
判断文件是否存在: /** * 判断文件是否存在 * * @param path 文件路径 * @return [参数说明] * @return boolean [返回类型说明] */ public ...
- mongoDB,mongoose,没有数组就添加,如果有了数组,就向数组中添加新元素
db.getCollection('photos').findOneAndUpdate("5b028e71f32bd5004f905879", //findByIdAndUpd ...
- 关于 win10启动错误 Error:16
那个软件报这个错误,就打开属性 -- 兼容性 -- 打勾以管理员身份运行