windows服务自动备份数据库
最近写了几个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*60)* 60 * 1000; //设置计时器事件间隔执行时间 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 == 1 || DateTime.Now.Hour == 07 || DateTime.Now.Hour == 11 || DateTime.Now.Hour == 15 || DateTime.Now.Hour == 19 || DateTime.Now.Hour == 20 || DateTime.Now.Hour == 21 || DateTime.Now.Hour == 22)//以上时间才可以备份。可以添加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,20), new SqlParameter("@logicalname",SqlDbType.VarChar,256), new SqlParameter("@physicalname",SqlDbType.VarChar,520) }; paras[0].Value = "disk"; paras[1].Value = logicalname; paras[2].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 = 0; 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 = 0; SqlCommand cmd = new SqlCommand(sql, conn); try { conn.Open(); flag = cmd.ExecuteNonQuery(); } catch (Exception ex) { log.Info(ex.ToString()); } finally { conn.Close(); } return flag; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探