SQL Server 2008 - 如何压缩备份文件并移动到远程服务器

8
我有SQL Server 2008非企业版。我每晚进行备份,手动压缩文件,然后手动复制到远程服务器。
我需要使用批处理文件自动化此过程。从服务器复制文件很容易,但如何自动压缩备份呢?
我需要的完整流程如下:
1.每晚运行备份 2.将备份压缩以减小大小(使用唯一的zip文件名) 3.将zip文件移动到设置为数据库服务器上的网络驱动器的远程服务器
我承认压缩部分让我感到困惑。任何建议都将不胜感激。
提前致谢。
11个回答

5
你可以使用SQLBackupAndFTP软件备份数据库。它是一个简单的UI工具,能够执行和调度备份作业(完整、差异和日志传输备份)。它只是用内置压缩程序或7-zip压缩备份,并发送到本地文件夹、NAS驱动器、FTP或云端(Dropbox、Google Drive、Amazon S3)。同时还有支持论坛

4

你可以(而且应该!)研究一下SQL Server 维护计划

这些计划可以帮助你自动化以下操作:

  • 检查数据库的一致性
  • 根据需要重新构建索引
  • 执行数据库和日志备份(一定要使用 SQL Server 2008 备份压缩!!)

我不确定它们是否内置了对于打包压缩和复制到远程服务器的支持,但你肯定可以通过维护计划来自动化备份部分,以及通过某种命令文件来完成其余部分。


1
谢谢marc_s,我已经按照你的建议在维护计划中自动备份了数据库。问题是备份文件有2.4GB,复制到第二个服务器需要相当长的时间。将备份文件压缩后,文件大小仅为300MB,复制速度更快。我不知道如何自动压缩这些文件。 - Mark
3
@Mark:你可以编写一个批处理文件来完成这个任务,并在Windows“计划任务”下自动运行,比如在维护计划运行后1小时运行。只要确保文件存在并且不因任何原因缺失而中止即可。这不应该太难...大多数ZIP工具都提供了命令行接口,你可以在批处理/Windows .cmd文件中使用它们。 - marc_s
marc_s,感谢您的建议,现在我有了一个可以遵循的路径。谢谢! - Mark

2
您没有指定您使用的zip工具。有很多种,但我倾向于使用Winzip,因为这是我们工作中主要使用的zip工具。Winzip有一个命令行界面(http://www.winzip.com/prodpagecl.htm),它是Winzip的免费插件,可以从命令行调用。
另一种选择是通过命令行使用cygwin和tar.gz。

2

如果您只是卡在批处理文件中如何压缩的问题上:

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

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


1

你可以通过命令行进行压缩,例如使用 RAR。只需将ZIP命令添加到复制的位置即可。如果在T-SQL中操作,可以使用 xp_cmdshell 执行ZIP命令。

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


1

既然你已经有了2008,那么就已经安装了PowerShell。我建议在成功备份后查看一个psh脚本,将其压缩并通过网络复制。这很可能是备份之后的第二步。

你也可以老派一些,编写一个批处理文件来进行压缩和复制。然后在备份作业/步骤之后再作为cmdshell作业步骤调用它。


1

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


0

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

简单来说:

1 - 您必须启用“Ole Automation Procedures”

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 任务之后执行,将移动您的文件 :)


0

你可以使用备份助手。这将是一个解决方案。

你需要为这个程序设置一个时间表(比如每小时)。 然后你需要在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"
      }
    }   } }

0
尝试使用SQL备份大师,它可以压缩备份并将其移动到网络(或本地)文件夹。还可以将已压缩的备份文件移动到FTP、Dropbox、Amazon S3或Google Drive。基础版是免费的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接