【问题标题】:SQL Server 2008 - how to zip backup files and move to remote serverSQL Server 2008 - 如何压缩备份文件并移动到远程服务器
【发布时间】:2010-03-03 22:20:04
【问题描述】:

我有 SQL Server 2008 的非企业版。我做夜间备份,手动压缩文件,然后手动复制到远程服务器。

我需要使用批处理文件自动执行此操作。将文件从服务器复制到服务器很容易,但是如何首先自动压缩备份?

我需要的完整流程是:

  1. 每晚运行备份
  2. 压缩备份以减小大小(使用唯一的 zip 文件名)
  3. 将 zip 文件移动到在数据库服务器上设置为网络驱动器的远程服务器

我承认压缩部分让我失望了。非常欢迎任何建议。

提前致谢。

【问题讨论】:

    标签: sql-server batch-file zip compression


    【解决方案1】:

    您可以使用SQLBackupAndFTP 软件备份数据库。它是一个简单的 UI 工具,能够执行和安排备份作业(完整、差异和日志传输备份)。它只是使用嵌入式存档器或 7-zip 压缩备份,然后发送到本地文件夹或 NAS 驱动器或 FTP 或云(Dropbox、Google Drive、Amazon S3)。还有support forum

    【讨论】:

      【解决方案2】:

      您绝对可以(而且应该!)调查 SQL Server maintenance plans

      这些允许您自动化诸如

      之类的事情
      • 检查数据库一致性
      • 根据需要重建索引
      • 做数据库和日志备份(一定要使用 SQL Server 2008 备份压缩!!)

      我不确定他们是否内置了对压缩和复制到远程服务器的支持,但您绝对可以使用维护计划自动执行备份部分,其余部分使用某种命令文件。

      【讨论】:

      • 感谢 marc_s,我已按照您的建议在维护计划中自动执行数据库备份。问题是备份是 2.4GB,需要很长时间才能复制到第二台服务器。压缩备份文件可减少到仅 300mb。复制过来要快得多。我被困在如何自动压缩文件
      • @Mark:您可以设置一个批处理文件来执行此操作,并在 Windows“计划任务”下自动执行此操作以在给定时间运行,例如维护计划运行 1 小时后。只要确保文件存在,如果由于任何原因丢失,则中止。应该不会太难......大多数 ZIP 实用程序都提供了您可以在批处理/Windows .cmd 文件中使用的命令行界面
      • marc_s 感谢您的建议,现在我有一条路要走。欢呼
      【解决方案3】:

      您没有指定您正在使用的 zip 实用程序。有很多,但我倾向于使用 Winzip,因为它是工作中使用的主要 zip 工具。 Winzip 有一个命令行界面 (http://www.winzip.com/prodpagecl.htm),它是一个免费的 winzip 插件,可以从命令行调用。

      另一种选择是通过命令行使用 cygwin 和 tar.gz。

      【讨论】:

        【解决方案4】:

        如果您只是纠结于如何从批处理脚本进行压缩:

        1. 安装 7-Zip
        2. 从命令行运行:
          "C:\Program Files\7-Zip\7z.exe" a -t7z MyBackups.7z [要压缩的文件]

        为了获得唯一的文件名,我通常嵌入日期/时间:yyyymmddhhMMss-backup.7z

        【讨论】:

          【解决方案5】:

          您可以从命令行压缩内容,例如使用RAR。只需将 ZIP 命令添加到您进行复制的任何位置。如果在 T-SQL 中,您可以使用 xp_cmdshell 执行 ZIP 命令。

          对于豪华选项,请查看Red Gate Backup,它使这个过程相当轻松。

          【讨论】:

            【解决方案6】:

            自 2008 年以来,您已经安装了 Powershell。我建议查看成功备份后执行的 psh 脚本,以通过网络进行压缩和复制。这很可能是备份后的第二个工作步骤。

            您也可以使用老式的方法编写一个批处理文件来进行压缩和复制。然后在备份作业/步骤之后再次调用它作为 cmdshell 作业步骤。

            【讨论】:

              【解决方案7】:

              如果您是程序员,您可以制作一个应用程序,通过 SMO 获取您的数据库备份,并通过可用库将此文件压缩为 .gz 文件。

              【讨论】:

                【解决方案8】:

                试试这个链接: [http://www.sqlhub.com/2009/05/copy-files-with-sql-server-from-one.html][1]

                简而言之:

                1 - 您必须启用“Ole 自动化程序”

                2 - 修改并运行此脚本进行测试:

                DECLARE @FsObjId        INTEGER
                DECLARE @Source         VARCHAR(4096)
                DECLARE @Destination    VARCHAR(4096)
                SET @Source = 'C:\ritesh'
                SET @Destination= 'D:\ritesh'
                --creare OLE Automation instance
                EXEC sp_OACreate 'Scripting.FileSystemObject', @FsObjId OUTPUT
                --call method of OLE Automation
                EXEC sp_OAMethod @FsObjId, 'CopyFolder', NULL, @Source, @Destination
                --once you finish copy, destroy object
                EXEC sp_OADestroy @FsObjId
                

                3 - 创建维护计划:

                3.1 - 添加“备份数据库任务”并确保选择“设置备份压缩”= 压缩备份。 (这将以压缩格式创建您的备份)

                3.2 - 使用上述脚本添加“执行 T-SQL 语句任务”,该脚本将移动将在 3.1 任务之后执行的文件:)。

                【讨论】:

                  【解决方案9】:

                  试试SQL Backup Master,它可以压缩备份并将它们移动到网络(或本地)文件夹。还可以将压缩的备份文件移动到 FTP、Dropbox、Amazon S3 或 Google Drive。基础版免费。

                  【讨论】:

                    【解决方案10】:

                    备份后压缩文件需要大量时间。使用 SQL Server 虚拟设备接口的备份程序可以解决您的任务并减少整体处理时间。试试EMS SQL Backup ,它还允许将压缩备份发送到网络位置、FTP 或云。

                    【讨论】:

                      【解决方案11】:

                      您可以使用Backup Assistant。这将是一个解决方案。

                      您需要为此计划设置时间表。 (就像每小时一样)。 然后您需要在 Appsettings.json 中配置备份文件路径和 ftp 凭据

                      {   "AppSettings": {
                          "BackupPaths": [
                            {
                              "LocalPath": "C:\\Users\\Sinan\\Desktop\\FtpBackup\\TestDb",
                              "RemotePath": "TestDb"
                            },
                            {
                              "LocalPath": "C:\\Users\\Sinan\\Desktop\\FtpBackup\\TestHangFireDb",
                              "RemotePath": "TestHangFireDb"
                            },
                            {
                              "LocalPath": "C:\\Users\\Sinan\\Desktop\\FtpBackup\\TestLogDb",
                              "RemotePath": "TestLogDb"
                            }
                          ],
                          "BackupFileExtensions": [ ".bak" ],
                          "DeleteFilesAfterSend": true,
                          "ZipFilesBeforeSend": true,
                          "DeleteZipFilesAfterSend": false,
                          "WriteLog": true,
                          "Providers": {
                            "FtpServer": {
                              "Enabled": true,
                              "Host": "ftphost",
                              "Port": "21",
                              "Username": "ftpusername",
                              "Password": "ftppassword"
                            }
                          }   } }
                      

                      【讨论】:

                        猜你喜欢
                        • 2010-10-04
                        • 1970-01-01
                        • 2012-01-08
                        • 1970-01-01
                        • 1970-01-01
                        • 2020-02-29
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多