热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Sql数据库备份还原(解决因为数据库正在使用,所以无法获得对数据库的独占访问权问题)

sql备份语句BACKUPDATABASE[databaseName]TODISKD:\mydb.BAK使用者注意,备份后BAK文件是放在了数据库所在机器的路径下,如

sql备份语句
BACKUP DATABASE [databaseName] TO DISK ='D:\mydb.BAK' 

使用者注意,备份后BAK文件是放在了数据库所在机器的路径下,如果用虚拟主机的话,你的项目是访问不到这个bak文件的。。

注意[databaseName]为你要备份的数据库。

mydb.BAK为你备份数据库生成的Bak文件

sql还原

还原语句

RESTORE DATABASE [databaseName] FROM DISK='D:\mydb.BAK' WITH REPLACE

如果你直接在数据库中新建查询调用这条语句,语句可以顺利执行。

如果是程序中,通常会出现以下错误。

数据库正在使用,所以无法获得对数据库的独占访问权

我是在.netmvc中遇到这个错误的,用的是fluentdata,fluentdata获取了你当前数据库的上下文,从而执

行一系列操作。这个时候你要还原的库是被占用的,不会进行还原。

所以当进行还原时要用 其他数据库的上下文对象,比如master

还原语句应该写成

USE master RESTORE DATABASE [databaseName] FROM DISK='D:\mydb.BAK' WITH REPLACE

当然做这些还是不够的。还要执行以下语句

USE master ALTER DATABASE [databaseName] SET OFFLINE WITH ROLLBACK IMMEDIATE

USE master ALTER database [databaseName] set online

这两个语句的意思是让你的数据库断开所有链接在重新连接,这时候就不会被其他人占用了。

WITH ROLLBACK IMMEDIATE的意思是回滚所有正在运行的错误

注意

如果你在程序中调用以上两条语句的时候,不能用你要还原数据库的上下文对象,因为offline以后就获取不

到这个对象了。所以要使用其他数据库的上下文。比如master

以fluentdata为例。建立master的上下文对象。

粘贴我的代码过来

获取上下文:

 public static IDbContext QueryDB()
{
string path = ConfigurationManager.ConnectionStrings["MySqlConnection"].ConnectionString;
IDbContext db = new DbContext().ConnectionString(path, new SqlServerProvider());
return db;
}

public static IDbContext QueryDB2()
{
string path = ConfigurationManager.ConnectionStrings["MySqlConnection2"].ConnectionString;
IDbContext db = new DbContext().ConnectionString(path, new SqlServerProvider());
return db;
}
}

第一个是我当前数据库的上下文,第二个是master的

            var dbMaster = DBhelper.QueryDB2();
dbMaster.Sql("ALTER DATABASE [yuanweishiyan2] SET OFFLINE WITH ROLLBACK IMMEDIATE").Execute();
dbMaster.Sql("
ALTER database [yuanweishiyan2] set online").Execute();

var db = DBhelper.QueryDB();
string sql = string.Format(@"
USE master RESTORE DATABASE yuanweishiyan2 FROM DISK='D:\mydb3.BAK' WITH REPLACE ");
db.Sql(sql).Execute();

推荐阅读
author-avatar
qixian0392_648
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有