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

时间: 2024-10-07 20:42:45

批量备份数据库脚本(PowerShell版)的相关文章

MySQL备份数据库脚本

Windows @echo offmysqldump --add-drop-database --add-drop-table -u root -p123456 dbname > d:\db_backup\%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%_dbname.sql Linux #!/bin/shcd /usr/binDATE=`date +%Y-%m-%d`# 备份dbname数据库/usr

crt批量备份网络设备脚本

利用vbs脚本通过secureCRT远程登录来批量备份网络设备脚本 使用:打开secureCRT然后选择脚本,运行此脚本就可 此脚本调用e:/设备备份/ip.txt文件,此文件内格式:ip地址 用户名 密码 设备名 #$language = "VBScript" #$interface = "1.0" crt.Screen.Synchronous = True Sub Main Const ForReading = 1 ForWriting = 2 ForAppen

mysqldump 备份数据库脚本

创建备份数据库脚本mysql_backup.sh,内容如下: #!/bin/bash export PATH=/bin:/usr/bin:/usr/local/bin TODAY=`date +"%d%b%Y"` ################################################################ ################## Update below values ######################## DB_BACKUP

SQL Server批量备份数据库

1 --批量备份数据库201911 2 --开启文件夹权限 3 GO 4 SP_CONFIGURE 'SHOW ADVANCED OPTIONS',1 5 RECONFIGURE 6 GO 7 SP_CONFIGURE 'XP_CMDSHELL',1 8 RECONFIGURE 9 GO 10 11 DECLARE 12 @FileName VARCHAR(200), 13 @CurrentTime VARCHAR(50), 14 @DBName VARCHAR(100), 15 @SQL VA

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

很多时候,我们都需要将数据库进行备份,当服务器上数据库较多时,不可能一个数据库创建一个定时任务进行备份,这时,就需要进行批量的数据库备份操作,好了,废话不多说,具体实现语句如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 -

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

Rehat一键安装mysql脚本 ##说明:适用,Rehat 5 6 7 1.运行状态,运行成功输出mysql临时密码 2.代码如下 #!/bin/bash #获取系统信息 sudo cat /etc/issue>myfile aa=sudo grep '5.' myfile bb=sudo grep '6.' myfile cc=sudo grep '7.' myfile echo $aa echo "It is a test" > myfile #获取系统信息 sudo

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

Navicat是一个实用的工具,可以用来备份数据库(Oracle.MySQL.SQLServer)脚本. 备份步骤如下: 1.打开已建立的数据库连接,鼠标右键点击,选择[转储SQL文件]->[结构和数据] 2.输入文件名即可.很简单的操作.余不赘述! 大功告成! 木头大哥所发的文章均基于自身实践,各位江湖好汉可以通过:[email protected] 联系之.

windows server 定期备份数据库脚本

将以下文件保存为.bat脚本,在计划任务中添加定时任务运行此脚本即可.脚本中的备份目录,数据库目录和压缩文件目录请自行修改. @echo off rem 当前路径切换到备份数据库目录 cd D:\wamp\www\databases rem 按照时间新建备份目录:格式为年\月\日 md %date:~0,4%\%date:~5,2%\%date:~8,2% rem 设置临时变量:备份目录 set backuppath=D:\wamp\www\databases\%date:~0,4%\%date

sqlserver for linux自动备份数据库脚本

不多说直接上脚本 #/bin/bash user=multiverse passwd=Multiverse1113 back_path=/var/opt/backup/ db_name=multiverse back_time=`date +%Y%m%d_%H%M%S` back_filename=$back_path$db_name$back_time del_time=`date -d "2 day ago" +"%Y%m%d"` del_backfile=$b