代码之家  ›  专栏  ›  技术社区  ›  DCNYAM

压缩文件夹中的SQL备份

  •  2
  • DCNYAM  · 技术社区  · 17 年前

    我们正在寻找一个免费的解决方案来压缩SQL Server 2005的SQL Server备份。我知道SQL安全免费软件版本,但我想知道其他人是如何看待将备份文件存储在压缩文件夹中以达到预期效果的。这将允许我们使用本机SQL备份任务和本机windows压缩,从而消除对第三方产品的需求。

    我过去没有使用过任何压缩文件夹。这是一个可行的想法吗?压缩文件夹中备份的完整性是否存在任何可预见的问题?

    5 回复  |  直到 17 年前
        1
  •  3
  •   Clay Lenhart    16 年前

    我是一个开源项目(GPLv3)的作者,它可以满足您的需求。它是一个命令行工具(用于在Windows中调度计划任务),并备份到gzip、zip(由于常规zip文件的4GB限制,特别是zip64)或bzip2文件。您可以使用该工具直接从压缩文件进行还原,也可以解压缩压缩文件(标准的*.bak文件),然后使用SQL Server GUI进行还原。

    它称为SQL Server压缩备份,可在以下位置找到: http://sourceforge.net/projects/mssqlcompressed/

    msbp.exe backup "db(database=model)" "zip64" "local(path=c:\model.full.bak.zip)"
    
        2
  •  1
  •   Arvo    17 年前

    谷歌的快速提示: backing-up-to-a-ntfs-compressed-folder . 似乎数据库大小可能会产生问题。

    走出 生产服务器:)

        3
  •  0
  •   D'Arcy Rittich    17 年前
        4
  •  0
  •   Kristen    17 年前

    我们的ISP服务器上有100个数据库

    ISP有全面的磁带备份,但需要很长时间才能恢复任何内容。。。因此,我们需要让备份“在线”一段合理的时间,以便我们能够首先从备份中恢复。

    我们每周进行一次完整备份,每天进行差异备份。我们将完整备份保留一个月,将差异备份保留七天 我们每10分钟生成一次TLog备份,但只(在线)存储两天。

    因此,我们可以在前两天恢复到时间点,在最后7天恢复到“午夜”,在最后4周恢复到“星期日之前”。

    使用差异备份减少了备份的总大小,并使我们能够保持更多的“运行时间”在线。

    所有备份都存储在NTFS压缩文件夹中。我们从未遇到过问题,但我认为我们没有任何数据库>在这些“共享数据库服务器”上安装30GB

    在数据库维护期间(索引碎片整理等),我们将TLog备份的频率增加到每分钟一次。我们发现,扩展数据库大小的一个因素是数据库维护,因此通过这样做,我们能够减少数据库的操作大小,从而为更多备份释放一些磁盘空间。(备份通常在不同的驱动器上复制到MDF或LDF,但批处理操作会将旧的、过时的备份文件复制到包含MDF/LDF的驱动器上,这样我们就可以使它们“联机”)

    P.S.SQL 2008具有内置的压缩备份功能,以防您计划升级

        5
  •  0
  •   Dave Markle    13 年前

    虽然我不建议直接备份到压缩文件夹,但您当然可以备份到普通文件夹,然后在服务器不太忙时使用PowerShell脚本单独压缩每个文件。下面是我使用的一个片段。它基本上通过备份目录递归,使用NTFS压缩将每个文件压缩到一定大小。这不是最好的解决方案;我的首选解决方案是在执行升级时使用SQL 2008/2012备份压缩。

    $max_compressible_size = 10*1024*1024*1024 #10 gigs 
    
    $files = Get-ChildItem -recurse | where {$_.Extension -match "(trn)|(diff)|(bak)"}
    
    foreach ($file in $files) {    
        $attr = (Get-ItemProperty $file.fullname).Attributes
    
        if ($attr.ToString() -notmatch ".*Compressed.*" -and $file.Length -le $max_compressible_size) {
            write-output $file.FullName
            compact /C $file.FullName
        }
    }