最近写了几个windows服务用于自动备份与删除数据:

services代码如下:

  public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
System.Timers.Timer timer1;
static SqlConnection conn = new SqlConnection();//数据库连接 protected override void OnStart(string[] args)
{
timer1 = new System.Timers.Timer();
timer1.Interval = (0.5*)* * ; //设置计时器事件间隔执行时间
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true; } protected override void OnStop()
{
this.timer1.Enabled = false;
} private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//执行SQL语句或其他操作 if (DateTime.Now.Hour == || DateTime.Now.Hour == || DateTime.Now.Hour == || DateTime.Now.Hour == || DateTime.Now.Hour == || DateTime.Now.Hour == ||
DateTime.Now.Hour == || DateTime.Now.Hour == )//以上时间才可以备份。可以添加2个timer用于整点保存数据
{
NLog.Logger log = NLog.LogManager.GetCurrentClassLogger();
try
{ string logicalname = "BackupTradeDb_" + DateTime.Now.ToString("yyyyMMddhhmmss");
string physicalname = AppDomain.CurrentDomain.BaseDirectory; string path = @"F:\WindowsServes\backupDB\" + DateTime.Now.ToString("yyyyMMdd");//保存备份文件的路径 if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
log.Info("路径为:"+path); physicalname = Path.Combine(path, logicalname + ".bak"); log.Info("开始备份" );
StartBackup(logicalname, physicalname, "NewTradeDB");
}
catch (Exception ex)
{
System.Diagnostics.Debug.Print(ex.ToString()); log.Info(ex.ToString()); } //DateTime date = DateTime.Now.AddDays(-5); //foreach (DirectoryInfo item in directory)
//{ // if (item.Name.Contains(date.ToString("yyyyMMdd")))
// {
// FileInfo[] files = item.GetFiles();
// foreach (FileInfo file in files)
// {
// file.Delete();
// }
// item.Delete();
// }
//} 这个为删除5天前的备份数据
} } private void StartBackup(string logicalname, string physicalname,string dbName)
{
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@devtype",SqlDbType.VarChar,),
new SqlParameter("@logicalname",SqlDbType.VarChar,),
new SqlParameter("@physicalname",SqlDbType.VarChar,)
};
paras[].Value = "disk";
paras[].Value = logicalname;
paras[].Value = physicalname; NLog.Logger log = NLog.LogManager.GetCurrentClassLogger(); int device = ExecuteOtherProc("sp_addumpdevice", paras);//只是添加一个备份设备 log.Info("添加一个备份设备"+device);
string sql_backup =string.Format("backup database {0} to {1} WITH DIFFERENTIAL",dbName,logicalname);
  //差异备份 log.Info(sql_backup); int backup = ExecuteSql(sql_backup); log.Info("执行备份语句,影响行数为"+backup); }
public static int ExecuteOtherProc(string procName, params SqlParameter[] paras)
{ NLog.Logger log = NLog.LogManager.GetCurrentClassLogger();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = procName;
cmd.Connection = conn; if (paras != null)
{
cmd.Parameters.AddRange(paras);
}
int flag = ;
try
{
conn.Open();
flag = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{ log.Info(ex.ToString());
}
finally
{
conn.Close();
}
return flag;
}
public static int ExecuteSql(string sql)
{
NLog.Logger log = NLog.LogManager.GetCurrentClassLogger(); int flag = ;
SqlCommand cmd = new SqlCommand(sql, conn); try
{
conn.Open();
flag = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
log.Info(ex.ToString());
}
finally
{
conn.Close();
}
return flag;
} }

