首页 > 解决方案 > Powershell Backup-SqlDatabase 备份快照而不是完整备份

问题描述

流程:在安装了 SQL Server 2014 Express 的 Windows 10 32 位 pro 计算机上运行的 Azure 代理。

管道已构建并使用 PowerShell 脚本成功运行,如下所示:

  1. 创建空白数据库
  2. 创建需要的表
  3. C# 应用程序运行并填充通过 PowerShell 脚本执行的表
  4. 交叉引用表以更新所需的数据。
  5. 构建 SSIS 包

在 SSIS 包的结果成功后执行备份

命令:

Backup-SqlDatabase -ServerInstance "$env.ComputerName" -Database "RealDB" 
                   -BackupAction Database -BackupFile $Path -Blocksize 4096

这一切都有一个例外,我得到的实际备份缺少来自 SSIS 包运行的数据。但是,如果我登录机器并从 $Path 恢复使用的备份,则会丢失数据。

当我在这个过程之后查询数据库时,数据就在数据库中。只有一个数据库,因此它不会备份不同的数据库。

我可以在机器上的 powershell 中运行此命令,并且我的备份缺少代理中的 powershell 命令所没有的数据。

如果我删除它也很有趣-Blocksize 4096,它可以按我的预期工作,并且备份中有数据。由于这个原因,我正在考虑放弃powershell,但我想我会问是否有人经历过这种情况。

任何帮助或想法表示赞赏。

谢谢

标签: sql-serverazurepowershellbackup

解决方案


谢谢@user19702,我非常着迷于查看添加了 -BlockSize 的备份命令,以至于我完全忽略了我的数据增加的事实(感谢我今天之前从未听说过的随机过程),即使编写了 powershell 来启动备份 SSIS 包后,该过程未完成。为了找到它,我在构建运行时在机器上启动了任务管理器,并在备份开始时观察进程在内存中停留了几秒钟。我添加了一个 powershell 命令,让它在处理备份及其工作之前等待几秒钟。

如果有人想知道这是命令

$result = $package.Execute("false", $null)
Write-Host "Package ID Result: " $result
Start-Sleep -Seconds 10
Backup-SqlDatabase -ServerInstance "$env:ComputerName" -Database "RealDB" -BackupAction Database -BlockSize 4096 -BackupFile $Path

谢谢你!!


推荐阅读