备份 Microsoft SQL 数据库并上传到 FTP
备份 SQL 数据库并将它们上传到 FTP 服务器
引言
这个小型的 C# 程序将备份您指定的 SQL 数据库,然后将其上传到 FTP 服务器。它还将删除指定天数前的备份,除了指定的日期之外。
例如,保留星期日,以便您留下每日/每周备份。
您将拥有 x 天(例如 14 天)的每日备份,以及可以无限期保存的每周备份。备份文件命名为 DatabaseName_full_YYYYMMDD.bak。
可以轻松更改程序以更改这些参数。
问题是如何备份 SQL 数据库,然后通过 FTP 将其发送到远程服务器。这是为了避免必须使用 CD / 备份驱动器等将备份异地保存。
背景
有一些工具可以购买,也有使用 shell 进行 FTP 的脚本,但我找不到 .NET 解决方案。
我确实找到了一个 T-SQL 脚本,这是使用 System.Net
命名空间在 C# 中重写的依据。
Using the Code
所有需要的代码都在 *.zip 文件中。您需要指定 FTP 详细信息。
const string ftpServerURI = "ftpserver.com"; // FTP server
const string ftpUserID = "username"; // FTP Username
const string ftpPassword = "password"; //FTP Password
const string strCon = "Data Source=ServerInstance;Initial Catalog=master;
Persist Security Info=True;Integrated Security=True;MultipleActiveResultSets=True;";
// Change SQLDBSERVER to the name of the SQL Server you are using
const string drive = "D";
// The local drive to save the backups to
const string LogFile = "D:\\Backup\\Logs\\SQLBackup.log";
// The location on the local Drive of the log files.
const int DaysToKeep = 31;
// Number of days to keep the daily backups for.
const DayOfWeek DayOfWeekToKeep = DayOfWeek.Sunday;
// Specify which daily backup to keep indefinitely.
如果您不确定其工作原理,请将 SQL 剪切并粘贴到 Management Studio 中,以便您可以准确地看到查询将返回什么。
您还需要指定您不想备份的数据库。
SqlCommand comSQL = new SqlCommand("select name from sysdatabases " +
"where name not in('tempdb','model','Northwind','AdventureWorks','master') #
order by name ASC", new SqlConnection(strCon));
// need to specify here which databases you do not want to back up.
关注点
请参阅 MSDN 上的这篇文章。我发现新的 .NET FTP 类文档不足,并且需要大量调试才能利用 MSDN 中的示例。
即使您不需要备份程序,我也希望您可以利用我编写的一些 FTP 函数。
private static bool FTPDeleteFile(Uri serverUri, NetworkCredential Cred)
如果它不存在,则错误会被优雅地捕获。如果发生其他错误,则会将其输入到日志文件中。
尽管进行了大量搜索,但我找不到在尝试删除文件之前检查文件是否存在的示例。因此,即使文件不存在,此函数也会尝试删除该文件。
private static bool FTPMakeDir(Uri serverUri, NetworkCredential Cred)
您无法上传到 FTP 服务器上尚不存在的目录,此函数将创建它。
它以递归方式处理 URI 的子目录,并依次创建每个目录。
如果 subDir 已经存在,则错误会被优雅地捕获。如果发生其他错误,则会将其输入到日志文件中。
private static bool FTPUploadFile
(String serverPath, String serverFile, FileInfo LocalFile, NetworkCredential Cred)
这会将文件上传到 FTP 服务器。它使用 FTPMakeDir
来创建目录(如果目录尚不存在)。
此代码目前用于在具有本地 FTP 备份服务器的 1and1 服务器上的 SQL Server 2005 实例中备份大约 10 个数据库。
数据库备份的大小范围从几 KB 到 200 MB。
历史
- 2008 年 10 月 4 日:首次发布