如下图, 首先在sqlserver里面新建了一个数据库"JSKJ_1125", 路径是存放在D:\DB目录下, 然后对该数据库右键还原
选择备份文件, 并"勾选覆盖现有数据库", 提示如下图所示错误——(无法覆盖文件 'C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\JSKJ_DEV_Data.mdf'。数据库 'JSKJ_1123' 正在使用该文件。)
这个地方不明白,新建数据库的时候明明是建在D:/DB目录下面的,这个JSKJ_DEV_Data.mdf文件是干嘛的,为啥还原的时候和这个文件有关呢?
你试试用sql语句进行还原。
RESTORE DATABASE ccflow4
FROM DISK ='F:\1MyProject\CCFLOW6\SQL\newSQL\ccport20161116.bak'
with replace,
MOVE 'ccflow4' TO 'F:\SQLExample\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\ccflow4.mdf',
MOVE 'ccflow4_log' TO 'F:\SQLExample\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\ccflow4_log.ldf'
把三个路径改成你的。
http://www.cnblogs.com/liuwenxu/p/6085427.html
这段语句是干嘛的啊?
@yangyong_yy:你不是想还原数据库吗,
下面的是把备份还原成数据库的sql语句
RESTORE DATABASE 要还原的数据库名字
FROM DISK ='备份数据库的路径'
with replace,
MOVE 'mdf的文件名' TO 'mdf的路径',
MOVE 'ldf的文件名' TO 'ldf的路径'
@二环东路:
是在master下面执行还是在要还原的数据库下面执行?
另外,最后两句:
MOVE 'mdf的文件名' TO 'mdf的路径',
MOVE 'ldf的文件名' TO 'ldf的路径'
这两个文件是指要还原的数据库的文件吧? 如果不需要更换目录是不是不用执行?
@yangyong_yy: 你新建查询就行
比如说A是一个备份文件A.bak B是你为放A刚刚创建的数据库
RESTORE DATABASE B
FROM DISK ='F:\1MyProject\CCFLOW6\SQL\newSQL\A.bak'
with replace,
MOVE 'B' TO 'F:\SQLExample\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\B.mdf',
MOVE 'B_log' TO 'F:\SQLExample\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\B_log.ldf'
路径的话你根据你自己项目的路径去写就行
@二环东路: 好的,谢谢你的回答, 长知识了, 不过我还像是想找到问题中不能还原的原因
@二环东路:
大神按你的方法执行还原了, 不过备份的数据库是不带.bak后缀的, 执行结果如下, 请问下这个是什么原因?
你是分离的数据库还是备份的数据库?
备份的
提示很明显是显示文件被占用,不能够使用还原。建议看看文件两边是不是有占用情况。然后应该就没问题了
(无法覆盖文件 'C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\JSKJ_DEV_Data.mdf'。数据库 'JSKJ_1123' 正在使用该文件。)
我对这段提示不明白, 我还原的JSKJ_1125数据库, 和JSKJ_DEV_Data.mdf这个文件有啥关系?
网上查了一下,终于解决了。虽然新建空库的时候,指定了文件和日志的地址是D:\DB,但是sql server2012在还原的时候会默认把地址修改为原备份文件的地址,所以如果该备份文件已经被还原过一次后, 再次还原的时候就会报错,提示“XXX”数据库正在使用该文件,只要把地址路径重新指定为当前数据库地址即可;