一、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实现数据库完整备份和还原所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)