用asp.net还原与恢复sqlserver数据库(转)

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

利用SQLDMO实现的,只要添加SQLDMO引用就好了,然后利用下边的类的方法就可以实现了。
我把原作者的类扩充了一下,可以自动识别web.config里 的数据库连接字符串,可以通过变量设置还原恢复的信息。

需要注意的时还原,还原的时候问题最大了,有别的用户使用数据库的时候无法还原,解决办法就是在MASTER数据库中添加一个存储过程:


create proc killspid (@dbname varchar(
20 ))
as
begin
declare @sql nvarchar(
500 )
declare @spid 
int
set  @sql = ' declare getspid cursor for 
select spid from sysprocesses where dbid = db_id( ''' +@dbname+ ''' ) '
exec (@sql)
open getspid
fetch next from getspid into @spid
while  @@fetch_status <>- 1
begin
exec(
' kill  ' + @spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
GO


在还原之前先执行这个存储过程,需要传递dbname,就是你的数据库的名字。下边是类的原代码:(web.config里的数据库连接字符串是constr)
 

using  System;

using  System.Configuration;

using  System.Data.SqlClient;

using  System.Data;

namespace  web.base_class

{

     
/// <summary>

     
/// DbOper类,主要应用SQLDMO实现对Microsoft SQL Server数据库的备份和恢复

     
/// </summary>


     
public class DbOper

     
{

          
private string server;

          
private string uid;

          
private string pwd;

          
private string database;

          
private string conn;

         
/// <summary>

         
/// DbOper类的构造函数

         
/// </summary>


         
public DbOper()

         
{

              conn
=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();

              server
=cut(conn,"server=",";");

              uid
=cut(conn,"uid=",";");

              pwd
=cut(conn,"pwd=",";");

              database
=cut(conn,"database=",";");

         }


         
public string cut(string str,string bg,string ed)

         
{

              
string sub;

              sub
=str.Substring(str.IndexOf(bg)+bg.Length);

              sub
=sub.Substring(0,sub.IndexOf(";"));

              
return sub;

         }


 

         
/// <summary>

         
/// 数据库备份

         
/// </summary>


         
public  bool DbBackup(string url)

         
{

              SQLDMO.Backup oBackup 
= new SQLDMO.BackupClass();

              SQLDMO.SQLServer oSQLServer 
= new SQLDMO.SQLServerClass();

              
try

              
{

                   oSQLServer.LoginSecure 
= false;

                   oSQLServer.Connect(server,uid, pwd);

                   oBackup.Action 
= SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;

                   oBackup.Database 
= database;

                   oBackup.Files 
= url;//"d:\Northwind.bak";

                   oBackup.BackupSetName 
= database;

                   oBackup.BackupSetDescription 
= "数据库备份";

                   oBackup.Initialize 
= true;

                   oBackup.SQLBackup(oSQLServer);

                   
return true;

              }


              
catch

              
{

                   
return false;

                   
throw;

              }


              
finally

              
{

                   oSQLServer.DisConnect();

              }


         }


 

         
/// <summary>

         
/// 数据库恢复

         
/// </summary>


         
public string DbRestore(string url)

         
{

              
if(exepro()!=true)//执行存储过程

              
{

                   
return "操作失败";

              }


              
else

              
{

                   SQLDMO.Restore oRestore 
= new SQLDMO.RestoreClass();

                   SQLDMO.SQLServer oSQLServer 
= new SQLDMO.SQLServerClass();

                   
try

                   
{

                        oSQLServer.LoginSecure 
= false;

                        oSQLServer.Connect(server, uid, pwd);

                        oRestore.Action 
= SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;

                        oRestore.Database 
= database;

                        oRestore.Files 
= url;//@"d:\Northwind.bak";

                        oRestore.FileNumber 
= 1;

                        oRestore.ReplaceDatabase 
= true;

                        oRestore.SQLRestore(oSQLServer);

                       
return "ok";

                   }


                   
catch(Exception e)

                   
{

                       
return "恢复数据库失败";

                       
throw;

                   }


                   
finally

                   
{

                        oSQLServer.DisConnect();

                   }


              }


         }


          
private bool exepro()

         
{

              SqlConnection conn1 
= new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");

              SqlCommand cmd 
= new SqlCommand("killspid",conn1);

              cmd.CommandType 
= CommandType.StoredProcedure;

              cmd.Parameters.Add(
"@dbname","port");

              
try

              
{

                   conn1.Open();

                   cmd.ExecuteNonQuery();

                   
return true;

              }


              
catch(Exception ex)

              
{

                   
return false;

              }


              
finally

              
{

                   conn1.Close();

              }


 

         }


     }


}





本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2006/02/28/339458.html,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
3月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
109 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
2月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
255 3
|
27天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
2月前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
3月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
39 4
|
2月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
3月前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
74 11
|
4月前
|
SQL 数据库
Microsoft SQL Server 2014如何来备份数据库
Microsoft SQL Server 2014如何来备份数据库
463 3
下一篇
DataWorks