Asp.Net 备份和恢复SQL SERVER 数据库

来源:互联网 发布:青银金融租赁 知乎 编辑:程序博客网 时间:2024/05/17 01:14

      我们通常备份数据库时,需要登录数据库服务器去备份和恢复,这样很不方便,其实SQL SERVER自带的命令可能让我们很简单地实现远程通过Asp.Net备份和恢复数据库。

BACKUP DATABASE '被备份的数据库名' TO DISK = '备份文件路径';
ALTER DATABASE '被恢复的数据库名' SET OFFLINE WITH ROOLBACK IMMEDIATE;
RESTORE DATABASE '被恢复的数据库名' FROM DISK = '备份文件路径';
ALTER DATABASE '被恢复的数据库名' SET ONLINE WITH ROOLBACK IMMEDIATE;
     

      简单几条命令就可以完成数据库的备份和恢复,在Asp.Net中,可以像调用Sql语句一样调用这四条语句,轻轻松松实现SQL SERVER数据库的备份和恢复。
  例子(以Northwind为例):
  1、备份Northwind数据库到C盘根目录下,以'Northwind.bak'为名:
        BACKUP DATABASE 'Northwind' TO DISK = 'C:/Northwind.bak';
  2、恢复Northwind数据库,C盘根目录下的'Northwind.bak'备份文件:
      a、将数据库置于离线状态
          ALTER DATABASE 'Northwind' SET OFFLINE WITH ROOLBACK IMMEDIATE;
      b、恢复Northwind数据库
          RESTORE DATABASE 'Northwind' FROM DISK = 'C:/Northwind.bak';
      c、将数据库置于在线状态
          ALTER DATABASE 'Northwind' SET ONLINE WITH ROOLBACK IMMEDIATE;

 

恢复数据库:
关键字:Alter Database 被恢复的数据库名 Set Offline with Rollback immediate;
            restore database 被恢复的数据库名 from disk = '备份文件路径';
            Alter Database 被恢复的数据库名 Set OnLine With rollback Immediate;

 

大多数情况下,在完整恢复模式或大容量日志恢复模式下,SQL Server 2005 要求先备份日志尾部,然后还原当前附加在服务器实例上的数据库。“尾日志备份”可捕获尚未备份的日志(日志尾部),是恢复计划中的最后一个相关备份。除非 RESTORE 语句包含 WITH REPLACE 或 WITH STOPAT 子句,否则,还原数据库而不先备份日志尾部将导致错误。
你就是在在完整恢复模式或大容量日志恢复模式下做恢复,所以会出现这种错误

(System.Data.SqlClient.SqlException: 尚未备份数据库 "MyData" 的日志尾部。如果该日志包含您不希望丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份该日志。请使用 RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句来只覆盖该日志的内容。 RESTORE DATABASE 正在异常终止。正在回滚不合法事务。)
解决方法:
string sql = "alter Database redbull set Offline with Rollback immediate;";
        sql += "restore database redbull from disk='" + nowpath + "'";
     
        sql += "WITH REPLACE "; //加这句话,即可解决问题,
        sql += "alter Database redbull Set OnLine with rollback Immediate;";

 

原创粉丝点击