windows服务自动备份数据库的更多相关文章

  1. 在linux和windows下自动备份数据库

    摘要: 详细介绍在windows和linux下自动备份数据库的过程,希望可以让新手立即上手吧! 本文档内容共分为2大部分:linux和windows Linux和windows都分为:准备工作和操作阶 ...

  2. SQLServer2005利用维护计划自动备份数据库

    经常性忘了给数据库备份,结果当数据库发生问题的时候,才发现备份是1个月以前的,那个后悔与懊恼还加惭愧啊,别提有对难受了.要认为的记住去备份比较难,每天事情又那么多,所以有了这个自动备份就不用愁了.先拷 ...

  3. php每天自动备份数据库

    php每天自动备份数据库 windows中如何添加计划任务? 前提:添加windows计划任务,每天打开备份数据库的页面.1.打开http://localhost/thinkphp3.2/index. ...

  4. Sql Server自动备份数据库,定期删除备份

    //实现:每天自动备份数据库,定期删除备份 //步骤:[开始]--[所有程序]--[Microsoft SQL Server 2005]--[SQL Server Management Studio] ...

  5. SQL Server 定时自动备份数据库

    在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库,这篇文章介绍使用SQL Server 数据库代理中的作业定时自动备份数据库. 1.启动SQL Server代理服务,如下图: 绿色 ...

  6. MSSQL Express版本自动备份数据库

    由于Express版本的数据库没有自动备份数据库的功能,所以需要自己搭建好备份功能 一.具体原理: 1.利用SQL备份命令:Backup Database 2.使用sqlcmd执行备份命令 3.使用系 ...

  7. CentOS下使用crontab+mysqldump实现定时自动备份数据库

    一 : 为什么要进行数据库的备份? 最主要的原因:尽可能地减少损失,包括时间上.精神上和金钱上的损失.很多人都不注意备份数据,以致在发生问题后丢失大量的重要数据.要知道,在地球上网是很危险的,即使做好 ...

  8. SQL Server 2008、SQL Server 2008R2 自动备份数据库

    让SQL Server 2008自动备份数据库,需要建立一个SQL Server作业,并启动SQL Server代理,使该作业定期运行. 具体来说,可以按以下步骤进行: 一.打开SQL Server ...

  9. Navicat自动备份数据库

    @ 目录 Navicat自动备份数据库 备份与还原 修改备份位置 MySQL:5.7 Navicat:11 Windows10 重要数据库的定时备份是非常重要的,使用Navicat可以非常方便快捷地自 ...

随机推荐

  1. 小div在大div里面 垂直居中

    方法1: .parent { width:800px; height:500px; border:2px solid #000; position:relative; } .child { width ...

  2. IT技能等级

    IT技能 低:会使用,会简单维修(操作) 中:能跟据实际业务需求扩展(技改.完善) 中高:找产品,能组合,能设计创造(出方案) 高:能规划(规划)

  3. 关于dependencies和devDependencies的理解

    npm install 会下载dependencies和devDependencies中的模块,当使用npm install --production或者注明NODE_ENV变量值为productio ...

  4. Redis常用特性

    发布订阅 ·服务器状态在pubsub_channels字典保存了所有频道的订阅关系:SUBSCRIBE命令负责将客户端和被订阅的频道关联到这个字典里面,而UNSUBSCRIBE命令则负责解除客户端和被 ...

  5. Windows底层开发前期学习准备工作

    1.若对Windows底层开发没有兴趣,不建议继续深究, 若有些兴趣可以继续. 2. 先广泛打基础,比如C/ASM/C++/MFC,再学习Windows核心编程,对R3上的一些开发有所熟悉,再系统的学 ...

  6. IOS UITextFieldDelegate (常用的代理方法)

    #pragma mark - UITextFieldDelegate // 返回NO代表着文本输入框不可以改变(不可以编辑) - (BOOL)textField:(UITextField *)text ...

  7. IOS plist的数据 存 取(沙河目录)

    应用沙盒目录的常见获取方式 沙盒根目录:NSString *home = NSHomeDirectory(); Documents:(2种方式) 1.利用沙盒根目录拼接”Documents”字符串 N ...

  8. RHEL7 本地yum源配置

    配置yum 源 1.挂载DVD光盘到/mnt   因为配置时候路径名里面不能有空格,否则不能识别  [root@ mnt]# mount /dev/cdrom /mnt 2.在目录/etc/yum.r ...

  9. 【BZOJ1030】[JSOI2007] 文本生成器(AC自动机上跑DP)

    点此看题面 大致题意: 给你\(N\)个字符串(只含大写字母),要你求出有多少个由\(M\)个大写字母构成的字符串含有这\(N\)个字符串中的至少一个. \(AC\)自动机 看到题目,应该比较容易想到 ...

  10. Python F-string 更快的格式化

    Python的格式化有%s,format,F-string,下面是比较这三种格式化的速度比较 In [12]: a = 'hello' In [13]: b = 'world' In [14]: f' ...