---------------------
作者:lynehylo
来源:优快云
原文:https://blog.youkuaiyun.com/lynehylo/article/details/80577519
版权声明:本文为博主原创文章,转载请附上博文链接!
当需要完整的复制一个数据库时,不清楚原理的时候往往会出现各种问题。下面讲解一种简单易操作的数据库复制方法。
步骤一:在Microsoft sql server Management studio中,将源数据库进行备份,生成一个备份文件dbname.bak;记住备份文件存放的地址,或者复制下来,以防一会找不到;
步骤二:在Microsoft sql server Management studio中,新建一个数据库dbname2(与源数据库名称不一样);新建数据库的时候记住或者重新指定数据库文件存放的路径,我这里指定到自定义目录;创建后在E:\data下生成2个文件;
步骤三:选中新建的dbname2数据库,右击选择 任务-->还原,在还原面板上按如下操作;
最后,点击确认即可。
如果出现: sql server 还原数据库的时候,提示"因为数据库正在使用,所以无法获得对数据库的独占访问权"问题
一、利用SQL语句,杀死正在使用该数据库的所有进程 代码如下
declare @dbname varchar(50) set @dbname='数据库名称'
declare @sql varchar(50)
declare cs_result cursor local for select 'kill '+cast(spid as varchar(50))
from sys.sysprocesses where db_name(dbid)=@dbname
open cs_result fetch next from cs_result into @sql
while @@fetch_status=0
begin execute(@sql)
fetch next from cs_result
into @sql end close cs_result
deallocate cs_result
该SQL语句利用游标循环所有正在使用该数据库的进程,并通过kill命令杀死进程。
二、利用SQL语句,断开所有用户链接,并回滚所有事务,具体SQL语句如下
ALTER DATABASE [数据库名称] SET OFFLINE WITH ROLLBACK IMMEDIATE
注意:
1.SQL语句要在master数据库下面执行
2.查看是否清除干净可以用如下sql语句
select * from master..sysprocesses where dbid=db_id( '数据库名称')
步骤四:还原后的数据库,可能会一直显示“正在还原...”。管理器不会主动刷新,手工刷新一下。如果手工刷新后还是显示“正在还原”,则可能是进程被挂起了,需要执行:RESTORE database dbname2 with recovery 即可。