winform程序,备份数据库+并压缩+并删除以前的备份

说明:为了定时备份服务器上的数据库并压缩到指定目录,方便下载到本地而写本程序。配合windows的任务计划,可以达到定时备份数据库的目的。

程序需引用SQLDMO.DLL,如电脑上已安装sqlserver,可在C:\Program Files\Microsoft SQL Server\80\Tools\Binn\找到

string ServerName = System.Configuration.ConfigurationSettings.AppSettings["ServerName"];//数据库服务器名
        string UserName = System.Configuration.ConfigurationSettings.AppSettings["UserName"];//数据库用户名
        string Password = System.Configuration.ConfigurationSettings.AppSettings["Password"];//密码
        string strDbName = System.Configuration.ConfigurationSettings.AppSettings["strDbName"];//数据库名
        string FilePathBak = System.Configuration.ConfigurationSettings.AppSettings["FilePathBak"];//备份后的文件保存路径(.bak),不包括文件名
        string FilePathRar = System.Configuration.ConfigurationSettings.AppSettings["FilePathRar"];//压缩文件保存的路径,这里不包括压缩后的文件名

public Form1()
        {
            InitializeComponent();

bool backup = BackUPDB(ServerName, UserName, Password, strDbName, FilePathBak);
            if (backup)
            {
                rar(FilePathBak, FilePathRar);
                del();
            }
            System.Environment.Exit(0);// 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。            
        }

/// <summary>
        /// 备份数据库
        /// </summary>
        /// <param name="ServerName">服务器名</param>
        /// <param name="UserName">登录账号</param>
        /// <param name="Password">密码</param>
        /// <param name="strDbName">待备份的数据库名</param>
        /// <param name="FilePathBak">备份后的文件保存路径</param>
        /// <returns></returns>
        public bool BackUPDB(string ServerName, string UserName, string Password, string strDbName, string FilePathBak)
        {
            SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
            SQLDMO.Backup bak = new SQLDMO.BackupClass();
            try
            {
                svr.LoginSecure = false;
                svr.Connect(ServerName, UserName, Password);
                bak.Action = 0; //SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
                bak.Initialize = true;

bak.Files = FilePathBak + strDbName + System.DateTime.Now.ToString("yyyyMMdd") + ".bak";//备份后的文件保存路径+文件名(F:\\databack\\fireweb20100810.bak)
                bak.Database = strDbName;
                bak.BackupSetName = strDbName;
                bak.BackupSetDescription = "数据库备份";
                bak.SQLBackup(svr);

return true;
            }
            catch (Exception err)
            {
                throw (new Exception("备份数据库失败" + err.Message));
            }
            finally
            {
                svr.DisConnect();
            }
        }

/// <summary>
        /// 压缩指定文件到指定文件夹
        /// </summary>
        /// <param name="path">被压缩的文件的路径,文件本身在方法中写明,因为文件名要由当前时间判断</param>
        /// <param name="rarPath">压缩后的保存路径</param>
        /// <returns></returns>
        public bool rar(string path, string rarPath)
        {
            bool flag = false;
            System.Diagnostics.Process Pc1 = new System.Diagnostics.Process();
            Pc1.StartInfo.FileName = "Winrar.exe";
            Pc1.StartInfo.CreateNoWindow = false;
            string fileName = strDbName + System.DateTime.Now.ToString("yyyyMMdd")+".bak";
            string rarFileName = strDbName + System.DateTime.Now.ToString("yyyyMMdd") + ".rar";
            path += fileName;//解压前的文件路径+文件名
            rarPath += rarFileName;//解压后的路径+文件名
            Pc1.StartInfo.Arguments = " a -ep " + rarPath + " " + path;//-ep 表示:从名称中排除路径,即压缩时不带各层目录
            Pc1.Start();
            if (Pc1.HasExited)
            {
                int iExitCode = Pc1.ExitCode;
                if (iExitCode == 0)
                {
                    flag = true;
                }
                else
                {
                    flag = false;
                }
                Pc1.Kill();
                Pc1.Close();
                Pc1.Dispose();
            }
            return flag;
        }

/// <summary>
        /// 由于每天备份一次,所以要把多余的备份文件和压缩文件删除,只保留最新的5个
        /// </summary>
        public void del()
        {
            //删除bak文件
            int count1 = 0;
            ArrayList al1 = new ArrayList();
            DirectoryInfo diPathBak = new DirectoryInfo(FilePathBak);
            foreach (FileInfo fi in diPathBak.GetFiles())
            {
                if (fi.Name.Length > 12)//每个备份的bak的文件名长度一定会大于12(20100808.bak)
                {
                    if (fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length - 8).Equals(strDbName) && fi.Extension.Equals(".bak"))
                    {
                        count1++;
                        al1.Add(fi.Name);
                        if (count1 > 5)
                        {
                            string filename = al1[0].ToString();//删除第一个(由于GetFiles()方法按名称升序排序取文件,即删除最早的)
                            File.Delete(diPathBak + filename);
                            al1.RemoveAt(0);
                            count1--;
                        }
                    }
                }
            }

//删除rar文件
            int count = 0;
            ArrayList al = new ArrayList();
            DirectoryInfo diPathRar = new DirectoryInfo(FilePathRar);
            foreach (FileInfo fi in diPathRar.GetFiles())
            {
                if (fi.Name.Length > 12)//每个备份的bak的文件名长度一定会大于12(20100808.bak)
                {
                    if (fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length - 8).Equals(strDbName) && fi.Extension.Equals(".rar"))
                    {
                        count++;
                        al.Add(fi.Name);
                        if (count > 5)
                        {
                            string filename = al[0].ToString();//删除第一个(由于GetFiles()方法按名称升序排序取文件,即删除最早的)
                            File.Delete(diPathRar + filename);
                            al.RemoveAt(0);
                            count--;
                        }

}
                }
            }
        }

