zoukankan      html  css  js  c++  java
  • 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系统数据库强制杀死软件正在运行的数据库进程

  • 相关阅读:
    VUE中is的作用
    lable便签 for的作用
    Java第五课
    Java第四课课后作业
    Java第四课
    Unit6Java运算符
    Unit5Java数据类型
    Unit4如何使用类
    Java如何设计并编写类
    IDEA安装Alibaba,SonarLint代码规范检查插件
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1936565.html
Copyright © 2011-2022 走看看