数据库备份定期删除程序的开发。

第一.最近客户的服务器数据库备份每天都在进行,随着数据量的不断的增加,备份也在不断的进行变大。

第二.于是一些问题就出现了客户的服务器的磁盘的空间有限,定期数据库备份文件太大而导致无法进行保存问题。

第三.从而导致了服务器宕机以及服务器中一些应用程序以及网站无法使用等等。

第四.所以需要进行解决这个问题就需要开发一个应用程序进行定期的删除数据库的备份以及其他的文件。

第五.在进行删除数据库的备份的时候需要注意是的删除设置的几天前的数据库备份,其他最新的数据库的备份的文件不要删除。

第六:可以应用Windows服务进行开发定时删除数据库备份的应用的程序,也可以进行应用控制台开发定时删除数据库的备份的程序当然如果应用控制台应用程序进行开发,那么最好进行结合Windows 系统自带的计划任务程序比较方便。当然你是可以进行选择的,因人而异。

第五.那么如果做到删除指定的数据库备份文件例如DB2,DBName.0.DB2.DBPART000.20161010153053.001等等以及SQLServer DbName.bak等等

以及MySql数据库的备份文件等等,以及其他的文件格式都是支持的。

第七.那么解决这个问题我需要做的是:

   1.首先需要找到数据库备份文件的路径将其读取出来,当然这里所知的路径是指物理路径。

   2.需要做的是将数据库的文件的名称以及数据库备份的时间进行读取出来,为了方便取出最新的以及几天前的数据库备份。

   3.当然你还需要进行应用File文件类中的一些具体的删除的方法。来进行删除。

第八:下面我将自己写的定期删除数据库备份控制台应用程序贴出来供大家参考。

         定期的进行删除数据库备份文件代码如下

class Program
{
    static void Main(string[] args)
    {
        string strDirfile = Properties.Settings.Default.DB_FILE_PATH;
        Console.WriteLine("strDirfile{0}", strDirfile);
        int keepFileCnt = int.Parse(Properties.Settings.Default.KEEP_FILE_CNT);
        try
        {
            if (string.IsNullOrEmpty(strDirfile) || !Directory.Exists(strDirfile))
            {
                Console.WriteLine("配置的文件的路径不正确请检查{0}" + strDirfile);
            }
            if (keepFileCnt <= 0)
            {
                Console.WriteLine("没有配置删除的天数");
            }

            if (strDirfile != null)
            {
                if (Directory.Exists(strDirfile))
                {
                    string[] strDirs = Directory.GetDirectories(strDirfile);
                    string[] strFiles = Directory.GetFiles(strDirfile);
                    DBNameAndTime file = new DBNameAndTime();
                    if (strFiles != null)
                    {
                        foreach (string strFile in strFiles)
                        {
                            if (strFile != null)
                            {
                                FileInfo fi = new FileInfo(strFile);
                                string[] strArr = fi.Name.Split('.');
                                file.DataName = fi.Name; 
                                file.FileTime = strArr[5]; 
                                file.Url = strFile;
                                DateTime dt1 = DateTime.Now; 
                                if (strArr.Length > 0)
                                {
                                    IFormatProvider provider = new CultureInfo("zh-CN");
                                    string tarStr = "yyyyMMddHHmmss";
                                    DateTime dt2 = DateTime.ParseExact(file.FileTime.ToString(), tarStr, provider);
                                    TimeSpan ts = dt1 - dt2;
                                    Console.WriteLine("时间天数:{0}", ts);
                                    if (ts.TotalDays >= keepFileCnt)
                                    {
                                        if (strFile != null)
                                        {
                                            File.Delete(strFile);
                                            using (StreamWriter sw = new StreamWriter(strDirfile + "数据库备份的删除日志.txt", true))
                                            {
                                                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "数据库备份删除开始:" + "删除的路径:" + strDirfile + "删除数据库备份的名称" + strFile);
                                            }
                                            Console.WriteLine("{0}数据库备份文件删除成功!", DateTime.Now);
                                        }
                                        else
                                        {
                                            Console.WriteLine("删除文件失败!");
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine("其他的备份文件都是最新的没有3天前的备份!");
                                    }
                                }
                            }
                        }
                    }

                    //保存删除的根目录的文件夹
                    foreach (string strdir in strDirs)
                    {
                        Directory.Delete(strdir, true);
                    }

                }
                else
                {
                    Console.WriteLine("此目录中只有根目录了!");
                }
            }
            else
            {
                Console.WriteLine("此目录不存在!");
            }

        }
        catch (Exception ex)
        {
            //将数据库备份的异常写入到记事本中
            using (StreamWriter sw = new StreamWriter(strDirfile + "数据库备份的删除日志.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "备份文件都是最新的没有3天前的备份" + ex.Message);
            }
        }
    }

}
//进行声明备份数据库的类
public class DBNameAndTime
{
    private string fileName;
    /// <summary>
    /// 文件名称
    /// </summary>
    public string FileName { get { return fileName; } set { fileName = value; } }

    private string fileTime;
    /// <summary>
    /// 文件的最后修改时间
    /// </summary>
    public string FileTime { get { return fileTime; } set { fileTime = value; } }

    private string dataName;
    /// <summary>
    /// 数据库名称
    /// </summary>
    public string DataName { get { return dataName; } set { dataName = value; } }

    private string url;
    /// <summary>
    /// 文件路径
    /// </summary>
    public string Url { get { return url; } set { url = value; } }

    public string DownUrl { get { return fileName; } }
}

   以上内容均属于原创,转载请标明。谢谢!           

  

 

posted @ 2016-11-24 20:45  LowKeyC  阅读(1209)  评论(0编辑  收藏  举报
有志者事竟成破釜沉舟百二秦关终属楚苦心人,天不负,卧薪尝胆,三千越甲可吞吴