时间: 2024-10-13 08:33:53

winform程序,备份数据库+并压缩+并删除以前的备份的相关文章

bat脚本,备份数据库并压缩

forfiles /p "D:\DBBackup" /m "*.sql" /d -08 /c "cmd /c del @path"forfiles /p "D:\DBBackup\backuplog" /m "*.rar" /d -03 /c "cmd /c del @path"@echo offset errorlevel=0 set DBUser=backupset DBPasswo

mysql自动备份数据库,同时ftp上传到指定服务器(scp远程获取本地备份)

最近要把服务器托管到电信机房,所以要对数据库进行备份,同时要把备份ftp上传到公司指定服务器. 一.先安装ftp服务 1.查询是否安装vsftpd: rpm -qa |grep vsftpd (rpm的安装:apt-get install rpm) 或者查询当前ftp进程:ps -ef|grep vsftpd ? 或者 ps -ef|grep ftp 2.如果没有就安装yum install vsftpd 3.安装完后看ftp安装目录:ps -ef|grep ftp 发现我的配置文件默认:/et

oracle 备份数据库对象(存储过程PROCEDURE,FUNCTION,VIEW,TRIGGER...)

开发过程中,需要不停的备份数据库对象, 特别是存储过程, 每次手动备份不免很低能啊 历经几次修改终于, 完美了,O(∩_∩)O哈哈~      (当然,你也可以再改简便一点~~~) select dbms_metadata.get_ddl('PROCEDURE',"PROCEDURE_NAME",'NAG') 遇到大存储过程老是丢东西不说, 对象名 还老是 "用户名"."对象名" 的格式,腻烦人!~ CREATE OR REPLACE PROCE

MSSQL创建维护计划自动备份数据库

一,备份数据库 1,点击"管理-->维护计划"右键点击"新建任务计划" 2,根据自己的需求设置备份计划的自动执行时间,这里我设置的是每天凌晨12就执行备份计划. 3,添加"备份数据库"计划 4,设置"备份数据库"计划的相关选项 5,备份计划完成以后,可以马上执行一次完整备份. 二,还原数据库 1,右击你所需要还原的数据库,依次点击"任务-->还原-->数据库". 2,在源数据库选择还原最新

SQL Server 2008怎么自动备份数据库

在SQL Server 2008数据库中.为了防止数据的丢失我们就需要按时的来备份数据库了.要是每天都要备份的话,人工备份会很麻烦的,自动备份的话就不需要那么麻烦了,只 要设置好了,数据库就会自动在你设置的时间段里备份.那么自动备份要怎么设置呢.下面为大家讲解. 工具/原料 电脑一台 要安装SQL Server 2008数据库. 方法/步骤 1 在电脑开始菜单中选择“SQL Server Management Studio”双击.在出现的界面中点击“连接”按钮. 2 在出现的“ Microsof

windows下bat批处理实现数据库备份、压缩、删除

@echo off rem 删除7天前的数据库备份 cd D:\db_bak\qd_web_project\dumpforfiles /m *.sql.gz /d -7 /c "cmd /c del @file /f" cd D:\db_bak\ios_web_project\dumpforfiles /m *.sql.gz /d -7 /c "cmd /c del @file /f" cd D:\db_bak\game_db_all\allforfiles /m

自动压缩备份数据库文件至指定服务器

公司用的数据库服务器每天都要备份,之前都是手动压缩,再拷贝一份至另一台存储. 闲来无事就决定用个脚本可以自动备份和复制 网上有很多资料,百度一下就有了 环境介绍 数据库备份文件存放在D:\beife\下 有一台同网段的服务器作为存放压缩文件备份 2. 压缩文档 先安装Winrar软件,并确定路径,稍后需要在系统环境变量里配置 我先将存储服务器的某个网络共享文件夹映射为网盘L,然后新建txt文件,输入使用以下命令 rar a -df -agYYYY-MM-DD  L:\  D:\oracle\bf

[Irving] SQL 2005/SQL 2008 备份数据库并自动删除N天前备份的脚本

以下为SQL脚本,本人以执行计划来调用,所以改成了执行命令,大家可根据自己需要改为存储过程使用 DECLARE @bak_path nvarchar(4000)='E:\MsBackUp\SqlAutoBackup\' --备份路径; DECLARE @baktype int = 0 --备份类型为全备,1为差异备,2为日志备份 DECLARE @type int = 3 --设置需要备份的库,0为全部库,1为系统库,2为全部用户库,3为指定库,4为排除指定库; DECLARE @dbnames

sql server 2008 R2 压缩备份数据库

今天需要把一个省外项目的数据库从服务器上备份.拷贝到本机(跨地域传输数据库备份文件). 连上VPN,通过远程桌面连接,连接上服务器,发现数据库文件已经有20G以上大小了. 文件太大,公司网络也不稳定,根本不可能通过网络传输过来. 于是,把数据库的恢复模式由"完整"模式设置为"简单"模式,接着收缩数据库, 数据库瞬间由20G变成1G多点. 在SSMS中,新建查询窗口,执行数据库备份语句: --定义变量,把备份数据库的QL脚本赋值给变量 declare @SqlBack