Sql-Server-2008
需要從 100 個 SQL 備份文件中刪除表
我有可用的 MS SQL Server 2008。是否可以編寫腳本(可能使用 Powershell?)處理我的所有備份文件以從每個文件中刪除一個(或兩個)表?我在命令行上使用了 7-Zip 來加密它們,所以這個腳本必須能夠處理它。
我真的很想避免解密然後手動附加每個。這不會削減它,但我的技能無法讓我知道是否有更好的知識。
我不是以任何方式要求一個完整的解決方案。我想知道這是否真的可行,以及有人會如何先去做。
當然,有可能…
從批處理文件中,您可以使用
osql
.osql
在 powershell 中,您可以選擇Sql Powershell或ADO.Net(SqlConnection
和朋友)。要解壓縮和解密,您可以使用
-pyourpasswordhere
extract 選項。一般腳本應如下所示:
獲取 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 命令行加密和壓縮創建的文件
- 清理所有臨時文件