我有 MS SQL Server 2008。是否可以编写脚本(也许使用 Powershell?)来处理我的所有备份文件,以便从每个文件中删除一个(或两个)表?我在命令行上使用 7-Zip 来加密它们,因此此脚本必须能够处理这个问题。
我真的很想避免手动解密然后附加每个文件。这根本行不通,但我的技能不足以让我知道是否有更好的方法。
我绝不是在寻求一个完整的解决方案。我只是想知道这是否真的可行,以及有人可以如何首先做到这一点。
答案1
当然,有可能……
您可以使用批处理文件osql
. 在 powershell 中,您可以选择osql
,SQL 电源外壳或者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 命令行加密并压缩创建的文件
- 清理所有临时文件