Sql-Server-2008

需要從 100 個 SQL 備份文件中刪除表

  • June 13, 2013

我有可用的 MS SQL Server 2008。是否可以編寫腳本(可能使用 Powershell?)處理我的所有備份文件以從每個文件中刪除一個(或兩個)表?我在命令行上使用了 7-Zip 來加密它們,所以這個腳本必須能夠處理它。

我真的很想避免解密然後手動附加每個。這不會削減它,但我的技能無法讓我知道是否有更好的知識。

我不是以任何方式要求一個完整的解決方案。我想知道這是否真的可行,以及有人會如何先去做。

當然,有可能…

從批處理文件中,您可以使用osql. osql在 powershell 中,您可以選擇Sql PowershellADO.Net(SqlConnection和朋友)

要解壓縮和解密,您可以使用-pyourpasswordhereextract 選項。


一般腳本應如下所示:

  • 獲取 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 命令行加密和壓縮創建的文件
    • 清理所有臨時文件

引用自:https://serverfault.com/questions/515683