`
uoo790xu
  • 浏览: 8165 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

创建Windows服务实现MSSql数据库备份

 
阅读更多

创建Windows服务实现MSSql数据库备份
2010年12月09日
  对于安装的SqlExpress的服务器或服务不够,无法创建Sql作业的服务器上使用
  由于代码比较简单,就简化点说:
  1、在VS下新建一个Windows服务项目。里面自动添加了一个名称为Service1的windows 服务。(直接创建Windows运用程序项目的可以在项目上右键添加Windows服务)
  2、添加App.Config配置文件(根据自己需要)
  strCon:Sql连接字符串       logPath:日志文件路径         dbPath:备份文件存放路径        3、添加System.Configuration引用
  4、在Service1中添加代码:
  备注:备份系统需要对数据库用户添加权限:grant backup database to 用户名 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.ServiceProcess; using System.Text; using System.IO; using System.Timers; using System.Configuration; namespace AdBackUpService { public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } Timer timer = null; private int cTime = 604800000;//正常间隔时间7天(每周日23点59分开始备份) private string logPath = ConfigurationManager.AppSettings["logPath"]; private string dbPath = ConfigurationManager.AppSettings["dbPath"]; ///  /// 服务启动 ///  ///  protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 Start();//启动创建日志 //BackUp();//启动时即时备份一次 if(timer == null) timer = new Timer(); timer.Interval = GetBackMillisecond(); timer.Enabled = true; timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); } protected override void OnStop() { // TODO: 在此处添加代码以执行停止服务所需的关闭操作。 timer.Enabled = false; timer.Dispose(); timer = null; Stop(); } ///  /// 获取执行备份剩余时间(毫秒) ///  ///  protected double GetBackMillisecond() { double millisecond = 3;//默认监控间隔3秒,给系统一个缓冲时间 DateTime dt = DateTime.Now; DateTime temp1 = dt; DateTime temp2; if(dt.DayOfWeek.ToString() == "Tuesday") { temp1 = temp1.AddDays(6); } else if(dt.DayOfWeek.ToString() == "Wednesday") { temp1 = temp1.AddDays(5); } else if(dt.DayOfWeek.ToString() == "Thursday") { temp1 = temp1.AddDays(4); } else if(dt.DayOfWeek.ToString() == "Friday") { temp1 = temp1.AddDays(3); } else if(dt.DayOfWeek.ToString() == "Saturday") { temp1 = temp1.AddDays(2); } else if(dt.DayOfWeek.ToString() == "Monday") { temp1 = temp1.AddDays(1); } temp2 = new DateTime(temp1.Year, temp1.Month, temp1.Day, 23, 59, 0, 0); TimeSpan ts = temp2.Subtract(dt); if(ts.TotalMilliseconds > 0) millisecond = ts.TotalMilliseconds; return millisecond; } void timer_Elapsed(object sender, ElapsedEventArgs e) { BackUp(); if(timer.Interval != cTime) timer.Interval = cTime; } protected void BackUp() { string backName = "V3" + GetDateStr(DateTime.Now); string sql = "backup database ADOnlineV3 to disk='" + dbPath + backName + ".bak'"; try { DBHelper.ExecuteCommand(sql, CommandType.Text); WriteRecord("Success:" + backName + ".bak Time:" + DateTime.Now.ToString()); } catch(Exception ex) { WriteRecord("Error:" + ex.Message + " Time:" + DateTime.Now.ToString()); } } #region 服务日志 ///  /// 服务启动创建日志并添加记录 ///  public void Start() { FileStream fs = new FileStream(logPath, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(DateTime.Now.ToString() + "------------------------------------------------- -------------------------------------------\n"); m_streamWriter.WriteLine("AdBackUpService: Service Started! Time:" + DateTime.Now.ToString() + "\n"); m_streamWriter.Flush(); m_streamWriter.Close(); fs.Close(); } ///  /// 备份操作日志记录 ///  ///  public void WriteRecord(string record) { FileStream fs = new FileStream(logPath, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(record + "\n"); m_streamWriter.Flush(); m_streamWriter.Close(); fs.Close(); } ///  /// 服务停止日志 ///  public void Stop() { FileStream fs = new FileStream(logPath, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine("AdBackUpService: Service Stopped! Time: " + DateTime.Now.ToString() + "\n"); m_streamWriter.Flush(); m_streamWriter.Close(); fs.Close(); } #endregion ///  /// 转换时间字符串,精确到毫秒 ///  ///  ///  public string GetDateStr(DateTime dt) { StringBuilder strDate = new StringBuilder(); strDate.Append(dt.Year); strDate.Append(dt.Month  /// 获取影响多少行 ///  /// T-SQL语句 /// 命令类型 /// T-SQL参数 /// 影响多少行 public static int ExecuteCommand(string queryString, CommandType commandType, params SqlParameter[] param) { int flag = 0; using(SqlConnection con = new SqlConnection(ConnectionString)) { SqlCommand command = new SqlCommand(queryString, con); command.CommandType = commandType; if(param != null) { for(int i = 0; i  /// 获取DataSet对象 ///  /// T-SQL语句 /// 命令类型 /// T-SQL参数 /// DataSet对象 public static DataSet GetDataSet(string queryString, CommandType commandType, params SqlParameter[] param) { DataSet ds = new DataSet(); using(SqlConnection con = new SqlConnection(ConnectionString)) { SqlDataAdapter adapter = new SqlDataAdapter(queryString, con); adapter.SelectCommand.CommandType = commandType; if(param != null) { adapter.SelectCommand.Parameters.Clear(); for(int i = 0; i  /// 获取DataReader对象 ///  /// T-SQL语句 /// 命令类型 /// T-SQL参数 /// DataReader对象 public static SqlDataReader GetDataReader(string queryString, CommandType commandType, params SqlParameter[] param) { SqlDataReader dataReader = null; SqlConnection con = new SqlConnection(ConnectionString); SqlCommand command = new SqlCommand(queryString, con); command.CommandType = commandType; if(param != null) { for(int i = 0; i  /// 查询单个数据 ///  /// T-SQL语句 /// 命令类型 /// T-SQL参数 /// Object对象 public static Object GetScalar(string queryString, CommandType commandType, params SqlParameter[] param) { Object obj = null; using(SqlConnection con = new SqlConnection(ConnectionString)) { SqlCommand command = new SqlCommand(queryString, con); command.CommandType = commandType; if(param != null) { for(int i = 0; i SDK v2.0下的SDK命令提示 工具
  安装卸载命令: installutil 服务物理路径.exe
  installutil /u 服务物理路径.exe
  好了。就是这么简单。需要的话,不妨试试!
  注:有可能有的服务器没有上述两个命令工具,那一般的命令行工具能不能行呢,这个问题留着另外一篇说明。:)
分享到:
评论

相关推荐

    数据库灾难性恢复(数据库技术;灾难性;恢复;数据备份)

    只创建数据库备份确实创建了一个 DR 解决方案。它也许是非常有限的,这取决于您的环境。通过从“活动”的系统上移走所创建的备份,可以提高保护的级别。增加数据库备份的频率也降低了数据丢失的风险。备份软件对于...

    mssql和mysql打包存储

    本实例每逢周2,4,6定时备份windows 2003系统上的mysql和mssql数据库。并替换旧的备份。 0.根据数据库存放目录和数据备份目录设置好backupsql.bat文件 1.运行step1.bat创建备份数据库用户 2.运行step2.bat拷贝备份...

    mysql自动定时备份数据库的最佳方法(windows服务器)

    网上有很多关于window下Mysql自动备份的方法,可是真的能用的也...数据库名称为:952game数据库备份目的地:d:\db_bak\ (你想把数据库备份到哪个盘的路径)我想备到D盘的db-bak目录下面===========================

    TD备份工具:【td定时备份,td定时数据备份,文件定时备份,testdirector定时备份,testdirector定时数据备份,testdirector备份工具,文件备份工具,testdirector定时备份工】

    td定时备份,td定时数据备份,文件定时备份,testdirector定时备份,testdirector定时数据备份,testdirector备份工具,文件备份工具,testdirector定时备份工具,文件定时备份工具。 【要求】:操作系统必须安装...

    迷你版SQL2000服务器

    1、MSSQL2000数据库服务开启、关闭控制; 2、基本数据库操作(改密码、数据库新建、删除、分离、附加、备份、恢复); 3、日志和连接信息,简易防火墙,自启动设置,计划任务(自动备份与执行)等。 注意事项: ...

    小鸟云管家v1.0.1.20官方版.zip

    2、支持mysql、mssql数据库创建、管理、备份、还原等操作。 3、实时准确的系统资源监控功能,让系统资源消耗一目了然。 4、针对服务器定制的系统扫描功能,智能清理服务器运行过程中产生的垃圾并优化系统运行速度...

    攀普云备份客户端 v6.15

    强大的应用支持:支持Oracle,Mysql,MsSql等大型数据库的备份还原。跨平台多系统支持:支持windows,Linux,Mac,OS系统环境。完善的备份策略:可根据需求设定不同的数据备份方式,完整、增量、差异等。快捷文件...

    mysql数据库管理工具

    Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, ...

    mysql数据库管理软件navicat

    Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, ...

    Navicat for MySQL MySQL数据库管理工具 v10.0.11

    Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, TXT, ...

    Navicat for MySQL(MySQL数据库管理工具)V10.1.7简体中文特别版软件下载

    Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, ...

    数据库操作语句大全(sql)

    1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\...

    Navicat_for_MySQL_10.1.7_XiaZaiBa

    Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, ...

    Navicat.for.MySQL.v8.0.18

    Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, ...

    navicat for mysql

    Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, ...

    Navicat 8.0.24 中文简体版

    Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, ...

    Navicat简体中文版V8.0.18 

    Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, ...

    php网络开发完全手册

    14.3 如何创建一个数据库与表 223 14.3.1 登录与退出MySQL的命令行 14.3.1 管理模式 223 14.3.2 MySQL的数据库操作 224 14.3.3 表的创建 225 14.4 数据类型的介绍 228 14.5 索引与唯一值的介绍 229 14.6 数据的操作 ...

    Microsoft SQL Server 2005 Express Edition SP3

    Windows 加密服务提供程序 (CSP) 是执行身份验证、编码和加密服务的代码,基于 Windows 的应用程序通过 Windows Server 2003 中的 CryptoAPI 访问这些服务。如果停止或禁用 CSP 服务,则 SQL Server 安装程序会失败...

    PHP程序开发范例宝典III

    实例187 通过mssql_connect()函数连接SQL Server数据库 293 实例188 通过ADO方式实现指定时间段的信息检索 294 实例189 通过函数实现商品信息的检索 296 实例190 通过ADO方式实现输入页码跳转到指定页 297 ...

Global site tag (gtag.js) - Google Analytics