由于要还原数据库,但是因为数据库始终是在访问状态(不知道这个说法正不正确),老是弹出,不是独享资源什么的。
在网上查了查,想要还原数据库必须断开连接。下面是语句
View Code
1 这时需要在还原数据库前先杀死正在使用数据库得线程. 2 3 1、首先定位到master 数据库 4 2、运行如下语句 5 6 如以下杀死正在使用'jcjq'数据库的线程: 7 8 declare @dbname varchar(20) 9 10 set @dbname='jcjq' 11 12 declare @sql nvarchar(500) 13 14 declare @spid int--SPID 值是当用户进行连接时指派给该连接的一个唯一的整数 15 16 set @sql='declare getspid cursor for 17 18 select spid from sysprocesses where dbid=db_id('''+@dbname+''')' 19 20 exec (@sql) 21 22 open getspid 23 24 fetch next from getspid into @spid 25 26 while @@fetch_status<>-1--如果FETCH 语句没有执行失败或此行不在结果集中。 27 28 begin 29 30 exec('kill '+@spid)--终止正常连接 31 32 fetch next from getspid into @spid 33 34 end 35 36 close getspid 37 38 deallocate getspid
但是数据库还原时,又出现:
尚未备份数据库 的日志尾部。如果该日志包含您不希望丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份该日志。请使用 RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句来只覆盖该日志的内容。 来源:http://www.greensoftcode.net/
提示此错误的原因是:可能是你的数据库服务器中存在同名数据库!
方法1:
----还原数据库成功的语句
View Code
1 USE master(一定要把需要还原的数据库的任何连接都要关闭掉,否则还原不上,所以用master) 2 GO 3 4 RESTORE DATABASE A120_20120523 FROM DISK = 'G:\DataBAse备份\A120_2012051823.bak' 5 WITH REPLACE 6 GO
方法二:
View Code
1 RESTORE DATABASE [aft_shop] FROM <!-备份文件地址--> DISK = N'G:\备份文件' WITH FILE = 1, MOVE N'aft_shop' TO N'G:\aft_shop.mdf', MOVE N'aft_shop_log' TO N'G:\\aft_shop.ldf', NOUNLOAD,REPLACE, STATS = 10, PASSWORD = 'xxxx'
所以 在WITH 后加入 REPLACE 或 STOPAT 就可以还原啦 !但同名数据库可能被覆盖!
PASSWORD 也可以不加,写成下面这样:
View Code
1 ---还原成功的语句 2 RESTORE DATABASE [A120_20120523] 3 4 ---数据库备份文件地址 5 FROM DISK = N'G:\DataBAse备份\A120_2012051823.bak' 6 WITH FILE = 1, 7 8 --逻辑名称, 数据库还原后移动到的位置 9 MOVE N'kuiper_WH_N_Data'TO N'G:\数据库安装\A120_20120523.mdf', 10 11 --逻辑名称, 数据库日志还原后移动到的位置 12 MOVE N'Kuiper_WH_N_Log'TO N'G:\数据库安装\A120_20120523.ldf', 13 NOUNLOAD,REPLACE, STATS = 10--, PASSWORD = 'xxx'
---查看数据库中的文件信息,可以查看逻辑名称
View Code
1 ---查看数据库中的文件信息,可以查看逻辑名称 2 RESTORE FILELISTONLY FROM DISK = 'G:\DataBAse备份\A120_2012051823.bak' 3 上面红色的部分是数据库的逻辑名称(LogicalName部分的内容)