• sql2005数据库备份与还原


    由于软件的需要,组长让我做个数据库备份和还原,刚开始我是备份到软件根目录E:\oms\Web\App_Data下的,后来组长说要根据年月来建文件夹,把备份的数据库文件放到建的文件夹里。就这么小的一点建议,搞得我弄了半天。

    现在我把相关代码写在这儿,以备以后再用

    数据库备份的存储过程:

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    CREATE  PROCEDURE [dbo].[databaseBack]
     @backId UNIQUEIDENTIFIER,
     @strPath NVARCHAR(200)
    AS

    BEGIN

    DECLARE @strPaths NVARCHAR(200)

    set @strPaths = convert(NVARCHAR(19),getdate(),120)

    set @strPaths = REPLACE(@strPaths, ':' , '.')
    set @strPaths = REPLACE(@strPaths, ' ' , '.')

    set @strPaths = @strPath+'/'+@strPaths + '.bak'

    BACKUP DATABASE [oms] TO DISK = @strPaths WITH NOINIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT

    EN

    表示层后台代码:

      //获取软件的根目录
            string actualServerPath = Server.MapPath(Request.Path);
            int pathindex = actualServerPath.LastIndexOf("\\");
            string path = actualServerPath.Substring(0, pathindex);   

            path += "\\";


            //在软件的根目录下建文件夹
            DateTime time = DateTime.Now;
            string paths = "DataBase/" + time.Year.ToString();

            if (!Directory.Exists(Server.MapPath(paths)))
            {
                Directory.CreateDirectory(Server.MapPath(paths));
            }

            paths += "/" + time.Month.ToString();
            if (!Directory.Exists(Server.MapPath(paths)))
            {
                Directory.CreateDirectory(Server.MapPath(paths));
            } 

              //由于程序中的根目录和建的文件夹路径中的斜杠不一样,所以需要转换(这点特别要注意了)

            path += paths.Replace('/','\\');

            然后直接调用存储过程就ok了。

    备份要注意的问题:

    1、要备份的数据库必须和软件在同一台机器上

    2、备份的文件必须加后缀名:.bak

    3、软件的根目录和建的文件夹路径中的斜杠要转换一致

     

    数据库恢复的表示层后台代码:

    //backConnection是web.config中的连接字符串名
            Database db = DatabaseFactory.CreateDatabase("backConnection");
            string sql = "select spid from master..sysprocesses where dbid=db_id(@dbname)";
            DbCommand cmd = db.GetSqlStringCommand(sql);
            db.AddInParameter(cmd, "@dbname", DbType.String, "oms");
            IDataReader dr = db.ExecuteReader(cmd);
            List<string> process = new List<string>();
            try
            {
                while (dr.Read())
                {
                    process.Add(dr[0].ToString().Trim());
                }
            }
            catch
            { }
            dr.Close();
            cmd.Parameters.Clear();

    //杀死进程
            foreach (string s in process)
            {
                db.ExecuteNonQuery(CommandType.Text, "exec('kill " + s + "') ");
            }

    //恢复sql语句

            sql = "restore database oms from disk=@path WITH REPLACE";
            cmd = db.GetSqlStringCommand(sql);

    //path是要恢复的文件路径
            db.AddInParameter(cmd, "@path", DbType.String, path);
            db.ExecuteNonQuery(cmd);
            cmd.Connection.Close();
            cmd.Parameters.Clear();
            cmd.Dispose();
            Response.Write("<script>alert('恢复成功!')</script>");

     

    恢复数据库要注意的问题:

    1、要恢复的数据库跟正在运行的软件所连接的数据库不能是同一个

    2、恢复数据库用master系统数据库强制杀死软件正在运行的数据库进程

  • 相关阅读:
    Linux 重启命令
    Linux TCP连接数修改
    Linux 命令--查看物理CPU个数、核数、逻辑CPU个数
    keepalived配置文件
    keepalived 安装配置
    linux下keepalived 安装配置
    redis主从切换的集群管理
    CentOS_5.6下使用cmake编译MySQL_5.5.11
    cas错误:org.jasig.cas.client.validation.TicketValidationException: No principal was found in the response from the CAS server.
    完美实现在同一个页面中使用不同样式的artDialog样式
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1936565.html
Copyright © 2020-2023  润新知