需要从数百个 SQL 备份文件中删除表

需要从数百个 SQL 备份文件中删除表

我有 MS SQL Server 2008。是否可以编写脚本(也许使用 Powershell?)来处理我的所有备份文件,以便从每个文件中删除一个(或两个)表?我在命令行上使用 7-Zip 来加密它们,因此此脚本必须能够处理这个问题。

我真的很想避免手动解密然后附加每个文件。这根本行不通,但我的技能不足以让我知道是否有更好的方法。

我绝不是在寻求一个完整的解决方案。我只是想知道这是否真的可行,以及有人可以如何首先做到这一点。

答案1

当然,有可能……

您可以使用批处理文件osql. 在 powershell 中,您可以选择osqlSQL 电源外壳或者ADO.Net (SqlConnection和朋友 )

要解压缩和解密,您可以使用-pyourpasswordhere带有提取的选项。


通用脚本看起来应该是这样的:

  • 获取 7z 文件列表,存储到变量
  • 循环播放每个文件
    • 使用 7z 命令行将文件提取到临时文件夹
    • 以某种方式执行(RESTORE DATABASE dbname FROM DISK = 'path to temp bak file' WITH MOVE 'datafile name' to 'temp file path\data.mdf', MOVE 'logfile name' to 'temp file path\log.ldf', RECOVERY, STATS=10
    • 切换到数据库并删除表:(USE dbname; DROP TABLE tableName; DROP TABLE tableName2; USE master;
    • 创建新备份(BACKUP DATABASE dbname TO DISK = 'path to new bak file' WITH COPY_ONLY, STATS=10-COPY_ONLY如果不使用日志文件恢复来加速备份并减小大小,则可以使用它)
    • 从服务器中删除数据库“DROP DATABASE dbname;”
    • 使用 7z 命令行加密并压缩创建的文件
    • 清理所有临时文件

相关内容