sqlserver 全备和增量备份脚本

脚本实现功能如下:

1,第一次运行生成数据库的全备份,完成后建立全部份的标识

2,后面再次运行判断是否存在全备份标识,如果存在都是增量备份。


<#

.SYNOPSIS

SQL Server 数据库备份脚本(完全备份 + 差异备份)

.DESCRIPTION

首次运行执行完全备份,后续每4小时执行差异备份

需要提前安装 SQLServer 模块(Import-Module SQLServer)

#>


# 配置参数

$backupPath = "D:\SQLBackup\"        # 备份文件存储路径

$databases = @("itf_shybao_new", "race_bjtrt") # 需要备份的数据库列表

$sqlInstance = "localhost"          # SQL Server 实例名称(本机使用localhost)

$flagFile = Join-Path $backupPath "FullBackup.flag" # 完全备份标记文件


#region 函数:执行SQL备份

function Invoke-SqlBackup {

    param(

        [string]$dbName,

        [string]$backupType,

        [string]$filePath

    )

    

    # 构建备份命令

    $backupCommand = @"

BACKUP DATABASE [$dbName]

TO DISK = N'$filePath'

WITH $backupType, FORMAT, 

COMPRESSION,  -- 启用压缩(SQL Server 2008+ 企业版支持)

STATS = 5,     -- 每完成5%进度输出日志

CHECKSUM;      -- 启用校验和验证

"@


    # 执行备份命令

    try {

        Invoke-Sqlcmd -ServerInstance $sqlInstance -Query $backupCommand -QueryTimeout 0 -ErrorAction Stop

        Write-Host "成功备份数据库 [$dbName] 到 $filePath" -ForegroundColor Green

        return $true

    }

    catch {

        Write-Host "备份数据库 [$dbName] 失败:$_" -ForegroundColor Red

        return $false

    }

}

#endregion


#region 主程序逻辑

# 创建备份目录(如果不存在)

if (-not (Test-Path $backupPath)) {

    New-Item -Path $backupPath -ItemType Directory | Out-Null

}


# 决定备份类型

$isFullBackup = -not (Test-Path $flagFile)  # 通过标记文件判断是否首次运行


# 生成时间戳(格式:YYYY_MM_DD-HHmm)

$timestamp = Get-Date -Format "yyyy_MM_dd-HHmm"


# 遍历所有数据库执行备份

foreach ($db in $databases) {

    # 生成备份文件名

    $backupTypeName = if ($isFullBackup) { "full" } else { "increment" }

    $fileName = "${db}_db_bak_${backupTypeName}_${timestamp}.bak"

    $fullPath = Join-Path $backupPath $fileName


    # 执行备份


     $result = Invoke-SqlBackup -dbName $db `

    -backupType $(if ($isFullBackup) { "INIT" } else { "DIFFERENTIAL" }) `

    -filePath $fullPath


   # 首次成功备份后创建标记文件

    if ($isFullBackup -and $result) {

        New-Item -Path $flagFile -ItemType File | Out-Null

    }

}

#endregion


#region 后续操作建议

Write-Host @"

-----------------------------------------------------

备份操作已完成:

1. 手动测试脚本:直接运行此PS1文件

2. 设置定时任务:

   a) 打开【任务计划程序】

   b) 创建【基本任务】

   c) 设置每4小时重复执行

   d) 操作:启动程序选 powershell.exe

   e) 参数:-File "完整脚本路径.ps1"

3. 监控备份文件增长情况,定期清理旧备份

-----------------------------------------------------

"@ -ForegroundColor Cyan

#endregion

请先 登录 后评论

1 个回答

每天惠23

脚本下载下来之后,请更改备份路径,备份数据库的名称,实例名称等。

sqlserver 备份脚本下载(支持全备和增量备份,支持sqlserver 2008 之后版本备份)

请先 登录 后评论
  • 1 关注
  • 1 收藏,84 浏览
  • 提出于 2025-05-04 00:08

相似问题