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

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

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.gif
select spid from sysprocesses where dbid = db_id( ''' +@dbname+ ''' ) '
None.gif
exec (@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
{
InBlock.gif
ExpandedSubBlockStart.gif     
/// <summary>
InBlock.gif
InBlock.gif     
/// DbOper类,主要应用SQLDMO实现对Microsoft SQL Server数据库的备份和恢复
InBlock.gif
ExpandedSubBlockEnd.gif     
/// </summary>

InBlock.gif
InBlock.gif     
public class DbOper
InBlock.gif
ExpandedSubBlockStart.gif     
{
InBlock.gif
InBlock.gif          
private string server;
InBlock.gif
InBlock.gif          
private string uid;
InBlock.gif
InBlock.gif          
private string pwd;
InBlock.gif
InBlock.gif          
private string database;
InBlock.gif
InBlock.gif          
private string conn;
InBlock.gif
ExpandedSubBlockStart.gif         
/// <summary>
InBlock.gif
InBlock.gif         
/// DbOper类的构造函数
InBlock.gif
ExpandedSubBlockEnd.gif         
/// </summary>

InBlock.gif
InBlock.gif         
public DbOper()
InBlock.gif
ExpandedSubBlockStart.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.gif         
public string cut(string str,string bg,string ed)
InBlock.gif
ExpandedSubBlockStart.gif         
{
InBlock.gif
InBlock.gif              
string 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.gif              
return sub;
InBlock.gif
ExpandedSubBlockEnd.gif         }

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

InBlock.gif
InBlock.gif         
public  bool DbBackup(string url)
InBlock.gif
ExpandedSubBlockStart.gif         
{
InBlock.gif
InBlock.gif              SQLDMO.Backup oBackup 
= new SQLDMO.BackupClass();
InBlock.gif
InBlock.gif              SQLDMO.SQLServer oSQLServer 
= new SQLDMO.SQLServerClass();
InBlock.gif
InBlock.gif              
try
InBlock.gif
ExpandedSubBlockStart.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.gif                   
return true;
InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
InBlock.gif              
catch
InBlock.gif
ExpandedSubBlockStart.gif              
{
InBlock.gif
InBlock.gif                   
return false;
InBlock.gif
InBlock.gif                   
throw;
InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
InBlock.gif              
finally
InBlock.gif
ExpandedSubBlockStart.gif              
{
InBlock.gif
InBlock.gif                   oSQLServer.DisConnect();
InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
ExpandedSubBlockEnd.gif         }

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

InBlock.gif
InBlock.gif         
public string DbRestore(string url)
InBlock.gif
ExpandedSubBlockStart.gif         
{
InBlock.gif
InBlock.gif              
if(exepro()!=true)//执行存储过程
InBlock.gif

ExpandedSubBlockStart.gif              
{
InBlock.gif
InBlock.gif                   
return "操作失败";
InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
InBlock.gif              
else
InBlock.gif
ExpandedSubBlockStart.gif              
{
InBlock.gif
InBlock.gif                   SQLDMO.Restore oRestore 
= new SQLDMO.RestoreClass();
InBlock.gif
InBlock.gif                   SQLDMO.SQLServer oSQLServer 
= new SQLDMO.SQLServerClass();
InBlock.gif
InBlock.gif                   
try
InBlock.gif
ExpandedSubBlockStart.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.gif                       
return "ok";
InBlock.gif
ExpandedSubBlockEnd.gif                   }

InBlock.gif
InBlock.gif                   
catch(Exception e)
InBlock.gif
ExpandedSubBlockStart.gif                   
{
InBlock.gif
InBlock.gif                       
return "恢复数据库失败";
InBlock.gif
InBlock.gif                       
throw;
InBlock.gif
ExpandedSubBlockEnd.gif                   }

InBlock.gif
InBlock.gif                   
finally
InBlock.gif
ExpandedSubBlockStart.gif                   
{
InBlock.gif
InBlock.gif                        oSQLServer.DisConnect();
InBlock.gif
ExpandedSubBlockEnd.gif                   }

InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
ExpandedSubBlockEnd.gif         }

InBlock.gif
InBlock.gif          
private bool exepro()
InBlock.gif
ExpandedSubBlockStart.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.gif              
try
InBlock.gif
ExpandedSubBlockStart.gif              
{
InBlock.gif
InBlock.gif                   conn1.Open();
InBlock.gif
InBlock.gif                   cmd.ExecuteNonQuery();
InBlock.gif
InBlock.gif                   
return true;
InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
InBlock.gif              
catch(Exception ex)
InBlock.gif
ExpandedSubBlockStart.gif              
{
InBlock.gif
InBlock.gif                   
return false;
InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
InBlock.gif              
finally
InBlock.gif
ExpandedSubBlockStart.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
相关文章
|
18天前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
84 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
2月前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
13天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
25 4
|
27天前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
41 11
|
2月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
2月前
|
SQL 数据库
Microsoft SQL Server 2014如何来备份数据库
Microsoft SQL Server 2014如何来备份数据库
126 3
|
2月前
|
SQL 关系型数据库 MySQL
SQL数据库和 SQLserver数据库
【8月更文挑战第19天】SQL数据库和 SQLserver数据库
48 2
|
2月前
|
SQL 存储 安全
SQL Server数据库创建
【8月更文挑战第19天】SQL Server数据库创建
30 1
|
2月前
|
SQL 关系型数据库 数据库
数据库空间之谜:彻底解决RDS for SQL Server的空间难题
【8月更文挑战第16天】在管理阿里云RDS for SQL Server时,合理排查与解决空间问题是确保数据库性能稳定的关键。常见问题包括数据文件增长、日志文件膨胀及索引碎片累积。利用SQL Server的动态管理视图(DMV)可有效监测文件使用情况、日志空间及索引碎片化程度。例如,使用`sp_spaceused`检查文件使用量,`sys.dm_db_log_space_usage`监控日志空间,`sys.dm_db_index_physical_stats`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
52 2
|
2月前
|
SQL Java 关系型数据库
应用DriverManager类创建sqlserver数据库连接实例 JSP中使用数据库
该博客文章介绍了在JSP中使用JDBC连接SQL Server数据库的方法,包括加载数据库驱动、建立数据库连接的过程,并提供了一个使用DriverManager类创建数据库连接的Java示例代码。
下一篇
无影云桌面