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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:
None.gif利用SQLDMO实现的,只要添加SQLDMO引用就好了,然后利用下边的类的方法就可以实现了。
None.gif我把原作者的类扩充了一下,可以自动识别web.config里 的数据库连接字符串,可以通过变量设置还原恢复的信息。
None.gif
None.gif需要注意的时还原,还原的时候问题最大了,有别的用户使用数据库的时候无法还原,解决办法就是在MASTER数据库中添加一个存储过程:
None.gif
None.gif
None.gifcreate proc killspid (@dbname varchar(20))
None.gif as
None.gifbegin
None.gifdeclare @sql nvarchar(500)
None.gifdeclare @spid int
None.gif set @sql='declare getspid cursor for
None.gifselect spid from sysprocesses where dbid=db_id('''+@dbname+''')'
None.gifexec (@sql)
None.gifopen getspid
None.giffetch next from getspid into @spid
None.gif while @@fetch_status<>-1
None.gifbegin
None.gifexec('kill '+@spid)
None.giffetch next from getspid into @spid
None.gifend
None.gifclose getspid
None.gifdeallocate getspid
None.gifend
None.gifGO
None.gif
None.gif
None.gif在还原之前先执行这个存储过程,需要传递dbname,就是你的数据库的名字。下边是类的原代码:(web.config里的数据库连接字符串是constr)
None.gif
None.gif
None.gif using System;
None.gif
None.gif using System.Configuration;
None.gif
None.gif using System.Data.SqlClient;
None.gif
None.gif using System.Data;
None.gif
None.gif namespace web.base_class
None.gif
ExpandedBlockStart.gif ContractedBlock.gif dot.gif {
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif/**//// <summary>
InBlock.gif
InBlock.gif
/// DbOper类,主要应用SQLDMO实现对Microsoft SQL Server数据库的备份和恢复
InBlock.gif
ExpandedSubBlockEnd.gif
/// </summary>

InBlock.gif
InBlock.gifpublic class DbOper
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gifprivate string server;
InBlock.gif
InBlock.gifprivate string uid;
InBlock.gif
InBlock.gifprivate string pwd;
InBlock.gif
InBlock.gifprivate string database;
InBlock.gif
InBlock.gifprivate string conn;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif/**//// <summary>
InBlock.gif
InBlock.gif
/// DbOper类的构造函数
InBlock.gif
ExpandedSubBlockEnd.gif
/// </summary>

InBlock.gif
InBlock.gifpublic DbOper()
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();
InBlock.gif
InBlock.gif server=cut(conn,"server=",";");
InBlock.gif
InBlock.gif uid=cut(conn,"uid=",";");
InBlock.gif
InBlock.gif pwd=cut(conn,"pwd=",";");
InBlock.gif
InBlock.gif database=cut(conn,"database=",";");
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gifpublic string cut(string str,string bg,string ed)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gifstring sub;
InBlock.gif
InBlock.gif sub=str.Substring(str.IndexOf(bg)+bg.Length);
InBlock.gif
InBlock.gif sub=sub.Substring(0,sub.IndexOf(";"));
InBlock.gif
InBlock.gifreturn sub;
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif/**//// <summary>
InBlock.gif
InBlock.gif
/// 数据库备份
InBlock.gif
ExpandedSubBlockEnd.gif
/// </summary>

InBlock.gif
InBlock.gifpublic bool DbBackup(string url)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
InBlock.gif
InBlock.gif SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
InBlock.gif
InBlock.giftry
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif oSQLServer.LoginSecure = false;
InBlock.gif
InBlock.gif oSQLServer.Connect(server,uid, pwd);
InBlock.gif
InBlock.gif oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
InBlock.gif
InBlock.gif oBackup.Database = database;
InBlock.gif
InBlock.gif oBackup.Files = url;//"d:\Northwind.bak";
InBlock.gif

InBlock.gif oBackup.BackupSetName = database;
InBlock.gif
InBlock.gif oBackup.BackupSetDescription = "数据库备份";
InBlock.gif
InBlock.gif oBackup.Initialize = true;
InBlock.gif
InBlock.gif oBackup.SQLBackup(oSQLServer);
InBlock.gif
InBlock.gifreturn true;
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gifcatch
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gifreturn false;
InBlock.gif
InBlock.gifthrow;
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.giffinally
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif oSQLServer.DisConnect();
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif/**//// <summary>
InBlock.gif
InBlock.gif
/// 数据库恢复
InBlock.gif
ExpandedSubBlockEnd.gif
/// </summary>

InBlock.gif
InBlock.gifpublic string DbRestore(string url)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gifif(exepro()!=true)//执行存储过程
InBlock.gif

ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gifreturn "操作失败";
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gifelse
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
InBlock.gif
InBlock.gif SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
InBlock.gif
InBlock.giftry
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif oSQLServer.LoginSecure = false;
InBlock.gif
InBlock.gif oSQLServer.Connect(server, uid, pwd);
InBlock.gif
InBlock.gif oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
InBlock.gif
InBlock.gif oRestore.Database = database;
InBlock.gif
InBlock.gif oRestore.Files = url;//@"d:\Northwind.bak";
InBlock.gif

InBlock.gif oRestore.FileNumber = 1;
InBlock.gif
InBlock.gif oRestore.ReplaceDatabase = true;
InBlock.gif
InBlock.gif oRestore.SQLRestore(oSQLServer);
InBlock.gif
InBlock.gifreturn "ok";
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gifcatch(Exception e)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gifreturn "恢复数据库失败";
InBlock.gif
InBlock.gifthrow;
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.giffinally
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif oSQLServer.DisConnect();
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gifprivate bool exepro()
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif SqlConnection conn1 = new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");
InBlock.gif
InBlock.gif SqlCommand cmd = new SqlCommand("killspid",conn1);
InBlock.gif
InBlock.gif cmd.CommandType = CommandType.StoredProcedure;
InBlock.gif
InBlock.gif cmd.Parameters.Add("@dbname","port");
InBlock.gif
InBlock.giftry
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif conn1.Open();
InBlock.gif
InBlock.gif cmd.ExecuteNonQuery();
InBlock.gif
InBlock.gifreturn true;
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gifcatch(Exception ex)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gifreturn false;
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.giffinally
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
InBlock.gif
InBlock.gif conn1.Close();
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
ExpandedSubBlockEnd.gif }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif



本文转自高海东博客园博客,原文链接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
相关文章
|
5月前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
70 4
|
5月前
|
存储 NoSQL API
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
304 0
|
2月前
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
|
5月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
68 0
|
5月前
|
SQL 数据库
如何把高版本的sqlserver 还原到低版本的 sqlserver_kaic
如何把高版本的sqlserver 还原到低版本的 sqlserver_kaic
|
5月前
|
Oracle 关系型数据库 数据管理
.NET医院检验系统LIS源码,使用了oracle数据库,保证数据的隔离和安全性
LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳作中解放出来,提高了检验人员的工作效率和效益,降低了劳动成本和差错发生率。
|
5月前
|
SQL 数据库连接 数据库
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
238 0
|
12月前
|
开发框架 .NET 数据库
asp.net企业费用报销管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
asp.net 企业费用报销管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使 用c#语言开发 应用技术:asp.net c#+sqlserver 开发工具:vs2010 +sqlserver
90 0
|
16天前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
82 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
11天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
22 4
下一篇
无影云桌面