开始

昨天备份一个数据库拿来测试,发现备份后的文件非常大。后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能。

现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(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版)的更多相关文章

  1. mysqldump 备份数据库脚本

    创建备份数据库脚本mysql_backup.sh,内容如下: #!/bin/bash export PATH=/bin:/usr/bin:/usr/local/bin TODAY=`date +&qu ...

  2. SQL Server批量备份数据库

    --批量备份数据库201911 --开启文件夹权限 GO SP_CONFIGURE RECONFIGURE GO SP_CONFIGURE RECONFIGURE GO DECLARE ), ), ) ...

  3. sql server 批量备份数据库

    很多时候,我们都需要将数据库进行备份,当服务器上数据库较多时,不可能一个数据库创建一个定时任务进行备份,这时,就需要进行批量的数据库备份操作,好了,废话不多说,具体实现语句如下: --开启文件夹权限 ...

  4. sql server 批量备份数据库及删除N天前的备份数据

    很多时候,我们都需要将数据库进行备份,当服务器上数据库较多时,不可能一个数据库创建一个定时任务进行备份,这时,就需要进行批量的数据库备份操作,好了,废话不多说,具体实现语句如下: 1 2 3 4 5 ...

  5. windows server 定期备份数据库脚本

    将以下文件保存为.bat脚本,在计划任务中添加定时任务运行此脚本即可.脚本中的备份目录,数据库目录和压缩文件目录请自行修改. @echo off rem 当前路径切换到备份数据库目录 cd D:\wa ...

  6. Rehat一键安装mysql脚本和备份数据库脚本

    Rehat一键安装mysql脚本 ##说明:适用,Rehat 5 6 7 1.运行状态,运行成功输出mysql临时密码 2.代码如下 #!/bin/bash #获取系统信息 sudo cat /etc ...

  7. 如何使用Navicat备份数据库脚本

    Navicat是一个实用的工具,可以用来备份数据库(Oracle.MySQL.SQLServer)脚本. 备份步骤如下: 1.打开已建立的数据库连接,鼠标右键点击,选择[转储SQL文件]->[结 ...

  8. php 备份数据库脚本

    <?php// 备份数据库$host = "localhost";$user = "root"; //数据库账号$password = "123 ...

  9. 使用mysqldump自动备份数据库脚本

    每天利用计划任务在凌晨1点自动执行,备份zabbix的数据库至本地的/backup/mysql_backup目录 #!/bin/sh DUMP=/usr/bin/mysqldump OUT_DIR=/ ...

随机推荐

  1. Javascript的DOM总结

    Javascript的DOM总结 DOM DOM 是 W3C(万维网联盟)的标准.DOM 定义了访问 HTML 和 XML 文档的标准: "W3C 文档对象模型(DOM)是中立于平台和语言的 ...

  2. Java内存管理-掌握自定义类加载器的实现(七)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇分析了ClassLoader的类加载相关的核心源码,也简单介绍了ClassLoa ...

  3. Oracle DB

    索引 一.安装   卸载 一.安装 1.Oracle首先询问用户是否接受更新信息,一般选择不接受:Oracle安装选项,需为其配置数据库,所以此处会询问是否创建安装数据库,选择是系统类型,一般选择服务 ...

  4. Git 使用问题记录

    问题一:新文件 add 后,提示有 modified 内容 描述:在 master 分支中增加了一个新的文件夹(-/cb4.6-zh),但执行 git add 后再查看状态却提示有 modified ...

  5. vue中的表单

    v-model指令实现表单双向绑定数据.触发文本框的input事件.一.文本框 <div id="J_app"> <p>{{ info }}</p&g ...

  6. BZOJ.1132.[POI2008]Tro(极角排序)

    BZOJ 洛谷 考虑暴力,每次枚举三个点,答案就是\(\frac12\sum_{k<j<i}(i-k)\times(j-k)\). 注意到叉积有分配率,所以固定\(k\),枚举\(i,j\ ...

  7. Android中,如何提升Layout的性能?

    Layout 是 Android 应用中直接影响用户体验的关键部分.如果实现的不好,你的 Layout 会导致程序非常占用内存并且 UI 运行缓慢.Android SDK 带有帮助你找到 Layout ...

  8. ESlint开发环境配置

    ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误,是JS开发过程中极佳工具,这篇文章将以WebStorm为例告诉你如 ...

  9. javaweb数据库编程代码详细讲解

    import java.sql.*; /*默写数据库练习数据库编程及注释讲解代码*/ public class Main{ public static void main(String[]args)t ...

  10. 微信公众号开发之通过获取token等信息

    <?php /** * 发送post请求 * @param string $url * @param string $param * @return bool|mixed */ function ...