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--;
}
}
}
}
}
winform程序,备份数据库+并压缩+并删除以前的备份的更多相关文章
- mysqldump进行数据库的全备时,备份数据库的顺序是什么,就是先备份哪个库,然后再备份哪个库
需求描述: 今天在用mysqldump工具进行数据库的备份的时候,突然想了一个问题,比如我有10个库要进行备份 那么是先备份哪个,然后再备份哪个呢,所以,做了实验,验证下. 操作过程: 1.使用--a ...
- bat脚本,备份数据库并压缩
forfiles /p "D:\DBBackup" /m "*.sql" /d -08 /c "cmd /c del @path"forfi ...
- oracle 备份数据库对象(存储过程PROCEDURE,FUNCTION,VIEW,TRIGGER...)
开发过程中,需要不停的备份数据库对象, 特别是存储过程, 每次手动备份不免很低能啊 历经几次修改终于, 完美了,O(∩_∩)O哈哈~ (当然,你也可以再改简便一点~~~) select db ...
- [转载]使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)
http://www.cnblogs.com/benbenkoala/archive/2009/03/11/1407793.html 引言:SQL Server的事务日志传送备份是仅次于镜像的高可靠性 ...
- 通过shell定时备份数据库
需求: 每天凌晨2:10备份数据库zhengDB到 /data/backup/db. 备份开始和结束能够给出相应提示信息. 备份后的文件标识标准为已备份时间为文件名,并打包成 .tar.gz 的形式, ...
- SQL Server 2008备份数据库失败,拒绝访问的原因
原文:SQL Server 2008备份数据库失败,拒绝访问的原因 备份数据到特定目录是出现拒绝访问,然后测试备份到C盘根目录正常. 查了下原因: 是因为那个目录没有Authenticated Use ...
- Navicat for MySQL使用手记(下)--实现自动备份数据库
五.备份和还原MySQL数据库 在数据库的管理中,备份和还原是必须做认真做的事情,如果疏忽或者做粗糙了,那么一旦数据库故障后果不堪设想,所以Navicat同样也有备份和还原的功能,相比较创建功能,其备 ...
- SQL Server 2008怎么自动备份数据库
在SQL Server 2008数据库中.为了防止数据的丢失我们就需要按时的来备份数据库了.要是每天都要备份的话,人工备份会很麻烦的,自动备份的话就不需要那么麻烦了,只 要设置好了,数据库就会自动在你 ...
- python使用多线程备份数据库
前言:在日常服务器运维工作中,备份数据库是必不可少的,刚工作那会看到公司都是用shell脚本循环备份数据库,到现在自己学习python语言后,利用多进程多线程相关技术来实现并行备份数据库,充分利用服务 ...
随机推荐
- How Hystrix Works?--官方
https://github.com/Netflix/Hystrix/wiki/How-it-Works Contents Flow Chart Circuit Breaker Isolation T ...
- JS实现页面跳转 浏览器地址栏保持不变
JS实现页面跳转 浏览器地址栏保持不变 在公司内部框架中,发现点击超链接,页面发生跳转,而浏览器地址栏URL始终保持不变.分析其实现机制,响应A标签onclick事件,通过Ajax向服务器端发送htt ...
- vue中剖析中的一些方法
1 判断属性 71 -81 var hasOwnProperty = Object.prototype.hasOwnProperty; /** * Check whether the object h ...
- Ubunut PPA源概述
Ubuntu 自带的“软件”应用,可以安装海量软件,既包括发行者支持的软件.社区支持的软件,也包括专有驱动和版权软件.有时,我们需要的软件通过这些渠道仍然无法找到.这时,可以到 PPA 软件源中查找. ...
- Windows10 Linux子系统的启用和中文用户名的修改
一直用的虚拟机Linux,忽然心血来潮,看到Windows 10可以使用Linux子系统,于是来装一波,按照这位前辈的教程 https://blog.csdn.net/zhangdongren/art ...
- JS对浏览器Cookie的操作,查询、设置以及删除
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一 ...
- 【Linux下tar命令详解】
tar命令用于建立.还原备份文件,它可以加入.解开备份文件内的文件. 参数 带有*号的为常用的参数 . -A 新增压缩文件到已存在的压缩包 . -c 建立新的压缩文件* . -d 记录文件的差别 . ...
- 脚本实现自动化安装lamp&lnmp
#备注:前提是将lnmp和lnmp自动化脚本写好放在相应的路径, 脚本已写好,请查看我博客中的 shell脚本 专栏! #!/bin/bash #安装lamp或者lnmp path=/server/s ...
- python-安装xlrd xlwt 插件
最近需要对比两个表格的内容,然后修改其中的某列内容.因为工作量太大,所以想通过python来实现.上网查了相关的操作,其中牵扯到两个功能模块,xlrd xlwt.这两个功能模块分别是对excel进行读 ...
- js中常用的对象—Math的属性和方法
js中有一个内置对象——Math对象,在有的时候非常有用,我们来分析一下: Math常用属性(注意要大写): E 返回算术常量 e,即自然对数的底数(约等于2.718)LN2 返回 2 的自然对数(约 ...