SqlServer T-Sql实现数据库完整备份和还原

SqlServer T-Sql实现数据库完整备份和还原,第1张

概述一、SqlServer T-Sql实现数据库完整备份还原 本中方式整理总结为3.0的版本 本次整理说明: 1.不再使用存储过程模式,直接使用t-sql语句处理 2.解决数据库还原“因为数据库正在使用,所以无法获得对数据库的独占访问权”的问题,更多参考:Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 二、Sql整理 1.备份语句 use master;go---声

一、sqlServer T-sql实现数据库完整备份和还原

本中方式整理总结为3.0的版本

本次整理说明:

1.不再使用存储过程模式,直接使用t-SQL语句处理

2.解决数据库还原“因为数据库正在使用,所以无法获得对数据库的独占访问权”的问题,更多参考:Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)

二、sql整理

1.备份语句

use master;go---声明变量declare @dbname nvarchar(max)='Mvc_HNHZ';declare @dbFullname nvarchar(max)='E:\NewWork\Web\backup\test1.bak';---备份数据库DECLARE @kID varchar(100)  SET @kID=''  SELECT @kID=@kID+'KILL '+CAST(spID as Varchar(10))  FROM master..sysprocesses  WHERE dbID=DB_ID(@dbname)  PRINT @kID  EXEC(@kID);backup database Mvc_HNHZ to disk=@dbFullname;

2.还原语句

use mastergo---声明变量declare @dbname nvarchar(max)='Mvc_HNHZ';declare @dbFullname nvarchar(max)='E:\NewWork\Web\backup\test1.bak';--1.1修改为单用模式 exec(N'ALTER DATABASE '+@dbname+' SET SINGLE_USER WITH RolLBACK IMMEDIATE');--1.2结束链接进程	DECLARE @kID varchar(max)  	SET @kID=''  	SELECT @kID=@kID+'KILL '+CAST(spID as Varchar(10))  FROM master..sysprocesses  	WHERE dbID=DB_ID(@dbname)  ;	EXEC(@kID) ;--2.执行还原语句   restore database @dbname from  disk=@dbFullname   with replace  --覆盖现有的数据库--3.重置数据库为多用户模式 exec(N'ALTER DATABASE '+@dbname+' SET MulTI_USER WITH RolLBACK IMMEDIATE');

三、Ado.Net 关键代码

1.备份 *** 作

/// <summary>/// 创建数据库备份/// </summary>public static voID CreateBackup(){    string dbname = GetDbname();    //要备份的位置    string dbfullname = GetDbPath() + string.Format("{0}_{1}.bak",dbname,DateTime.Now.ToString("yyyyMMddhhmmss"));    //判断文件是否存在    if (file.Exists(dbfullname))    {        throw new Exception(dbfullname + "的备份文件已经存在,请稍后再试");    }    try    {        sqlConnection con = DbHelpersql.GetConnection();        sqlCommand cmd = con.CreateCommand();        con.open();        try        {            cmd.CommandText = "use master";            cmd.ExecuteNonquery();            //1. 执行备份 *** 作            StringBuilder sql = new StringBuilder();            //sql.Append("exec master.dbo.proc_Backup @dbname,@dbFullname");            sql.Append(@"DECLARE @kID varchar(100)                      SET @kID=''                      SELECT @kID=@kID+'KILL '+CAST(spID as Varchar(10))  FROM master..sysprocesses                      WHERE dbID=DB_ID(@dbname)                      PRINT @kID                      EXEC(@kID);                    backup database Mvc_HNHZ to disk=@dbFullname;");            sqlParameter[] parameters = new sqlParameter[]{            new sqlParameter("@dbname",sqlDbType.NVarChar,200),new sqlParameter("@dbFullname",};            parameters[0].Value = dbname;            parameters[1].Value = dbfullname;            cmd.Parameters.Clear();            cmd.Parameters.AddRange(parameters);            cmd.CommandText = sql.ToString();            cmd.ExecuteNonquery();        }        finally        {            con.Close();        }    }    catch (Exception ex)    {        throw new Exception("创建数据库备份出错:" + ex);    }}


2.还原 *** 作

/// <summary>/// 还原数据库/// </summary>public static voID Restore(string restorefilename){    //1.获取还原数据库和文件    string dbname = GetDbname();    string dbFullname = GetDbPath() + restorefilename;    try    {        //2.执行还原 *** 作        sqlConnection con = DbHelpersql.GetConnection();        sqlCommand cmd = con.CreateCommand();        con.open();        try        {            cmd.CommandText = "use master";            cmd.ExecuteNonquery();            StringBuilder sql = new StringBuilder();            //sql.Append("exec proc_Restore @dbFullname,@dbname");            sql.Append(@"--1.1修改为单用模式                    exec(N'ALTER DATABASE '+@dbname+' SET SINGLE_USER WITH RolLBACK IMMEDIATE');                --1.2结束链接进程	                DECLARE @kID varchar(max)  	                SET @kID=''  	                SELECT @kID=@kID+'KILL '+CAST(spID as Varchar(10))  FROM master..sysprocesses  	                WHERE dbID=DB_ID(@dbname)  ;	                EXEC(@kID) ;                --2.执行还原语句                    restore database @dbname from  disk=@dbFullname                    with replace  --覆盖现有的数据库                --3.重置数据库为多用户模式                    exec(N'ALTER DATABASE '+@dbname+' SET MulTI_USER WITH RolLBACK IMMEDIATE');");            sqlParameter[] parameters = new sqlParameter[]{                new sqlParameter("@dbname",};            parameters[0].Value = dbname;            parameters[1].Value = dbFullname;            cmd.CommandText = sql.ToString();            cmd.Parameters.AddRange(parameters);            cmd.ExecuteNonquery();        }        finally        {            con.Close();        }    }    catch (Exception ex)    {        throw new Exception("还原数据库出错" + ex);    }}


更多:

Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)

SqlServer消息 6107,级别 14 只能终止用户进程。

总结

以上是内存溢出为你收集整理的SqlServer T-Sql实现数据库完整备份和还原全部内容,希望文章能够帮你解决SqlServer T-Sql实现数据库完整备份和还原所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1173350.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存