使用程序备份服务器端数据库文件和其他文件(一)

1.前言:
存放在服务器上的数据(包括网站的页面、图片,数据库文件等),对于网络管理员来说,必须得经常定期备份。可能大部分人都会登录到服务器,对数据库进行备份操作,对图片文件等进行压缩,再将备份文件等传到本地。总是要登录备份文件觉得挺麻烦,所以就想用程序来实现备份 。当前我用的数据库是sql server2000,备份的文件是网站的图片。

欢迎大家交流,有不当之处,请及时指出,请联系ntshenwh@gmail.com

2.实现原理:
  服务器端运行一个不间断的程序,负责数据库备份和图片备份操作,它会定期检查一个备份信息表,查看是否有需要备份的文件。如果有,则立即对相应要备份的文件进行备份。
 

3.数据库结构:
 表:
 CREATE TABLE [dbo].[TBackup] (
 [PKID] [int] IDENTITY (1, 1) NOT NULL ,
 [Name] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,  --备份名称
 [CreatedDate] [datetime] NULL ,             --创建时间
 [Type] [tinyint] NULL ,                 --备份类型,1 备份文件 2 备份数据库
 [Status] [tinyint] NULL ,                --备份状态  1 等待备份 2 备份中  3 备份完成 4 备份失败
 [DBName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , --数据库名称
 [SourceFile] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL , --备份源文件
 [DestFile] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,  --目标文件名(不包括后缀名,如 bak2007 )
 [DestFolder] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,  --目标文件夹(如c:/aa/)
 [UsedTime] [float] NULL ,                                  --耗时
 [DLPath] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,  --下载路径
 [CreatedUser] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL  --创建者
) ON [PRIMARY]
 
 存储过程:
  插入记录
 CREATE  Proc P_AddBackup

    @Name varchar(100),
    @Type tinyint,
    @DBName varchar(50),
    @SourceFile varchar(100),
    @DestFile varchar(100),
    @DestFolder varchar(100),  
    @CreatedUser varchar(50),
    @PKID int output
)
as
begin
 Insert into TBackup(Name,Type,Status,DBName,SourceFile,DestFile,DestFolder,UsedTime,DLPath,CreatedUser)
 values(@Name,@Type,1,@DBName,@SourceFile,@DestFile,@DestFolder,0,'',@CreatedUser)
 set @PKID =@@identity
end

 

 更改记录
CREATE   Proc P_UpdateBackup

    @PKID int,
    @Status tinyint,
    @UsedTime float,
    @DLPath varchar(100),
    @rv int output
)
as
begin
 
 Update TBackup
 set Status=@Status,
     UsedTime = @UsedTime,
     DLPath = @DLPath
 Where PKID = @PKID

 set @rv =@@rowcount
end


4.实现代码:
 服务器端是一个控制台程序,在VS.2005环境下编写.
 其中用到了几个类:
 CBackup.cs    实体类,作为信息的载体。
 CThread.cs    主要线程类,由它进行不间断扫描程序,其中备份操作也是在该类中调用的。
 DBHelper.cs   数据库操作类,用来获取备份信息及更改备份信息。
 ZipHelper.cs  用来压缩备份文件。
 Common.cs     通用类,存放静态变量及记录日志。
 Program.cs    main()函数所在类,从main开始。

 
 注意的是在Common.cs中事先设定好数据库连接字符串及备份文件下载路径。

5.使用案例:
  进行本地测试
  5.1 在本地数据库pubs下,建立表及存储过程
  5.2 运行控制台程序
  5.3 调用 P_AddBackup 插入一条记录
  5.4 查看运行效果

6.使用建议:
  6.1 该备份方法 适合web服务,数据库服务集成在一个服务器上.
  6.2 将控制台程序放到服务器端运行.同时建一个web页面放到服务器上,该页面用来维护TBackup信息表.
  6.3 在备份数据库文件时,请注意,每次备份的目标文件名不能重复,否则备份出错. 

 

 Common.cs

using  System;
using  System.Collections.Generic;
using  System.IO;
using  System.Text;

namespace  BackupTool
{
    
/// <summary>
    
/// 通用类,定义常量,公共方法
    
/// </summary>

    class Common
    
{
        
常量

        
/// <summary>
        
/// 写入日志信息
        
/// </summary>
        
/// <param name="msg">信息</param>

        public static void WriteLog(string msg)
        
{

            
if (!Directory.Exists(LogPathFloder))
                Directory.CreateDirectory(LogPathFloder);
            
if (!File.Exists(LogPath))
                File.Create(LogPath);

            
try
            
{
                
using (StreamWriter sw = File.AppendText(LogPath))
                
{
                    sw.WriteLine(
"[" + System.DateTime.Now.ToString() + "] " + "" + msg + " ");
                }

            }

            
catch (Exception ex)
            
{ }
            
finally
            
{ }

        }


        
/// <summary>
        
/// 写入异常信息
        
/// </summary>
        
/// <param name="msg">信息</param>

        public static void WriteLog(Exception exsource)
        
{

            
string msg = "异常信息:" + exsource.Message + " " + "异常明细:" + exsource.StackTrace;

            
if (!Directory.Exists(LogPathFloder))
                Directory.CreateDirectory(LogPathFloder);
            
if (!File.Exists(LogPath))
                File.Create(LogPath);

            
try
            
{
                
using (StreamWriter sw = File.AppendText(LogPath))
                
{
                    sw.WriteLine(
"[" + System.DateTime.Now.ToString() + "] " + "" + msg + " ");
                }

            }

            
catch (Exception ex)
            
{ }
            
finally
            
{ }

        }


    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值