我有一个非常简单的维护计划,将我的数据库完整备份到networking位置。 完美的作品。
我想在备份完成后7zip备份文件。
有没有办法在维修计划中做到这一点? 也许使用PowerShell?
编辑:
我没有os访问networking驱动器。 把它想成另一个硬盘,而不是服务器。 这在技术上是我映射的Z:\驱动器。
SQL代理作业可以执行cmd.exe脚本。
维护计划可以执行SQL代理作业。
(只需创build代理作业,无需安排。)
结合Richard和nray的说法,在SQL备份结束时(通过SQL代理作业)启动一个基于7zip的归档脚本。
你可以使用后续的CMD /batch file作为参考,甚至可以根据需要进行调整(这是开源的 – 并指责我的任何错误;)
Ziparcy是一个WINNTshell脚本,可以计划创build/更新文件(和目录结构)的encryptionzip /压缩文件。
这个脚本利用了另外两个免费的工具:7-zip和wget。
脚本%ProgramFiles%\7-Zip\7z.exe作为@Richard提到是我的第一个想法,但是你说你通过networkingstream式备份。
这意味着你想要在文件服务器上执行压缩,而不是在SQL服务器(SQLAgent运行的地方)上执行压缩,否则你将把所有的数据都传回到SQL服务器上的%TEMP%来压缩它。将压缩的位返回给文件服务器。
如果是这样,那么你的select是在备份结束时在文件服务器上执行7z.exe ,也许可以通过以下方法之一来执行:
psexec \\FILESERVER C:\7-Zip\7z.exe a todays-full-sql-backup.7z 200909201800_db.bak或类似的东西。 您需要定义要压缩的.bak文件的名称。
文件服务器上的计划任务,在备份之后设置为运行有足够的时间完成。
PowerShell 2远程处理,但这不是我试过的 – 太新了。
其他的想法 – 为什么你需要一个7z档案? 这是压缩你备份的目录的解决scheme吗? 你有空间在本地备份在SQL服务器,7zip文件,然后通过networking发送?
编辑: 要确定备份文件的名称,你可以作弊很多。 你不需要知道全名。 您可以尝试像“为每个文件命名2009MMDD * _MyDatabaseName_DB.bak,压缩此文件,将其复制到\服务器\共享,检查错误,删除文件”。
这是一个UNTESTED shell脚本的最基本的骨骼,
set DB_NAME=MyDatabaseName set BAK_DIR=<wherever your backup gets created> set NET_SHARE=\\Server\Share :GET_NAME_DATE_PART rem #This depends entirely how Windows writes dates in your part of the world rem #if I were you I'd probably get some utility (now.exe?) to extract yyyymmdd rem #from today's date. On our locale %date% looks like 2009-09-20 set YYYY=%date:~0,4% set MM=%date:~5,2% set DD=%date:~8,2% :ARCHIVE_BAK_FILE pushd "%BAK_DIR%" for %%A in (%YYYY%%MM%%DD%*_%DB_NAME%_DB.BAK) do ( "C:\Program Files\7-Zip\7z.exe" a %%A %%A.7z move %%A.7z "%NET_SHARE%\%%A.7z" rem #CHECK FOR ERRORS MAYBE? del /q %%A ) popd
for语句每天只能find一个文件来压缩和删除。 那个时髦的%date:~0,4%语法被称为variables子string,如果你以前没有看到它 – 它在帮助。 你可能更喜欢forfiles.exe来。